MySQL 蜜罐获取攻击者微信 ID
前言
前些日子有人问到我溯源反制方面的问题,我就想到了 MySQL 任意文件读取这个洞,假设你在内网发现或扫到了一些 MySQL 的弱口令,你会去连吗?
原理
MySQL 中 load data local infile '/etc/passwd' into table test fields terminated by '\n'; 语句可以读取客户端本地文件并插进表中,那么我们可以伪造一个恶意的服务器,向连接服务器的客户端发送读取文件的 payload。这个技术并不新鲜,但是合理利用就能起到一些不错的成果。
利用
抓个包看看连 MySQL 时客户端和服务端通信的两个关键点:
服务端先返回了版本、salt 等信息:

客户端向服务端发送账号密码信息后,服务端返回了认证成功的包:

至此,我们只需等待客户端再发一个包,我们就能发送读取文件的 payload 了,再看看读取文件这个包:

这里 000001 是指数据包的序号,fb 是指包的类型,最后一个框是指要读取的文件名,而最前面的 14 是指文件名的长度(从 fb 开始,16 进制),所以 payload 则是 chr(len(filename) + 1) + "\x00\x00\x01\xFB" + filename
在能够实现任意文件读取的情况下,我们最希望的就是能读到与攻击者相关的信息。日常生活中,大家几乎都会使用微信,而如果攻击者没有做到办公—渗透环境分离的话,我们就有希望获取到攻击者的微信 ID
Windows 下,微信默认的配置文件放在 C:\Users\username\Documents\WeChat Files\中,在里面翻翻能够发现 C:\Users\username\Documents\WeChat Files\All Users\config\config.data 中含有微信 ID:

而获取这个文件还需要一个条件,那就是要知道攻击者的电脑用户名,用户名一般有可能出现在一些日志文件里,我们需要寻找一些比较通用、文件名固定的文件。经过测试,发现一般用过一段时间的电脑在 C:\Windows\PFRO.log 中较大几率能找到用户名。

伪装
攻击者进入内网后常常会进行主机发现和端口扫描,如果扫到 MySQL 了,是有可能进行爆破的,如果蜜罐不能让扫描器识别出是弱口令,那就没啥用了,所以还需要抓下扫描器的包。
这里以超级弱口令检查工具为例,首先在本地起一个正常的 MySQL 服务,wireshark 抓包看看扫描器有哪些请求:

可以看到,这款工具在验证完密码后还发了 5 个查询包,如果结果不对的话,是无法识别出弱口令的,那么我们将服务器的响应数据提取出来,放进程序里,当收到这些请求后,就返回对应的包:

这样就能让扫描器也可以正常识别:

效果
当攻击者发现存在弱口令的时候,大概率会连上去看看,如果使用 navicat 的话,就能读取到文件:

写了个简单的 web 来显示攻击者的微信 ID,扫一扫就能加上 TA

思考
除了获取微信 ID,我们还能获取哪些有价值的东西呢?
chrome 的 login data,虽然无法解密出密码,但是还是可以获取到对方的一些账号的'C:/Users/' + username + '/AppData/Local/Google/Chrome/User Data/Default/Login Data'
chrome 的历史记录'C:/Users/' + username + '/AppData/Local/Google/Chrome/User Data/Default/History'
用户的 NTLM Hash(Bettercap + responder)\\ip\test
详情:https://www.colabug.com/2019/0408/5936906/

……
待解决问题:
同一出口 IP 的不同攻击者的信息如何区分
读取的文件较大时,客户端会分段传输,如何完整获取
前端有点 bug,不管了,能用就行了关于其他可利用的点和以上待解决问题欢迎大家留言讨论,最后,源码我上传到 GitHub 了,有需要的朋友请自取:https://github.com/qigpig/MysqlHoneypot
原文:https://mp.weixin.qq.com/s/m4I_YDn98K_A2yGAhv67Gg
推荐阅读
看完三件事
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
关注公众号 『 Java 斗帝 』,不定期分享原创知识。
同时可以期待后续文章 ing🚀
评论