命令注入漏洞主要是指服务器对来自网络的语句,没有进行严格的过滤,导致在执行合法命令的同时,也执行了一些恶意构造的非法命令,使得服务器被破坏。
通常命令注入是指os命令注入,即通过Shell执行OS命令。
命令注入漏洞的利用,离不开命令拼接符,目前使用的命令拼接符有:& && | ||
四个。
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中进行练习。
提示输入一个 IP 地址
输入公共DNS服务地址 114.114.114.114
是单纯的进行 ping 操作,尝试随意输入一句命令 ipconfig
依然进行ping,因此基本断定无过滤,尝试在 ping 后拼接一条命令 127.0.0.1 & ipconfig
毫无防护和过滤,得到了ip配置,尝试在服务器主机添加一个用户
被火绒发现了危险操作,火绒666。
尝试命令:114.114.114.114 & ipconfig
尝试 127.0.0.1 && ipconfig
尝试 | 符号
根据尝试,初步判断过滤了 && 和 | 符号,但是没有过滤 &。
& 已经不可用
自然,| 和 && 也不可用
尝试 | 拼接符:1 || ipconfig
构造了一个错误的 IP 地址和 ipconfig 的拼接,成功爆出配置,初步断定依然未对 IP 进行验证过滤,只是增加了拼接符 & 的过滤。
使用 | 依然可以命令注入。
搞不定,直接贴代码了。
不可能级别够强。
由于命令注入漏洞是由于使用了系统调用的功能,且对接收的命令过滤不当,才导致被非法利用,因此防御措施可有以下几个方面: