命令注入
命令注入漏洞可能是应用程序中可能发生的最危险的漏洞之一。当应用程序允许用户输入与系统命令混淆时,就会发生命令注入漏洞或操作系统命令注入漏洞。当用户输入在没有适当预防措施的情况下直接连接到系统命令中时,就会发生这种情况。
磨刀不误砍柴工:
常见符号及用法
;多语句执行符号
|:管道符,不管第一条语句是否成功都执行第二条
||:前面命令执行失败才执行第二条
&:都执行
&&:前面的执行成功才会执行第二条
其他命令可以看一下这个:常见漏洞之命令注入
low级别
进到页面直接开干
输入127.0.0.1 &ipconfig
查看源码就会发现其实一点都没有进行防护,所以用什么语句都可以。
Medium
输入127.0.0.1 && ipconfig发现提示错误。
看一下源码
$substitutions = array(
'&&' => '',
';' => '',
);
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
就替换了&&和;将它们赋值为空。是不是不用这两就可以行得通呢?浅浅试一下
输入:127.0.0.1 & ipcongif
可以,咱就是说。
High
直接上来就给它输入127.0.0.1&& ipconfig
提示错误!
看一下源码
发现需要使用的符号都被替换成了空值了呀!但是有一个小细节,就是管道符后面多出了个小空格,这就有很大的发展空间,可以通过使用1 |ipconfig进行命令注入。但我还是好奇,我不信只有这个可以,我浅浅试一下1 || ipconfig
只能说可以,话说||识别的话识别不出|可以理解,但||识别不出来并替换成空值就不太明白。
Impossible
试了上一个的1|ipconfig发现不行,也试了其他的方法都不行。
只能说impossible还是你impossible,用来学习一下它是怎么防护的吧
上源码
查看代码发现,将我们输入的数据通过“.”进行分割并赋值给数组,通过判定数组数据是否为数字来判断是否执行cmd命令,都是数字再将4个数字进行组合查询。只能说秒啊!