news 2026/7/6 15:56:05

Rogue Mysql Server源码解析:main函数工作流程与关键处理逻辑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Rogue Mysql Server源码解析:main函数工作流程与关键处理逻辑

Rogue Mysql Server源码解析:main函数工作流程与关键处理逻辑

【免费下载链接】rogue_mysql_serverA rouge mysql server supports reading files from most mysql libraries of multiple programming languages.项目地址: https://gitcode.com/gh_mirrors/ro/rogue_mysql_server

Rogue Mysql Server是一款支持从多种编程语言的mysql库中读取文件的伪装服务器工具。本文将深入解析其main函数的工作流程与核心处理逻辑,帮助开发者理解这款工具的底层实现机制。

一、程序初始化与配置加载

程序启动首先进入main函数,位于项目根目录的main.go文件中。初始化阶段主要完成三项核心任务:日志配置、命令行参数解析和配置文件加载。

日志系统采用logrus框架实现,设置了完整的时间戳格式和标准输出方向:

formatter := new(log.TextFormatter) formatter.FullTimestamp = true formatter.TimestampFormat = "2006-01-02 15:04:05" log.SetFormatter(formatter) log.SetOutput(os.Stdout)

命令行参数解析支持两种模式:

  • -config:指定配置文件路径(默认使用当前目录下的config.yaml)
  • -generate:生成默认配置文件模板到指定路径

配置文件采用YAML格式,定义了服务器核心参数,包括网络设置、文件读取规则、认证配置和JDBC漏洞利用选项等。配置加载失败会直接导致程序退出。

二、数据库对象初始化

配置加载完成后,程序创建DB结构体实例并初始化关键成员:

db := &DB{} db.fileIndex = make(map[uint32]int) db.Handler = db db.config = config db.YsoserialOutput = map[string][]byte{}

如果启用了JDBC漏洞利用功能,程序会预先生成攻击载荷:

if config.JdbcExploit { for index, command := range config.YsoserialCommand { db.YsoserialOutput[index] = CmdExec(command) } }

三、认证服务器配置

根据配置决定使用哪种认证方式:

  • 启用认证时:使用AuthServerStatic创建静态认证服务器,加载用户列表并对密码进行SHA1哈希处理
  • 禁用认证时:使用AuthServerNone允许匿名登录

认证服务器实现位于mysql/auth_server_static.go和mysql/auth_server_none.go文件中,通过接口抽象实现不同认证策略的灵活切换。

四、服务器启动流程

服务器启动的核心函数是mysql.NewListener,该函数位于mysql/server.go文件中,实现如下:

func NewListener(protocol, address string, authServer AuthServer, handler Handler, versionString string, connReadTimeout time.Duration, connWriteTimeout time.Duration) (*Listener, error) { listener, err := net.Listen(protocol, address) if err != nil { return nil, err } return NewFromListener(listener, authServer, handler, versionString, connReadTimeout, connWriteTimeout) }

该函数创建TCP监听器并返回Listener实例,然后调用Accept()方法开始接受客户端连接:

db.listener, err = mysql.NewListener("tcp", fmt.Sprintf("%s:%s", config.Host, config.Port), authServer, db, config.VersionString, 0, 0) db.listener.Accept()

五、连接处理与核心业务逻辑

DB结构体实现了mysql.Handler接口,主要处理三类事件:

1. 新连接建立(NewConnection)

记录客户端连接信息,包括地址、用户名和数据库名,并初始化文件索引计数器。同时检测客户端类型,如果是JDBC客户端则特殊标记。

2. 连接关闭(ConnectionClosed)

清理客户端相关资源,从文件索引映射中删除连接ID。

3. 查询处理(ComQuery)

这是最核心的业务逻辑实现,主要处理两种情况:

  • JDBC漏洞利用:检测特定查询(如"SHOW SESSION STATUS"),返回预生成的攻击载荷
  • 文件读取:根据配置规则确定目标文件路径,调用RequestAndSaveFile方法读取客户端本地文件并保存

文件读取路径的确定逻辑支持两种模式:

  • 从配置文件的FileList按顺序循环读取
  • 从数据库名解析文件路径(需启用FromDatabaseName选项)

六、关键工具函数解析

1. 密码哈希(NativePassword)

实现MySQL原生密码哈希算法,使用SHA1进行两次哈希处理:

func NativePassword(password string) string { hash := sha1.New() hash.Write([]byte(password)) s1 := hash.Sum(nil) hash.Reset() hash.Write(s1) s2 := hash.Sum(nil) return fmt.Sprintf("*%s", strings.ToUpper(hex.EncodeToString(s2))) }

2. 命令执行(CmdExec)

用于执行外部命令生成攻击载荷,支持ysoserial等工具的集成调用。

3. 文件名清理(sanitizeFilename)

过滤文件名中的特殊字符,防止路径遍历攻击,确保文件保存安全。

七、总结

Rogue Mysql Server的main函数通过清晰的模块化设计,实现了配置加载、认证管理、连接处理和核心业务逻辑的完整流程。其架构特点包括:

  • 使用接口抽象(mysql.Handler)实现业务逻辑与网络层解耦
  • 通过配置驱动不同功能模式,提高工具灵活性
  • 针对不同客户端类型实施差异化处理策略
  • 严格的错误处理和日志记录,便于问题排查

核心代码集中在main.go和mysql/server.go文件中,通过深入阅读这些源码,可以全面理解这款工具的工作原理和实现细节。

【免费下载链接】rogue_mysql_serverA rouge mysql server supports reading files from most mysql libraries of multiple programming languages.项目地址: https://gitcode.com/gh_mirrors/ro/rogue_mysql_server

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 15:55:08

django-mongoengine完全指南:如何无缝集成MongoDB与Django框架

django-mongoengine完全指南:如何无缝集成MongoDB与Django框架 【免费下载链接】django-mongoengine django mongoengine integration 项目地址: https://gitcode.com/gh_mirrors/dj/django-mongoengine 想要在Django项目中轻松使用MongoDB数据库吗&#xff…

作者头像 李华
网站建设 2026/7/6 15:54:25

CodexGuide × Obsidian:在知识库中自动生成配图的终极指南

CodexGuide Obsidian:在知识库中自动生成配图的终极指南 【免费下载链接】CodexGuide CodexGuide:面向全球初学者、创作者、开发者与团队的 Codex 实践指南 项目地址: https://gitcode.com/gh_mirrors/co/CodexGuide 想要在Obsidian知识库中轻松…

作者头像 李华
网站建设 2026/7/6 15:53:46

7步搞定Syncthing:跨平台文件同步完整指南

7步搞定Syncthing:跨平台文件同步完整指南 【免费下载链接】syncthing Open Source Continuous File Synchronization 项目地址: https://gitcode.com/GitHub_Trending/sy/syncthing 你是否曾经因为云存储的隐私问题而夜不能寐?或者被多设备间的文…

作者头像 李华
网站建设 2026/7/6 15:52:53

RISC-V处理器验证:你的芯片真的“听话“吗?

RISC-V处理器验证:你的芯片真的"听话"吗? 【免费下载链接】riscv-tests 项目地址: https://gitcode.com/gh_mirrors/ri/riscv-tests 想象一下,你刚刚设计了一款全新的RISC-V处理器,指令流水线优雅流畅&#xff…

作者头像 李华
网站建设 2026/7/6 15:49:55

OpenVoice终极指南:如何用3秒音频实现跨语言语音克隆

OpenVoice终极指南:如何用3秒音频实现跨语言语音克隆 【免费下载链接】OpenVoice Instant voice cloning by MIT and MyShell. Audio foundation model. 项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice OpenVoice是由MIT和MyShell联合开发的革…

作者头像 李华