应急响应篇——数据库排查

admin 2024年7月9日10:35:27评论5 views字数 2519阅读8分23秒阅读模式

可疑用户创建

通过命令或者工具查看当前数据库是否创建了可疑用户。

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 //删除计划任务(触发器)

二次注入排查思路

  • 我们先要知道二次注入是什么(简洁版)

    1. 输入会被函数过滤不能执行(新建一个admin'#用户  ‘#会被过滤掉)

    2. 但是输入的东西还是能直接存到数据库里(admin’#用户到数据库里会正常创建)

    3. 然后利用插入的语句取出来使用时进行注入(要求取出数据时不能转义)

    4. 过程就是新建一个admin‘#用户>输入时被过滤,存到数据库里还是admin'#>修改密码时取出的还是admin'#,以下例子

      修改密码时的语句:
      UPDATE users SET PASSWORD='$pass' where username='admin'# and password='$curr_pass'

      用户名直接闭合语句,直接修改的是admin账户的密码

还是老熟悉的四件套:日志,进程,用户,计划任务。不过二次注入最主要看的还是新建用户的日志,新建的用户有没有带闭合语句的特殊符号以及修改密码的语句

一键注马工具入侵排查思路

  • 这种类型的工具永远离不开高并发,多线程去遍历目录。

  • 刚开始所触发的日志都会带有语句闭合的字符(例如:id=1')

  • 开始跑之后会根据内置方法字典去一系列增删改查操作(包括不限于联查、盲注、用户名猜解)

  • 综合上面来说,排查思路就已经有了

    1. 大量的同时间的404访问状态码(以及200)

    2. 同IP高并发请求

    3. 注入成功之后的大批量后渗透语句(一系列增删改查操作)

  • 以上都可以在前面所说的日志排查里能找到。

  • 另外,这里也能通过中间件控制日志看到请求的操作以及URL

以上大部分命令可增删改查的东西都可以通过可视化工具实现,如:Navicat

原文始发于微信公众号(一己之见安全团队):应急响应篇——数据库排查

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月9日10:35:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   应急响应篇——数据库排查http://cn-sec.com/archives/2934535.html

发表评论

匿名网友 填写信息