Php命令执行的小tips
首先看一下源码
最近,看到一个cms的源码,大概让我简化成上面的这个样子。大家看一下如何执行命令?
首先exec是执行系统命令的函数,我想到的是创建一个文件,echo 123 >> f:\2344.txt
123>>f:\23444.txt
看到执行的结果创建文件内容为0字节,证明文件创建成功,能执行代码。但是为什么这里创建的文件是0?
构造url,最终的是这样使用exec(c:\phpsstecho 123>>f:\\23444.txt)
很明显这里的c:\php sst根本不是系统命名,但是为什么会创建成功。
使用系统命令来试一下我们exec的内容,大家可以看到, windows 系统好像是指识别自己能够识别的指令。好,我们来测试一下,w>>f:\7777.txt ,即使前面的是错误的东西但是windows会把>>当做自己的命令执行,前面的东西是错误,刚好只会创建一个0字节的文件。
接下来就是看看windows命令执行的连接符号
& 例如a&b,就是不管a是否执行成功,b就会紧接着执行,也就是说或的关系a|b都执行。
&& 例如a&&b,就是前面执失败就不会执行后面的
|| 例如a||b,当a执行失败时,才会执行b
下面我们来构造一下,当然就会选择||或者&,首先看一下||,创建文成功,并且写入成功。
?AA=|| echo 123 >> f:\8888.txt,创建文件并写入成功
接下来告诉大家一个小tips,在Windows命令中使用^< ^>来输出<>。
||%20echo%20^%3C?php%20phpinfo()?^%3E%20%3E%3Ef:\ phpstudy \www\12222.php
输出PHPinfo,已利用成功。