加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_宿迁站长网 (https://www.0527zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

一步一步开启MySQL数据库取证(3)

发布时间:2022-12-09 14:33:34 所属栏目:MsSql教程 来源:网络
导读: 接上……
逆向修改,优化工具功能
先森虽然略懂WEB安全且在这方面小有心得,但在二进制方面基本上两眼一抹黑,“滴水穿石非一日之功”,二进制方面需要扎实的计算机基础和更加完备、体系化

接上……

逆向修改,优化工具功能

先森虽然略懂WEB安全且在这方面小有心得,但在二进制方面基本上两眼一抹黑,“滴水穿石非一日之功”,二进制方面需要扎实的计算机基础和更加完备、体系化的知识。以前虽然简单摸过IDA pro,但是完全是摸石头过河,不能真正上手实战逆向。这些天在家一边学习TP、一边研究汇编和逆向工程,刚好可以借助这个机会更好的了解IDA、洞悉逆向。

将“Seay源代码审计系统.exe”拖入到IDA主界面,程序自动停留在入口处,将Graph视图切换到text,满屏是琐碎、不可读的代码块。才疏学浅,看到这个场景,就好像从中学突然跳级到大学做高等数学,从劝退到直接自闭……

小米拖库 下载_网易邮箱拖库_mssql拖库

硬着头皮看了一圈,发现真的不是给人读的代码……于是想到是不是程序做混淆了或者加壳压缩导致无法逆向,于是找工具查看一下PE信息,发现是C#编写的,那这就容易了,因为C#的程序可以借助专用工具直接逆向改源码。

mssql拖库_小米拖库 下载_网易邮箱拖库

祭出C#逆向大杀器“dnSpy”,将所有与目标相关的程序都丢入进去(注,非.net框架自带且目标程序依赖的组件也要放进去),即可查看代码。

网易邮箱拖库_mssql拖库_小米拖库 下载

翻了两圈没找到“mysql监控”这款子程序,中间走了好多弯路、浪费了好多时间。这里简单把我当时的思路讲一下,当时考虑到这是主进程下面的子进程,那么如果把这个子程序运行起来再从内存里转存出来岂不是就可以得到它的真身了嘛?我认为这个思路本身上是没有问题,毕竟什么动态调试、脱壳和ESP定律都是这么来的,那么这理论上也是可行的了。于是在任务管理器里选择转存内存中该程序的所有数据。

小米拖库 下载_mssql拖库_网易邮箱拖库

用日志查看工具LogViewer来查看内存文件。通过搜索Windows上可执行程序的PE头特征来验证我的想法,确实搜索到几个PE头,但问题也来了,怎么才能完整导出来呢?

网易邮箱拖库_mssql拖库_小米拖库 下载

于是在另一款强大的进程管理工具ProcessHacker里又捣鼓了起来。当我查看到Modules选项时,发现MySQL监控工具其实是以dll形式加载的。

网易邮箱拖库_小米拖库 下载_mssql拖库

重新回到开始的Dnspy里,通过图中可以看到主程序里确实存在一个LoadAllPlugins方法。那现在可以挽起(小编注:此处有修正)袖子大干一场了,接着将MysqlMonitoringPlus.dll拖入到dnspy里查看源代码。

网易邮箱拖库_mssql拖库_小米拖库 下载

简单通读了一下工具的代码,了解到工具的大致运行原理:1.点击“更新”按钮会尝试连接到MySQL并设置general_log的相关环境,接着提取当前时间段的所有SQL记录。2.点击“下断”按钮,将当前时间赋值到局部变量,配合“更新”使用。通过对工具代码的分析,可以看到工具本身不难开发,主要用的顺手加之没太大问题,完全可以通过逆向工程修正。

我们先来到定义button2_Click方法处,“更新”按钮是这款工具的核心。将m_str_sqlstr变量中的SQL语句进行修改,根据前面所知还需要添加execute类型,右击选择“编辑方法”,将此处修改成command_type in ('Query','Execute'),意思是筛选command_type字段中符合这两个类型的所有记录,接着选择“编译”来完成修改mssql拖库,在左上角的“文件”里点击“保存模块”完成写入。

网易邮箱拖库_小米拖库 下载_mssql拖库

我们运行测试一下,发现每次更新操作后,会夹杂好多重复的无用语句,如查看变量、设置环境等,这十分的影响阅读体验及很不方便。

网易邮箱拖库_mssql拖库_小米拖库 下载

其实作者也考虑到了这一点,所以在语句后面追加了一条筛掉杂项语句的条件,但他的语句不完善。因此我们需要继续修改argument,这里借助MySQL的正则函数来定义“黑名单”,修改成argument not REGEXP ('^(set global|SHOW VARIABLES|SET NAMES).*|general_log'),意思是筛掉argument字段中 以设置或查看环境变量开头 且 包含general_log 关键字的所有语句。最终这一行代码就改成了:stringm_str_sqlstr = "select event_time,argument from mysql.general_log where command_type in ('Query','Execute') and argument not REGEXP ('^(set global|SHOW VARIABLES|SET NAMES).*|general_log') and event_time>'" + this.var_datatime + "'";

这时候再测试就发现我们获取的内容不受杂项语句的影响,运行结果如下:

mssql拖库_网易邮箱拖库_小米拖库 下载

这时候想到还有一个问题,工具并不会主动清空general_log表,“冰冻三尺非一日之寒”,长此以往会导致浪费不必要的空间从而影响了MySQL的正常运行。所以我想再增加一个清空并关闭general_log的功能,核心SQL很简单,执行set global general_log=off; 和truncate table mysql.general_log。由于从未接触过C#编程,中间又在网上查阅了相关资料、简单的学习了C#的基本语法。在dnspy的左侧,随便选择一个方法右击“编辑类”,这时候就可以全面修改程序了,首先定义一个button类型的控件。

mssql拖库_小米拖库 下载_网易邮箱拖库

其次实例化这个控件并设置属性。在给这个控件定义一些属性,如布局在窗体上的的位置、大小和其他属性等。

小米拖库 下载_网易邮箱拖库_mssql拖库

接着定义一个方法,它的功能是执行清空general_log表及成功后弹出窗口。

小米拖库 下载_mssql拖库_网易邮箱拖库

最后回到我们定义这个按钮属性的位置,新增一行代码,功能是点击后调用我们定义的buttonReset_Click方法实现清空并关闭general_log。

网易邮箱拖库_mssql拖库_小米拖库 下载

这时候编译并运行修改后的插件,发现我们定义的按钮并未出现。不要担心,这是因为我们没有在窗体里添加这个控件导致的,所以在后面添加控件的底部新增一行。

mssql拖库_网易邮箱拖库_小米拖库 下载

最后运行并测试相关功能,完美、搞定!大家可能会看到程序的右上角按钮出现不和谐的情况,这是因为程序里的参数是按照我的最终修改版,即增加程序说明、优化功能等。

小米拖库 下载_网易邮箱拖库_mssql拖库

目前想要使用或者调试这个工具(准确的说是“插件”),需要先打开”Seay源代码审计系统”然后再选择mysql监控插件,这十分不方便。如果能提取出一个独立版,这最后一个问题就可以迎刃而解了。

在VS2010里新建一个C#工程,注意选择“Windows窗体应用程序”和.Net Framwork的版本为4.0,后面一个环节跟这个版本有重要关系。

mssql拖库_小米拖库 下载_网易邮箱拖库

由于创建的程序是用于引导dll启动的,所以需要放置在 项目文件夹/bin/debug 下,然后添加引用进来。

小米拖库 下载_网易邮箱拖库_mssql拖库

接着在Program.cs里编写调用dll的代码。首先在顶部新建一行using MysqlMonitoringPlus;表示引入使用某个命名空间,类似C++的头文件。最后把主函数main中程序的入口指向我们的F_MysqlMonitoring。

小米拖库 下载_网易邮箱拖库_mssql拖库

其中Form1.cs可以直接删除掉,因为MysqlMonitoringPlus.dll本身就是窗体程序我们不需要再新建一个,只是缺少一个调用入口而已。到目前为止,编译成品还是分离的(即一个引导用途的exe和一个功能dl),运行结果如下。

mssql拖库_网易邮箱拖库_小米拖库 下载

整合dll并编译进exe中。网上搜了不少关于如何将dll编译进exe的文章,也走了不少弯路,这里我找到一个傻瓜式的方案。

1.首先在vs里安装Nuget扩展。这个扩展应该个类似Linux系统上的apt软件包管理器或者是python上的pip工具。安装流程:”工具”-“扩展管理器”,在扩展管理器里搜索并安装“Nuget”,安装完成如下。

mssql拖库_小米拖库 下载_网易邮箱拖库

2.安装Costura.Fody插件。选择”工具”-“NuGet程序包管理器”-“程序包管理器控制台”,打开其控制台,键入” Install-Package Costura.Fody -Version 1.6.2”进行安装,成功安装后引用里多出一个Costura,这就说明安装完成了。(注意,这个插件只支持.net4.0以上。)

mssql拖库_网易邮箱拖库_小米拖库 下载

网易邮箱拖库_小米拖库 下载_mssql拖库

3.最后按之前的编译流程完成整合。这时候来到Release目录发现程序大小发生了变化,将程序拖到另一个虚拟机运行和测试,发现很OK。

小米拖库 下载_网易邮箱拖库_mssql拖库

最后根据自己的需求可以作进一步优化,如添加程序的图标、增添新的功能和加壳压缩体积等,这里就不作过多的介绍了。

这里还有个小插曲,明明在VS里的release版工具运行很完美(见上图),可是我把它放入到备份区测试就丢失了俩功能,是傲娇的Bug还是备胎的反抗?在仔仔细细的编译、删除、再调试的过程里,发现每次只要不在备胎区、这个程序就保证运行没问题,一旦在备胎区运行就容易出问题。正当这次准备将它丢入回收站,忽然想到我备份区还有一个MysqlMonitoringPlus.dll文件,联想到在学习C#的时候看到一篇关于将dll整合进exe的文章,里面就提到了一个思路:将dll嵌入exe后再加入一个检测功能,当exe检测不到程序根目录的dll时就会自动调用资源里的dll。说白了,这就是传说中的dll劫持,于是按照这个原理改了一个带有弹窗功能的dll来验证我的想法,效果如下。

网易邮箱拖库_mssql拖库_小米拖库 下载

总结:

从研究MySQL日志及取证到逆向修改工具用了几天时间,后面查阅资料整理成文章,最终用了一个星期的时间。整个过程学习到了很多,比如MySQL的取证与反取证、C#的开发逆向和二进制对抗(花指令和劫持等);这也更加坚定、明确了自己的学习目标和方向,学海无涯、不断努力,将来尽自己的微薄之力贡献社会。

小米拖库 下载_网易邮箱拖库_mssql拖库

(编辑:云计算网_宿迁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!