最近经历了几次面试,深觉在企业中,java安全是十分受重视的,于是打算对java安全进行深入学习,本系列是对Struts2的漏洞进行分析与复现,写的不好欢迎大家指出问题,本文所有源码与poc&exp:https://github.com/xishir/Struts2Vuls/tree/master/S2-001
漏洞摘要
|
|
简要原理
在默认配置下,如果用户所提交的表单出现验证错误
,后端会对用户的输入进行解析处理
,然后返回并显示处理结果
。 举个例子,当你提交的登录表单为username=xishir&password=%{1+1}
时,后端验证登录失败后会返回登录界面并显示你的输入,这时password字段中的OGNL表达式已经被解析处理过了,所以会显示%{1+1}
的解析结果2
,从而可以构造payload进行RCE。
环境搭建
下载struts-2.0.1
地址:http://archive.apache.org/dist/struts/binaries/struts-2.0.1-all.zip
创建web工程
目录结构
这里我是用的是MyEclipse,创建一个web工程,然后将struts-2.0.1中的几个jar包导入并新建如下几个文件
web.xml
index.jsp
welcome.jsp
struts.xml
com.demo.action.LoginAction.java
漏洞利用
POC:
|
|
EXP:
获取tomcat执行路径:
获取Web路径:
执行任意命令:
带参数的命令:new java.lang.String[]{"cat","/etc/passwd"}
参考链接
https://cwiki.apache.org/confluence/display/WW/S2-001
http://rickgray.me/review-struts2-remote-command-execution-vulnerabilities.html
https://github.com/vulhub/vulhub/tree/master/struts2/s2-001
https://chybeta.github.io/2018/02/06/【struts2-命令-代码执行漏洞分析系列】S2-001/