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

Command Injection

  • Command Injection,即命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。
  • PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一,国内著名的Web应用程序Discuz!、DedeCMS等都曾经存在过该类型漏洞。

命令执行产生原因
命令执行漏洞是指应用有时需要调用一些执行系统命令的函数如: system()、exec()、 shell exec()、eval()、 passthru0,代码未对用户可控参数做过滤,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。

分类

  • 代码层过滤不严:商业应用的一些核心代码封装在二进制文件中,在Web应用中通过 system函数来调用:system("/bin/program --arg Sarg")
  • 系统的漏洞造成命令注入:bash破壳漏洞(CVE-20146271)
  • 调用的第三方组件存在代码执行漏洞Word Press中用来处理图片的 mageMagick组件,JAVA中的命令执行漏洞( struts/Elasticsearch Groovy等);ThinkPHP命令执行;

利用条件

  • 应用调用执行命令的函数
  • 将用户输入作为系统命令的参数拼接到命令中
  • 没有对用户输入过滤或者过滤不严格

​​​​​​​常见连接符

  • A;B       先执行A,再执行B
  • A&B      简单拼接,AB之间无制约关系
  • A|B        显示B的执行结果
  • A&&B    A执行成功,然后才会执行B
  • A||B       A执行失败,然后才会执行B

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第1张图片

目录

low级别源码分析

medium级别源码分析

high级别源码分析

impossible级别源码分析


  • low级别源码分析

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第2张图片

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

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

下面语法:可通过w3school搜索

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第3张图片DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第4张图片

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

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第5张图片

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

漏洞利用

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

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

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

在windows系统下:

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第6张图片

在Linux系统下:

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第7张图片

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


  • medium级别源码分析

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第8张图片

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

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

漏洞利用

  • 使用符号&

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第9张图片

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

  • 绕过方式

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第10张图片

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


  • high级别源码分析

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第11张图片

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

漏洞利用

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

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第12张图片

“|”是管道符,表示将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(命令注入)源码分析及漏洞利用_第13张图片

stripslashes(string)

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

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

explode(separator,string,limit)

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第14张图片DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第15张图片

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

is_numeric(string)

DVWA系列之Command Injection(命令注入)源码分析及漏洞利用_第16张图片

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

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

你可能感兴趣的:(渗透学习,dvwa之命令注入源码分析,dvwa之命令注入漏洞利用,DVWA系列之Command,Injection)