最近,看到一个cms的源码,大概让我简化成上面的这个样子。大家看一下如何实行命令?
首先exec是实行系统命令的函数,我想到的是创建一个文件,echo 123 >> f:44.txt
http://localhost/myexec.php?AA=echo 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命令中利用^< ^>来输出<>。
http://localhost/myexec.php?AA=||%20echo%20^%3C?php%20phpinfo()?^%3E%20%3E%3Ef:\phpstudy\www\12222.php
输出PHPinfo,已利用成功。