4ra1n/mysql-fake-server

GitHub: 4ra1n/mysql-fake-server

纯 Java 实现的 MySQL 伪造服务端,用于在 JDBC URL 可控时验证客户端文件读取和反序列化漏洞。

Stars: 835 | Forks: 96

# MySQL Fake Server ![](https://img.shields.io/badge/build-passing-brightgreen) ![](https://img.shields.io/badge/build-Java%208-orange) ![](https://img.shields.io/github/downloads/4ra1n/mysql-fake-server/total) ![](https://img.shields.io/github/v/release/4ra1n/mysql-fake-server) [English Version](doc/README.md) ## 0x00 介绍 该项目是 [MySQL_Fake_Server](https://github.com/fnmsd/MySQL_Fake_Server) 高级版 当`JDBC URL`可控时,特殊的`MySQL`服务端可以读取`JDBC`客户端任意文件或执行反序列化操作 完全使用`Java`实现部分`MySQL`协议,内置常见`ysoserial`链,一键启动,自动生成可用的`payload`用于测试 参考 [MySQL_Fake_Server](https://github.com/fnmsd/MySQL_Fake_Server) 项目,`payload`从`user`参数传递。反序列化应以`deser_` 开头,规则为`deser_[gadget]_[cmd]`;文件读取以`fileread_`开头,规则为`fileread_[name]` 由于某些文件名或命令存在特殊字符,支持使用`base64`传递方式,方式为原有`user`基础上进行`base64`并以`base64` 开头,例如`user=deser_CB_calc.exe`等于`user=base64ZGVzZXJfQ0JfY2FsYy5leGU=` 默认文件保存在当前目录的`fake-server-files`下的当前时间戳目录内(自动创建目录) 注意:读文件功能遇到没有没有完整读取的情况,重新尝试即可完整读取 自从 `0.0.3` 版本以后支持了自定义反序列化 `gadget` 功能 ![](https://static.pigsec.cn/wp-content/uploads/repos/cas/a2/a21305ad613f2db8c37c4c7162354c339d5c5c8cabf50fe43822efbf4ad712e7.png) 自从 `0.0.4` 版本以后支持了 `PostgreSQL RCE` ![](https://static.pigsec.cn/wp-content/uploads/repos/cas/11/11a6394339c19e755a27b519be17de67322166c664871cd9f12445c5211caf62.png) 自从 `0.0.4` 版本以后支持了 `Apache Derby` 基于 `Slave` 的 RCE ![](https://static.pigsec.cn/wp-content/uploads/repos/cas/c0/c0794212e32129b1ef0a94877b78c60be2324840cd9ae64fbafbe34f7e7034ae.png) ## 0x01 GUI 使用`GUI`版本一键启动,启动后可以根据自己的环境输入参数,生成`payload` 启动:`java -jar fake-mysql-gui.jar` ![](https://static.pigsec.cn/wp-content/uploads/repos/cas/d5/d53b13b1652a3bd7551128df8d3e19edbff7a557f6b939363102c097076a0501.png) ## 0x02 CLI 当你的环境不允许使用`GUI`版时,可以使用命令行版启动,同样可以使用`GUI`辅助生成`payload` 启动:`java -jar fake-mysql-cli.jar -p [port]` ![](https://static.pigsec.cn/wp-content/uploads/repos/cas/69/693db29562d10aadee91c6eacae2591718d4f5868b7c6a680a75563f5b9b76ac.png) ## 0x03 Docker 构建:`docker build -t fake-mysql-server .` 启动:`docker run -p 3306:3306 -d fake-mysql-server` ![](https://static.pigsec.cn/wp-content/uploads/repos/cas/b7/b736fa8b0100e2ec6f45364e059ade0b8c2a0a133a47d1db7ac109c21a00e507.png) ## 0x05 其他 怎样测试: String url = "jdbc:mysql://..."; try { Class.forName("com.mysql.jdbc.Driver"); // Class.forName("com.mysql.cj.jdbc.Driver"); DriverManager.getConnection(url); } catch (Exception e) { e.printStackTrace(); } ## 0x06 免责申明 本项目仅面向安全研究与学习,禁止任何非法用途 如您在使用本项目的过程中存在任何非法行为,您需自行承担相应后果 除非您已充分阅读、完全理解并接受本协议,否则,请您不要使用本项目 ## 0x07 致谢与参考 - https://github.com/frohoff/ysoserial - https://github.com/fnmsd/MySQL_Fake_Server - https://pyn3rd.github.io/2022/06/06/Make-JDBC-Attacks-Brillian-Again-I/
标签:JDBC, JS文件枚举, XXE攻击, 反序列化, 域名枚举, 测试用例, 请求拦截