转载

Java中间件通用回显方法的问题及处理

之前写的 《基于请求/响应对象搜索的Java中间件通用回显方法(针对HTTP)》 实际使用情况中会有问题,再水一篇文章单独解决一下。

后续有其他问题的话会在这里更新哈~

没有回显/高并发时才有回显

残笑师傅给我反馈说:只有高并发的环境下才能看到回显结果,结果中包含了:没HTTP只有命令输出的情况、没回显的情况、有回显的情况、有回显多次的情况。

这个问题是因为搜索到了NIO的队列中,由于Request加了存在cmd头的限定,所以搜索到的Request一定是你的Request,但是Response就不好说了,也就是说如果你在发这个的攻击包的时候,如果还有其它人在访问,那么很有可能,你的命令输出结果就输出到其它访问的结果中了。

之前测试的时候,只测了单一线程发送的情况,所以没发现这个问题,emm,还是得测试充分的。

模拟测试:

模拟正常访问:Burp Intruder使用Null Payloads发送1000次,并发10,固定发送间隔500ms。

访问的其实就是个404页面

Java中间件通用回显方法的问题及处理

模拟攻击访问:Burp Repeater发送攻击报文

然后就可以发现,某几次攻击请求中,响应为空,但是一个普通的请求中出现了我们想要的结果:

某几次的攻击请求结果哪里都找不到,应该是找到的Response对象,还没等写入,就被销毁了。。

Java中间件通用回显方法的问题及处理

Java中间件通用回显方法的问题及处理

解决方法

目前翻阅了Tomcat、Weblogic、Jetty、JBOSS的代码,发现Request对象下面都带有对应的Response对象,所以既然可以准确定位到Request对象,那么Response也就有了。

(Jetty的resposne不是直接包含在request对象中,这三者都有无参的getResponse方法,直接反射调用就好了~)

PS:前几天还在p师傅的小密圈跟Kingkk师傅说觉得Weblogic的Request对象下面带Response好奇怪,结果中间件都这么干,emm,我Out了。。。

目前还是测了Tomcat/Weblogic/Jetty没有问题,JBoss懒得装了,有兴趣的师傅可以试一下。

Java中间件通用回显方法的问题及处理

改好的代码:

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

原文  https://blog.csdn.net/fnmsd/article/details/106890242
正文到此结束
Loading...