可疑用户创建
通过命令或者工具查看当前数据库是否创建了可疑用户。
SELECT user, host FROM mysql.user;
类似以下结果
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | localhost |
| user1 | % |
| admin | 192.168.1.100 |
| test | localhost |
| readonly_user | 10.0.0.50 |
+------------------+-----------+
错误日志排查
-
MySQL日志文件存储路径实在MySQL配置文件中指定的(my.cnf或者my.ini)
-
命令行中登录数据库使用以下命令查找关于日志路径的配置信息。
SHOW VARIABLES LIKE 'log_error';
SHOW VARIABLES LIKE 'general_log_file';
SHOW VARIABLES LIKE 'slow_query_log_file';
-
找到错误日志位置,定位日志(大量登录失败、异常查询)(并且不在正常运维期间所触发)
错误登录日志例子
2024-07-08T12:34:56.789123Z 8 [Note] Access denied for user 'user1'@'192.168.1.100' (using password: YES)
2024-07-08T12:34:57.123456Z 8 [Note] Access denied for user 'user2'@'10.0.0.50' (using password: YES)
2024-07-08T12:34:57.987654Z 8 [Note] Access denied for user 'admin'@'localhost' (using password: YES)
2024-07-08T12:34:58.345678Z 8 [Note] Access denied for user 'root'@'172.16.0.10' (using password: YES)
2024-07-08T12:34:59.234567Z 8 [Note] Access denied for user 'test'@'%' (using password: YES)异常慢查询日志例子
# Time: 2024-07-08T12:34:56.789123Z
# User@Host: user1[user1] @ [192.168.1.100]
# Query_time: 5.123456 Lock_time: 0.000789 Rows_sent: 10 Rows_examined: 1000
SET timestamp=1653760496;
SELECT * FROM large_table WHERE column1 = 'value' AND column2 LIKE '%pattern%';
Query_time:查询执行时间。
Lock_time:查询中涉及的锁定时间。
Rows_sent:查询返回的行数。
Rows_examined:实际扫描的行数。
SET timestamp:查询开始执行的时间戳。
SELECT * FROM large_table WHERE column1 = 'value' AND column2 LIKE '%pattern%':具体的查询语句。
一般查询日志例子
2024-07-08T12:34:57.987654Z 8 [Note] User: user2, Query: SELECT * FROM sensitive_table WHERE confidential_info LIKE '%password%';
违规外联排查
查看当前数据库活动情况,看有什么出网连接或者到跳板机
SHOW PROCESSLIST; -- 查看当前正在执行的MySQL进程
隔离断网(如有需要)
直接把MySQL进程干了
windows找到mysql进程结束就行
linux:
sudo service mysql stop # 停止MySQL服务,暂时断开网络连接
计划任务
查看有没有开event_scheduler(事件调度器)
方法一
SELECT @@event_scheduler;
方法二
SHOW VARIABLES LIKE 'event%';
SHOW TRIGGERS; //查看所有计划任务(触发器)
DROP EVENT [IF EXISTS] event_name //删除计划任务(触发器)
二次注入排查思路
-
我们先要知道二次注入是什么(简洁版)
-
输入会被函数过滤不能执行(新建一个admin'#用户 ‘#会被过滤掉)
-
但是输入的东西还是能直接存到数据库里(admin’#用户到数据库里会正常创建)
-
然后利用插入的语句取出来使用时进行注入(要求取出数据时不能转义)
-
过程就是新建一个admin‘#用户>输入时被过滤,存到数据库里还是admin'#>修改密码时取出的还是admin'#,以下例子
修改密码时的语句:
UPDATE users SET PASSWORD='$pass' where username='admin'# and password='$curr_pass'
用户名直接闭合语句,直接修改的是admin账户的密码
还是老熟悉的四件套:日志,进程,用户,计划任务。不过二次注入最主要看的还是新建用户的日志,新建的用户有没有带闭合语句的特殊符号以及修改密码的语句
一键注马工具入侵排查思路
-
这种类型的工具永远离不开高并发,多线程去遍历目录。
-
刚开始所触发的日志都会带有语句闭合的字符(例如:id=1')
-
开始跑之后会根据内置方法字典去一系列增删改查操作(包括不限于联查、盲注、用户名猜解)
-
综合上面来说,排查思路就已经有了
-
大量的同时间的404访问状态码(以及200)
-
同IP高并发请求
-
注入成功之后的大批量后渗透语句(一系列增删改查操作)
-
以上都可以在前面所说的日志排查里能找到。
-
另外,这里也能通过中间件控制日志看到请求的操作以及URL
注
以上大部分命令可增删改查的东西都可以通过可视化工具实现,如:Navicat
原文始发于微信公众号(一己之见安全团队):应急响应篇——数据库排查
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论