DVWA系列---Command Injection命令注入

一、前言

1、命令注入

命令注入漏洞主要是指服务器对来自网络的语句,没有进行严格的过滤,导致在执行合法命令的同时,也执行了一些恶意构造的非法命令,使得服务器被破坏。

通常命令注入是指os命令注入,即通过Shell执行OS命令。

2、命令拼接符

命令注入漏洞的利用,离不开命令拼接符,目前使用的命令拼接符有:& && | || 四个。

a & b: a、b命令互不影响,各自执行
a && b: a 执行成功,才执行 b
a | b: a 的输出作为 b 的输入
a || b: a 执行失败才执行 b

例如:

输入命令:ping -c & chdir,前者为制定参数值,会执行失败,后者查看当前路径。

由于使用 & 拼接,因此两条命令互不影响,后者会执行并打印当前路径为 C:\Users\13714。在这里插入图片描述

当使用命令:ping -c && chdir,只有前者成功才会执行后者,因此后者不会执行。
在这里插入图片描述
下面在DVWA中进行练习。

二、Low级别

提示输入一个 IP 地址
在这里插入图片描述
输入公共DNS服务地址 114.114.114.114
在这里插入图片描述
是单纯的进行 ping 操作,尝试随意输入一句命令 ipconfig
在这里插入图片描述
依然进行ping,因此基本断定无过滤,尝试在 ping 后拼接一条命令 127.0.0.1 & ipconfig
在这里插入图片描述
毫无防护和过滤,得到了ip配置,尝试在服务器主机添加一个用户
在这里插入图片描述
被火绒发现了危险操作,火绒666。

(查看源代码)

在这里插入图片描述

三、Medium级别

尝试命令:114.114.114.114 & ipconfig
在这里插入图片描述
尝试 127.0.0.1 && ipconfig
在这里插入图片描述
尝试 | 符号
在这里插入图片描述
根据尝试,初步判断过滤了 && 和 | 符号,但是没有过滤 &。

(查看源代码)

在这里插入图片描述

四、High级别

& 已经不可用
在这里插入图片描述
自然,| 和 && 也不可用
在这里插入图片描述
尝试 | 拼接符:1 || ipconfig
在这里插入图片描述
构造了一个错误的 IP 地址和 ipconfig 的拼接,成功爆出配置,初步断定依然未对 IP 进行验证过滤,只是增加了拼接符 & 的过滤。

使用 | 依然可以命令注入。

(查看源代码)

在这里插入图片描述

五、Impossible级别

搞不定,直接贴代码了。

(查看源代码)

在这里插入图片描述
不可能级别够强。

六、防御方法

由于命令注入漏洞是由于使用了系统调用的功能,且对接收的命令过滤不当,才导致被非法利用,因此防御措施可有以下几个方面:

  1. 不使用调用系统命令的实现方法,如PHP中的system,exec,shell-exec等
  2. 对传入的参数(命令)进行严格的过滤,防止非法命令的执行
  3. 可对传入参数进行转义,阻止一些非法字符,如&、&&、|、||、;、<>等
  4. 降低应用程序的权限,或是提高服务器的安全防护能力