命令注入原理在于开发者没有对被当成命令一部分的信息进行过滤和编码,简单地运行执行命令的功能函数,从而造成命令执行。
command injection 1:

显然直接将我们的输入当成命令一部分,直接执行了,这时候通过加上&&的手段执行命令。
构造payload如下所示:

显然经常会进行url编码绕过.
command injection 2:
这道题目源代码如下:

这道题目中明显是用正则表达式对输入进行了匹配,限定只能是点分法的格式,后面不能接其他的,但是我们可以加上换行符绕过,换行符要url编码。%0a,如下:

command injection 3:
先上源代码:

这是一个普遍做法,当程序员无法对输入确认过滤干净时候,就用head函数直接来重定向了,返回的页面是不会包含什么东西的,因此我们看不到什么,但是其实恶意代码还是执行了,因此直接开代理就可以看到很多东西了。如下图:

payload和题目二是一样的。
网友评论