Mysql蜜罐:攻击者信息拿来吧你
本文仅作学习记录,如有侵权,请联系删除!!!
前言:
遥想去年7月,一个意外的电话打过来,对话内容大致如下:
不愿意透露姓名的安全从业者:请问你是这个手机号的机主xxx吗?
机主xxx:大叔你谁啊。你怎么知道我的手机号和姓名
不愿意透露姓名的安全从业者:你今年4月份某日下午是不是攻击了某省政府机构
机主xxx:我不是,我没有,你胡说
不愿意透露姓名的安全从业者:你再仔细想想,你踩蜜罐了,最好老实交代,后面可以争取宽大处理
机主xxx:哦豁完蛋
当然最后解释清楚了,大家相安无事,人生第一次踩蜜罐真是恐怖如斯。假设你在内网发现或扫到了一些MySQL的弱口令,你会去连吗?
Mysql任意文件读取:
mysql蜜罐通过搭建一个简单的mysql服务,如果攻击者对目标客户进行3306端口爆破,并且用navicat等工具连接蜜罐服务器,就可能被防守方读取本地文件,包括微信配置文件和谷歌历史记录等等,这样很容易被防守方溯源。
mysql中有一个load data local infile函数能够读取本地文件到mysql数据库中。
LOAD DATA INFILE
语句用于高速地从一个文本文件中读取行,并写入一个表中。文件名称必须为一个文字字符串。LOAD DATA INFILE
是 SELECT ... INTO OUTFILE
的相对语句。把表的数据备份到文件使用SELECT ... INTO OUTFILE
,从备份文件恢复表数据,使用 LOAD DATA INFILE
这个功能默认是关闭的,查看是否开启:
show global variables like 'local_infile';
set global local_infile=1; # 开启
尝试读取本地的C盘目录下的win.ini文件:
load data local infile 'c:/windows/win.ini' into table test1 fields terminated by '\n';
流量分析:
- 第一个Greeting包返回了服务端的版本等信息:
- 第二个包为客户端发起登录请求:
- 第三个包,客户端发送了请求:
SET NAMES utf8mb4
补充说明:从MySQL 5.5开始,可以支持4个字节UTF编码(utf8mb4 ),一个字符能够支持更多的字符集,也能够支持更多表情符号。utf8mb4兼容utf8,且比utf8能表示更多的字符。
- 连接建立之后客户端向服务端发起查询请求:
接下来服务端回复一个Response TABULAR,指定要查询的文件:
这里000001是指数据包的序号,fb是指包的类型,最后一个框是指要读取的文件名,而最前面的13是指文件名的长度(从fb开始,16进制),所以payload为:chr(len(filename) + 1) + "\x00\x00\x01\xFB" + filename
最后客户端向服务器发送文件内容:
从上面过程可以看出,在客户端向服务端发起查询后,服务端会返回一个Response TABULAR的响应包。而如果在这个数据包中指定文件路径,就可以读取客户端相应的文件。而服务端可以在回复任何客户端的请求时返回Response TABULAR响应包,这样就可以在客户端登录成功后,发送Response TABULAR响应包,读取客户端的相关信息。
利用方法:
当攻击者用爆破mysql密码的扫描器扫描到我们的mysql并连接上的时候,客户端(攻击者)会自动发起一个查询,我们(服务端)会给与一个回应,我们在回应的数据包中加入load data local infile读取攻击者的本地文件到我们数据库中,达到反制的目的。
在能够实现任意文件读取的情况下,我们的目的是尽可能获取攻击者的个人信息。在Windows中,Windows下,微信默认的配置文件放在:C:\Users\username\Documents\WeChat Files\All Users\config\config.data
中含有微信ID及网络名称:
而获取该文件还需要知道电脑用户名,一般用过一段时间的电脑在 C:\Windows\PFRO.log
中较大几率能找到用户名。
获取了微信ID可以添加好友,参考代码:
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_u3mntwd4glaq22'
qr_id = 'weixin://contacts/profile/' + wxid
make_qr(qr_id,'demo.jpg')
运行代码生成了对方二维码,扫码可以添加对方好友,由于最近wxid规则改版,所以扫码添加会提示当前页面无法显示。这时可以通过读取.从C:/Users/用户名/Documents/WeChat Files/wx_id/config/AccInfo.dat
,获取微信号、绑定的手机号、邮箱等信息。
Github上已经有大佬写好了相关利用代码,项目地址:https://github.com/qigpig/MysqlHoneypot
但由于只能获取微信id以及生成的二维码,将相关代码进行补充,实现效果如下:
除了通过读取微信配置文件,还可以去读取Chrome的账号、历史记录等
C:/Users/' + username + '/AppData/Local/Google/Chrome/User Data/Default/Login Data
C:/Users/' + username + '/AppData/Local/Google/Chrome/User Data/Default/History