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) + "x00x00x01xFB" + filename
在能够实现任意文件读取的情况下,我们最希望的就是能读到与攻击者相关的信息。日常生活中,大家几乎都会使用微信,而如果攻击者没有做到办公—渗透环境分离的话,我们就有希望获取到攻击者的微信ID
Windows下,微信默认的配置文件放在C:UsersusernameDocumentsWeChat Files
中,在里面翻翻能够发现 C:UsersusernameDocumentsWeChat FilesAll Usersconfigconfig.data
中含有微信ID:
而获取这个文件还需要一个条件,那就是要知道攻击者的电脑用户名,用户名一般有可能出现在一些日志文件里,我们需要寻找一些比较通用、文件名固定的文件。经过测试,发现一般用过一段时间的电脑在 C:WindowsPFRO.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)
\iptest
详情:https://www.colabug.com/2019/0408/5936906/
- ……
待解决问题:
- 同一出口IP的不同攻击者的信息如何区分
- 读取的文件较大时,客户端会分段传输,如何完整获取
-
前端有点bug,不管了,能用就行了关于其他可利用的点和以上待解决问题欢迎大家留言讨论,最后,源码我上传到GitHub了,有需要的朋友请自取: https://github.com/qigpig/MysqlHoneypot
参考链接
[1] https://www.colabug.com/2019/0408/5936906/
[2] https://github.com/ev0A/Mysqlist
- 绘图: Python matplotlib简介
- 绘图: matplotlib Basemap简介
- GridView实战二:使用ObjectDataSource数据源控件(自定义缓存机制实现Sort)
- 把孩子打造成为码农
- 分享基于Qt5开发的一款故障波形模拟软件
- 剑指OFFER之打印1到最大的N位数(九度OJ1515)
- GridView实战二:使用ObjectDataSource数据源控件
- javascript实例:逐条记录停顿的走马灯
- Python标准库05 存储对象 (pickle包,cPickle包)
- macOS平台下虚拟摄像头的研发总结
- 网页优化系列三:使用压缩后置viewstate
- 网页优化系列三:使用压缩后置viewstate
- macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号
- 微信小程序的大动作
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- Flask-Login文档翻译
- jsp作业——简单的试卷和自动打分
- ESP8266烧入nodemcu简易教程
- 搭建简易的物联网服务端和客户端-STM32(一)
- 搭建简易的物联网服务端和客户端-Nodejs_net(二)
- 搭建简易的物联网服务端和客户端-Nodejs_mysql(三)
- 搭建简易的物联网服务端和客户端-net+mysql(四)
- 搭建简易的物联网服务端和客户端-Nodejs_express服务(六)
- TF中Placement的最后一道防线——Placer
- 搭建简易的物联网服务端和客户端-ECharts数据显示(七)
- 搭建简易的物联网服务端和客户端-整合(八)
- 搭建简易的物联网服务端和客户端-Maibu显示(九)
- 搭建简易的物联网服务端和客户端-DCloud手机端(十)
- 整理了一份 Docker系统知识,从安装到熟练操作看这篇就够
- 搭建简易的物联网服务端和客户端-第一次增补(十一)