Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/acharaf06/cve-2017-5638-attack-and-defense
防御工具漏洞分析Web应用程序漏洞利用WAF绕过渗透测试学习与教育实验室与实践
GitHubacharaf06/cve-2017-5638-attack-and-defense

CVE-2017-5638-Attack-and-Defense

基于 Docker 的安全实验室,演示 Apache Struts2 S2-045(CVE-2017-5638)的利用与防御,包含存在漏洞和已修复的应用程序,并配备 WAF 防护,用于实战训练。

查看仓库
158个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Apache Struts2 S2-045 防御与利用实验环境

基于 Docker 的安全实验环境,演示 Apache Struts2 S2-045 漏洞(CVE-2017-5638)的利用与防御。该实验环境包含:

  1. 脆弱应用:Struts 2.3.31(存在 S2-045 漏洞)用于利用演示
  2. 防御实验环境:Struts 6.3.x(已修补)配合 WAF 防护,用于防御训练

⚠️ 安全警告:本实验环境包含可工作的漏洞利用程序和脆弱代码。请仅在隔离环境中使用。切勿暴露到公共网络。

架构概览

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                     主机(仅限 127.0.0.1)                    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────┐    ┌─────────────────┐              │
│  │   模拟器        │───▶│   Nginx 代理    │              │
│  │ (基于 curl)   │    │  + WAF 规则     │              │
│  └─────────────────┘    └────────┬────────┘              │
│                                  │                        │
│                          ┌───────┴────────┐              │
│                          │                │                │
│                  ┌───────▼──────┐ ┌───────▼──────┐        │
│                  │  防御应用    │ │  脆弱应用    │        │
│                  │ (Struts 6.3) │ │ (2.3.31)    │        │
│                  │ 端口: 8080  │ │ 端口: 8081  │        │
│                  └──────────────┘ └──────────────┘        │
│                                                             │
│  ┌─────────────────┐                                      │
│  │  利用容器       │───▶ 脆弱应用 (8081)                    │
│  └─────────────────┘                                      │
│                                                             │
│  日志挂载至:./logs/nginx/, ./logs/app/,                   │
│            ./logs/app-vulnerable/                          │
└─────────────────────────────────────────────────────────────┘

组件

容器用途端口
nginx带 WAF 规则、速率限制的反向代理127.0.0.1:8080
appTomcat 9 + Struts 6.3.x(已修补,防御实验环境)仅内部
app-vulnerableTomcat 9 + Struts 2.3.31(存在漏洞,用于利用演示)127.0.0.1:8081
exploit利用演示容器不适用
simulator发送测试请求(良性 + 可疑模式)不适用

快速开始

前提条件

  • Docker(版本 20.10 或更高)
  • Docker Compose(版本 2.0 或更高)
  • Python 3(可选,用于直接运行利用脚本)
  • curl(可选,用于手动测试)

安装

1. 克隆仓库

root@kitploit:~
# 克隆仓库
git clone https://github.com/ACharaf06/cybersec.git
cd cybersec

2. 构建并运行

root@kitploit:~
# 构建所有容器(首次运行可能需要几分钟)
docker compose build

# 启动防御实验环境(nginx + 已修补的应用)
docker compose up -d nginx app

# 启动脆弱应用(用于利用演示)
docker compose up -d app-vulnerable

# 验证服务是否正在运行
docker compose ps

# 等待服务健康(约 60 秒)
sleep 60

# 检查健康端点
curl http://127.0.0.1:8080/struts-lab/health  # 防御实验环境
curl http://127.0.0.1:8081/struts-lab/health   # 脆弱应用

预期输出:

  • 防御实验环境:JSON 响应中包含 "status":"healthy" 和 "strutsVersion":"6.3.0.2 (已修补 - 不受 S2-045 影响)"
  • 脆弱应用:JSON 响应中包含 "status":"healthy" 和 "strutsVersion":"2.3.31 (对 S2-045 存在漏洞)"

2. 防御实验环境测试

root@kitploit:~
# 运行模拟器容器(测试防御机制)
docker-compose run --rm simulator

# 或者手动运行单个测试:
# 合法上传
curl -X POST -F "[email protected]" http://127.0.0.1:8080/struts-lab/upload

# 可疑 Content-Type(将被 WAF 拦截)
curl -v -X POST \
  -H "Content-Type: multipart/form-data; boundary=----SUSPICIOUS" \
  http://127.0.0.1:8080/struts-lab/upload

3. 利用演示

root@kitploit:~
# 运行利用容器(演示 S2-045 利用)
docker-compose --profile exploit run --rm exploit

# 或者直接使用 Python 利用脚本
python3 exploit/exploit.py http://127.0.0.1:8081/struts-lab 'whoami'

# 或者使用 bash 脚本
./exploit/demo_exploit.sh

⚠️ 警告:脆弱应用是故意可被利用的。请仅在隔离环境中运行。

4. 查看日志

root@kitploit:~
# 防御实验环境日志
tail -f logs/nginx/access.log      # Nginx 访问日志
tail -f logs/nginx/error.log       # WAF 拦截记录
tail -f logs/app/struts-lab.log    # 防御应用日志

# 脆弱应用日志
tail -f logs/app-vulnerable/struts-lab.log  # 脆弱应用日志

# 所有日志合并
docker-compose logs -f

观察要点

防御实验环境(端口 8080)

合法请求:

  • Nginx 访问日志:200 响应
  • 应用日志:INFO 级别的上传处理消息
  • 请求成功完成

可疑/畸形请求:

  • Nginx 访问日志:403 Forbidden 或 400 Bad Request
  • Nginx 错误日志:触发 WAF 规则的消息
  • 应用日志:若请求到达应用,可能显示解析错误
  • 请求被拦截或清理

脆弱应用(端口 8081)

成功利用:

  • HTTP 200 或 500 响应
  • 命令输出在响应体中可见
  • OGNL 表达式被求值
  • 系统命令被执行

日志示例:

Nginx 拦截可疑 Content-Type(防御实验环境):

root@kitploit:~
[WAF] 拦截可疑的 Content-Type 模式 - 请求 ID: abc123

应用记录请求元数据(防御实验环境):

root@kitploit:~
[REQUEST] ID=abc123 Content-Type=multipart/form-data Method=POST URI=/upload
[UPLOAD] 正在处理请求 abc123 的文件上传

成功利用(脆弱应用):

root@kitploit:~
HTTP/1.1 200 OK
...
root
(命令输出出现在响应体中)

对比:脆弱应用 vs 防御实验环境

特性脆弱应用(端口 8081)防御实验环境(端口 8080)
Struts 版本2.3.31(存在漏洞)6.3.0.2(已修补)
WAF 保护❌ 无✅ Nginx WAF 规则
速率限制❌ 无✅ 10 req/s
请求大小限制❌ 无✅ 10MB 主体,8KB 头部
安全日志记录⚠️ 最小✅ 全面
OGNL 注入✅ 可利用❌ 已拦截/已修补
RCE 可能性✅ 是❌ 否
用途利用演示防御训练

安全说明

隔离

  • 所有服务仅绑定到 127.0.0.1(无法外部访问)
  • 内部 Docker 网络用于容器通信
  • 无端口暴露到 0.0.0.0
  • 脆弱应用绝不可暴露到公共网络

防御层(防御实验环境)

  1. Nginx WAF 规则:在到达应用前拦截可疑的 Content-Type 模式
  2. 速率限制:每 IP 10 次请求/秒
  3. 请求大小限制:最大主体 10MB,最大头部 8KB
  4. 已修补的 Struts:使用 Struts 6.3.x(不受 S2-045 影响)
  5. 全面日志记录:所有可疑活动均被记录

S2-045 是什么

S2-045(CVE-2017-5638)是 Apache Struts2 版本 2.3.5 - 2.3.31 和 2.5 - 2.5.10 中的一个严重漏洞,其中:

  • 恶意的 Content-Type 头部可以注入 OGNL 表达式
  • Jakarta Multipart 解析器对这些表达式进行了求值
  • 导致远程代码执行(RCE)

脆弱应用(端口 8081)演示了此漏洞。 防御实验环境(端口 8080)展示了如何防范它。

文件结构

root@kitploit:~
.
├── docker-compose.yml          # 容器编排
├── README.md                   # 本文件
├── EXPLOITATION_GUIDE.md      # 详细的利用指南
├── TECHNICAL_DETAILS.md        # 技术实现细节
├── GLOSSARY.md                 # 安全术语词汇表
├── nginx/
│   ├── nginx.conf              # Nginx 主配置
│   └── waf-rules.conf          # 针对 S2-045 模式的 WAF 规则
├── app/                        # 防御实验环境(已修补)
│   ├── Dockerfile              # Tomcat + Maven 构建
│   └── struts-app/
│       ├── pom.xml             # Maven 项目(Struts 6.3.x)
│       └── src/main/
│           ├── java/           # Action 类
│           ├── resources/      # Struts + Log4j 配置
│           └── webapp/         # JSP 视图 + web.xml
├── app-vulnerable/             # 脆弱应用(用于利用)
│   ├── Dockerfile              # Tomcat + Maven 构建
│   └── struts-app/
│       ├── pom.xml             # Maven 项目(Struts 2.3.31)
│       └── src/main/
│           ├── java/           # Action 类
│           ├── resources/      # Struts + Log4j 配置
│           └── webapp/         # JSP 视图 + web.xml
├── exploit/                    # 利用工具
│   ├── Dockerfile              # 利用容器
│   ├── demo_exploit.sh         # Bash 利用脚本
│   └── exploit.py              # Python 利用脚本
├── simulator/
│   ├── Dockerfile              # Alpine + curl
│   └── simulate.sh             # 测试脚本
└── logs/                       # 挂载的日志目录
    ├── nginx/
    ├── app/                    # 防御实验环境日志
    └── app-vulnerable/         # 脆弱应用日志

清理

root@kitploit:~
# 停止所有容器
docker compose down

# 移除卷和日志
docker compose down -v
rm -rf logs/

# 完全清理(包括镜像)
docker compose down --rmi all -v

开发设置

项目结构

项目组织如下:

  • app/ - 防御实验环境应用(Struts 6.3.x,已修补)
  • app-vulnerable/ - 脆弱应用(Struts 2.3.31)
  • exploit/ - 利用工具和脚本
  • nginx/ - 带 WAF 规则的 Nginx 反向代理配置
  • simulator/ - 攻击模式模拟器
  • logs/ - 应用日志(已 gitignore)

构建单个组件

root@kitploit:~
# 仅重新构建脆弱应用
docker compose build app-vulnerable
docker compose up -d app-vulnerable

# 仅重新构建防御应用
docker compose build app
docker compose up -d app

# 重新构建利用容器
docker compose build exploit

文档

  • EXPLOITATION_GUIDE.md:关于 S2-045 漏洞机制和利用过程的详细指南
  • TECHNICAL_DETAILS.md:实验环境的技术实现细节
  • GLOSSARY.md:本实验环境中使用的安全术语词汇表

教育资源

  • Apache Struts 安全公告
  • CVE-2017-5638 详细信息
  • OWASP 注入防护
  • Metasploit S2-045 模块

⚠️ 重要警告

  1. 脆弱应用:端口 8081 上的应用是故意存在漏洞的。切勿暴露到公共网络。
  2. 可工作的利用程序:本实验环境包含可工作的漏洞利用代码。请仅在隔离环境中使用。
  3. 教育目的:本实验环境仅用于安全教育、研究和授权的渗透测试。
  4. 法律合规:仅在你拥有或已获得明确书面授权进行测试的系统上使用。

免责声明:本实验环境仅用于教育目的。请负责任地使用,并仅在受控环境中操作。

下载工具