DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

时间:2024-03-29 17:17:21

Command Injection

Command Injection,即命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。

PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一,国内著名的Web应用程序Discuz!、DedeCMS等都曾经存在过该类型漏洞。

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

四个安全级别:low、medium、high、disabled、impossible


  • low级别源码分析

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

stristr()函数:搜索字符串在另一字符串中的第一次出现。该函数是二进制安全的,不区分大小写的;

如需进行区分大小写的搜索,使用 strstr() 函数。

下面语法:可通过w3school搜索

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

php_uname(mode) :返回了运行 PHP 的操作系统的描述。(详情见:https://www.php.net/manual/zh/function.php-uname.php

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

服务器通过判断操作系统,执行不同ping命令,但是对ip参数并未做任何的过滤,导致了严重的命令注入漏洞。

漏洞利用

window和linux系统都可以用&&来执行多条命令。

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

&&表示逻辑”与”操作,如果前后两个条件都满足,返回布尔值true;否则返回false。

(详细用法见:https://docs.microsoft.com/en-us/cpp/cpp/logical-and-operator-amp-amp?view=vs-2019

在windows系统下:

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

在Linux系统下:

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

&&:只有当第一个命令执行成功时,才会执行后面的命令。


  • medium源码分析

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

与low级别相比,增加了黑名单机制,将“&&”、“;"  这两种符号过滤掉,但忽略了符号“&”;

而str_replace把”&&” 、”;”替换为空字符,可以想办法进行绕过,因此依旧存在漏洞可以利用。

漏洞利用

  • 使用符号&

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

发现&表示:当第一个命令执行失败时,第二个命令依旧正常执行。

  • 绕过方式

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

”127.0.0.1&;&net user”中的”;”会被替换为空字符,这样就变成了”127.0.0.1&&net user” ,执行成功!


  • high级别源码分析

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

很明显,与medium级别相比,虽然在黑名单中增加了过滤内容,但由于黑名单本身的局限性,依旧存在绕过。

漏洞利用

仔细观察过滤符号,发现“| ”符号后面多了一个空格的位置,因此可以使用“|”符号进行利用。

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

“|”是管道符,表示将expression 1的输出作为expression 2的输入,并且只打印expression 2执行的结果。

(详情见:https://docs.microsoft.com/en-us/cpp/cpp/bitwise-inclusive-or-operator-pipe?view=vs-2019


  • impossible级别源码分析

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

stripslashes(string)

stripslashes()函数:删除字符串string中的反斜杠,返回已剥离反斜杠的字符串。

(详情见:https://www.php.net/manual/zh/function.stripslashes.php

explode(separator,string,limit)

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

(详情见:https://www.w3school.com.cn/php/func_string_explode.asphttps://www.php.net/manual/zh/function.explode.php

is_numeric(string)

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用

(详情见:https://www.w3cschool.cn/php/php-is_numeric.htmlhttps://www.php.net/manual/zh/function.is-numeric.phphttps://www.runoob.com/php/php-is_numeric-function.html

impossible级别代码增加了Anti-CSRF token,同时对参数ip进行了严格的限制,只有如“数字.数字.数字.数字”的输入才会被接收执行,因此不存在命令注入漏洞。