环境:windows + apache + mysql + php (phpstudy)
由于是在Windows下进行的测试,所以和Linux下的测试会有所不同
在测试漏洞之前先提一下可以同时执行两条命令的特殊字符
Linux:
|
;(Windows下不行)
&&
Windows
|
&(Linux貌似不行,自行测试)
&&
肯定有没写出来的,我就不去秀百度了====
低级:
可以将”|”替换成其他字符,效果会不一样.例如:& &&会执行完第一条命令在去执行后面的.这个”|”在linux中是管道符,我这里就不扯这个了===
看看代码,是如何造成的漏洞:
在第五行,将我们输入的值赋值给了$target这个变量,其次在第8行到第15行都是在判断操作系统,因为linux or unix的ping是无限的,所以要是不加个ping限制,等一辈子也不会有结果返回...
在第10行和14行可以看到通过shell_exec函数执行了命令,接受到的值并没有做任何过滤就执行了,执行的相当于是 ping 127.0.0.1|echo 1你放到命令行下执行一下试试
中级:
你会发现”|”和”&”都可以使用,但是”&&”却不行.(linux下&貌似不可以),瞅一下代码
聪明了一点点,在第八行到第十一行,定义了一个数组,下标分别是;和&&,对,就过滤这两个,而且windows下;不好使(linux下可行)
在14行时,使用了str_replay函数进行了替换,将输入的内容中的;和&&替换成了’’空字符串,可以查一下str_replay函数的用处,这里很是形象的来了一个过滤不严谨=
高级:
估计各位哥也发现了,不管中低高级,反正”|”都能过,没错,就是这样,====
看代码吧:
和中级一样的,只是过滤的字符更多了,& && | || ;...这里就有问题了,为什么过滤了”|”还可以呢?
好吧,在第11行哪里| 这里是不是有一个空格?