
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_serverRogue 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),仅供参考