土拨鼠,一款高随机性的Mysql蜜罐
使用java8开发,一次编写,到处撒野
star太少,不想更了,TODO你可以自行添加
我认为蜜罐按功能可以分为三种
1.主要是拖延攻击者攻击时间的.即使用真实环境去搭建,但这个环境是被隔离的
2.主要是反制攻击者的.即重保期间希望获取攻击者的身份信息,从而对攻击者进行溯源反制,不计代价的获取身份信息,意味着容易暴露
3.前两种结合的,两种优缺点平衡
Groundhog只是第二种类型,且由于mysql蜜罐使用的Load data local infile请求,也就是说这个蜜罐通常只有一次攻击方式.(毕竟没有攻击者傻到连接第二次吧?)
所以我们应该探讨的是,如果你只有一次任意文件读取的机会,那如何将这次作用发挥到极致呢
又或者我们不必要使用蜜罐去埋雷等着引爆,我们也可以将mysql蜜罐作为一个信号
对不需要开启mysql端口的内网客户端都布置上mysql蜜罐,如果某一台内网客户端的mysql蜜罐被触发了,意味着内网可能已经失陷.
1.实现随机salt
2.随机ThreadId,且ThreadId增长随机,开启蜜罐后会一直记住ThreadId(单例模式实现)
3.增加Mysql拉黑机制:如果连接错误的次数超过了"max_connect_errors"设置的次数,则该IP地址会被拉黑,直到MySQL服务器重启或者超过"connect_timeout"设置的时间段。
4.增加登录验证识别,不会把任意输入的用户名以及密码当成正确的
5.自动随机mysql版本
6.增加操作日志
7.增加输出不存在文件的提示(从数据包的角度入手)
8.支持动态修改wantReadList.txt
9.从wantReadList.txt中全部顺序读取,然后去利用
10.解析mysql通讯包
11.处理[Malformed Packet: MySQL]:即00 00 00 02
12.对SNETCracker扫描器自动关闭密码验证
13.生成log文件夹,并将之后生成的log文件扔进log文件夹
14.自定义是否开启密码验证
15.绑邮件,一旦上钩发消息给邮件
blockIpList.txt:
记录被mysql蜜罐拉黑的ip,用于模拟真实mysql
correctUserInfo.txt:
预设的账号密码,你可以填入弱口令进去,只有客户端发来的账号密码正确才给连(我已禁止空密码)
wantReadList.txt:
蜜罐想要读取的文件路径,你可以填入路径,会随机选择一个进行读取
mailInfo.txt:
存放mail的用户信息,格式:用户邮箱地址 密码或者授权码 接受者邮箱地址
如果读取文件成功,会生成getData文件夹,并保存在getData文件夹中
LFI文件下是常用的文件读取路径,自己发现具有实际价值的,可用于溯源的路径吧
如果蜜罐日志中记录出现大量的同一ip连接蜜罐,那么这个ip使用了蜜罐扫描器,大概率红队人员.
快速使用:
服务端:
1.打开correctUserInfo.txt,填入预设账号密码,以空格隔开,如root root
2.打开wantReadList.txt,填入想要读取的路径
3.开启Groundhog: java -jar Groundhog.jar
客户端:
Navicat或cmd命令行输入:
.\mysql -h 127.0.0.1 -u root -p --ssl-mode=DISABLED
参数:
-cc 关闭密码验证
-sm 开启邮箱通知
注意:
1.读取到的文件使用二进制文本编辑器打开,如UE编辑器
2.注意Windows和Linux文件路径的分界符,windows是\,Linux是/
1.与蜜罐识别器(检测目标Mysql数据库是不是蜜罐)对抗:
(只是未连接前的对抗,因为mysql蜜罐的特殊性,连上只要输入命令就暴露了,所以只有一次攻击机会)
-
不能直接利用,能扫出来是mysql,但需要使用cmd/Navicat连接才能利用:
-
kscan1.85
-
Ladon911
-
Yasso
-
fscan
等一众端口扫描器,只扫端口不爆破
-
-
可以直接利用,扫描器只要扫描了就中招:
- SNETCracker1.0 (需要关闭蜜罐的密码验证,否则不成功)
-
爆破端口,但依旧无法利用
- PortBruteWin
- 支持大文件传输
- 设置connect_timeout
- 修复mysql 2013错误
GitHub - BeichenDream/WhetherMysqlSham: 检测目标Mysql数据库是不是蜜罐
从一道CTF题目看Gopher攻击MySql - FreeBuf网络安全行业门户