Command Injection
"Command Injection"(命令注入),其目标是通过一个应用程序在主机操作系统上执行任意命令。当一个应用程序将用户提供的数据(如表单、cookies、HTTP头等)传递给系统shell时,就可能发生命令注入攻击。在这种攻击中,攻击者提供的操作系统命令通常会以该应用程序的权限执行。命令注入攻击主要是由于输入验证不足造成的。
Low
这里提示我们输入IP地址,我们输入本机的环回地址,如下图所显示的结果和在系统终端中使用ping命令的结果一致。
下面看一下源代码 ,这段代码存在一个问题,直接将用户提供的输入(即$target)传递给shell_exec函数。如果用户提供的输入包含恶意命令,那么这些命令将被执行。exec是一个在Unix和Linux中常用的系统函数,用于在同一进程中运行一个命令。
因为并没有对用户的输入进行验证和清理,所以 在系统函数exec的ping 操作 的同时,我们可以利用该系统命令,在执行ping的同时执行其他命令
下面先介绍window中几个常见的命令连接符,
; 分号操作符,可以运行几个命令,按顺序执行
&& 与操作符 ,如果第一个命令执行成功,才会执行第二个命令
|| 或操作符 ,第一个命令执行失败,执行第二个命令
还是因为未对用户的输入进行任何限制和验证,所以上面的连接符都可一试,
如下图,使用&&进行注入成功
Medium
先看源码,相较于low,medium会移除在黑名单中的字符'&&' 和 ';' 故,使用这两个字符以外的连接符即可。
使用 & 进行注入成功
High
high相较于medium没有什么新意,只是在黑名单中加入了更多的字符包含了’&', ‘;’, '| ', ‘-’, ‘$’, ‘(’, ‘)’, ‘`’, ‘||’,'| '细看第三个 | 后面有空格,这点可以利用
如下图,注入成功