一,漏洞原理
代码执行:在php中的表现是exec()等函数把用户输入的数据不严格过滤就当作了代码来执行 命令执行:php中就是shell_exec等函数把用户输入的数据当作命令执行 本质:其实就是把用户输入的数据,在不进行严格过滤的情况下,当成了命令或者代码来执行。
二,危险函数
system() passthru() exec() shell_exec() popen() proc_open() pcntl_exec()
修复方案
php.ini的disable_functions中禁用相关危险函数
三,靶场
DVWA
1.low(无校验) 简单的输入了127.0.0.1后,提示shell_exec被禁用。 百度发现,要在php.ini配置文件把disable_functions = exec , popen, system 把这个里面的exec去掉,在重启下apache。成功执行  2.medium(过滤&&和;) 看关键代码  但是用&就可以绕过,因为基于黑名单过滤,不严格 3.high 首先看下代码  经过测试,会过滤数组中出现的所有字符。尝试了很久都没有找到banf,最后屈服了去看wp,发现过滤的时候是’| ‘,多了一个空格,接下来就好办了  可以看到没有空格也能执行,看来以后看源码的时候要细心啊! 4.impossble 看下代码  发现他是先以’.'把参数进行分割,然后再分别验证4个参数是否为数字。。应该是真的没法绕了。。
Pikachu
1.exec"eval" 看下核心代码  if语句检查是否传入参数,@eva($_POST[‘txt’])是把txt参数的内容当作php代码执行,@是忽略错误。可以看出无任何过滤,直接执行就行,但是注意txt的内容要符合php的语法payload=phpinfo(); 
|