图片是孙笑川?
无所谓了,可以发现页面隔几秒刷新一次,页面会打印当前时间
(还有一个date函数的警告,但在无所谓了)
抓个包:
post传参
一共传了两个函数func和p
由于前面有func报错,可以猜到这里func是函数,p是参数
估计用的是call_user_func(func,p)
测试,确实是
这里说一下call_user_func()这个函数
这个函数接收多个参数call_user_func(a,b,c...)
其中a是被调用的函数(自定义函数也可),而b是a的参数
但是call_user_func这个函数不是所有都能调用的,
一些语言结构不能调用,例如:,echo(),empty(),eval(),exit(),isset(),list(),print(),unset()之类的
尝试传入 func=system p=ls
提示hacker,被拦截,估计有黑名单
这里传入file_get_contents(index.php)
<?php $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"); function gettime($func, $p) { $result = call_user_func($func, $p); $a= gettype($result); if ($a == "string") { return $result; } else {return "";} } 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); } } } $func = $_REQUEST["func"]; $p = $_REQUEST["p"]; if ($func != null) { $func = strtolower($func); if (!in_array($func,$disable_fun)) { echo gettime($func, $p); }else { die("Hacker..."); } } ?>
简单的代码审计,黑名单过滤了一大堆函数
看代码,发现有个Test类没使用
看类里面有个析构函数,调用了call_user_func函数
很明显这里是反序列化
序列化代码
这里多看看,或者find都能找到flag