Java中间件通用回显方法的问题及处理
之前写的《基于请求/响应对象搜索的Java中间件通用回显方法(针对HTTP)》实际使用情况中会有问题,再水一篇文章单独解决一下。
后续有其他问题的话会在这里更新哈~
没有回显/高并发时才有回显
残笑师傅给我反馈说:只有高并发的环境下才能看到回显结果,结果中包含了:没HTTP只有命令输出的情况、没回显的情况、有回显的情况、有回显多次的情况。
这个问题是因为搜索到了NIO的队列中,由于Request加了存在cmd头的限定,所以搜索到的Request一定是你的Request,但是Response就不好说了,也就是说如果你在发这个的攻击包的时候,如果还有其它人在访问,那么很有可能,你的命令输出结果就输出到其它访问的结果中了。
之前测试的时候,只测了单一线程发送的情况,所以没发现这个问题,emm,还是得测试充分的。
模拟测试:
模拟正常访问: Burp Intruder使用Null Payloads发送1000次,并发10,固定发送间隔500ms。
访问的其实就是个404页面
模拟攻击访问: Burp Repeater发送攻击报文
然后就可以发现,某几次攻击请求中,响应为空,但是一个普通的请求中出现了我们想要的结果:
某几次的攻击请求结果哪里都找不到,应该是找到的Response对象,还没等写入,就被销毁了。。
解决方法
目前翻阅了Tomcat、Weblogic、Jetty、JBOSS的代码,发现Request对象下面都带有对应的Response对象,所以既然可以准确定位到Request对象,那么Response也就有了。
(Jetty的resposne不是直接包含在request对象中,这三者都有无参的getResponse方法,直接反射调用就好了~)
PS: 前几天还在p师傅的小密圈跟Kingkk师傅说觉得Weblogic的Request对象下面带Response好奇怪,结果中间件都这么干,emm,我Out了。。。
目前还是测了Tomcat/Weblogic/Jetty没有问题,JBoss懒得装了,有兴趣的师傅可以试一下。
改好的代码:
https://gist.github.com/fnmsd/5c98b20cef16cf4942de0eba34dc2ad7
参考:
http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/connector/Request.html#field_summary
https://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/server/Request.html
https://docs.jboss.org/jbossweb/latest/api/org/apache/catalina/connector/Request.html
Weblogic的Request类名为:weblogic.servlet.internal.ServletRequestImpl