前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Gin获取访客IP的绕过(之前通杀某SRC,获得多个高危)

Gin获取访客IP的绕过(之前通杀某SRC,获得多个高危)

作者头像
OneTS安全团队
发布2025-02-07 16:27:30
发布2025-02-07 16:27:30
5100
代码可运行
举报
文章被收录于专栏:OneTS安全团队
运行总次数:0
代码可运行

声明

本文属于OneTS安全团队成员98的原创文章,转载请声明出处!本文章仅用于学习交流使用,因利用此文信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,OneTS安全团队及文章作者不为此承担任何责任。

Gin框架是什么

Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。

如何开始

Gin 需要Go版本1.21或更高版本。

通过使用Gomodules时(https://go.dev/wiki/Modules#how-to-use-modules)

例如:go [build|run|test],会自动安装必要的依赖项

import "github.com/gin-gonic/gin"或go get -u github.com/gin-gonic/gin

如下为一个简单的样例:

代码语言:javascript
代码运行次数:0
复制
package main

import (
  "net/http"

  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  r.GET("/ping", func(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
      "message": "pong",
    })
  })
  r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

ClientIP绕过

通常在Gin中,我们使用类似如下的函数

代码语言:javascript
代码运行次数:0
复制
 func xx(c *gin.Context){ ip := c.ClientIP() }

这里不禁思考是否存在绕过

尝试发起如下请求进行爆破

结果为X-Forwarded-ForX-Real-IP能够绕过

跟进源码

代码位于:

github.com\gin-gonic\gin@v1.10.0\context.go

c.ClientIP()大概逻辑是:检测c.engine.TrustedPlatform是否为可信任地址且不为空,如果是则返回该地址;检测c.engine.AppEngine是否为True,且X-Appengine-Remote-Addr头不为空;检查远程 IP 是否是受信任的代理,这里仅检测XFF和X-Real-IP两个头(看跟进结果)。

github.com\gin-gonic\gin@v1.10.0\gin.go

绕过之后

绕过之后能做什么?不管是路由爆破还是访问原本访问不了的站点都能进行更进一步的测试,之前就遇到了绕过之后翻JS获取到jwt密钥,通过构造认证参数进入后台从而RCE,这里就不进一步展开讲了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OneTS安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档