02.GET 中 URL 参数
以下是一个简化的示例代码,用于说明 GET 请求中的 URL 参数 SSRF 漏洞。该示例代码允许用户提供一个 URL 作为查询参数,然后发起 GET 请求并返回响应。
#
示例代码:{ DefaultQuery: "url=http://www.baidu.com/", Path: "/in-get", Title: "SSRF GET 中 URL 参数", Handler: func(writer http.ResponseWriter, request *http.Request) { ref := request.URL.Query().Get("url") var u = fmt.Sprint(ref) c := utils.NewDefaultHTTPClient() c.Timeout = 5 * time.Second rsp, err := c.Get(u) if err != nil { writer.Write([]byte(err.Error())) return } rawResponse, err := utils.HttpDumpWithBody(rsp, true) if err != nil { writer.Write([]byte(err.Error())) return } writer.Write(rawResponse) }, RiskDetected: true,}
#
攻击示例:如果目标服务器存在 SSRF 漏洞,它将会发起对http://127.0.0.1:8787/ssrf/flag
的 GET 请求。攻击者可以通过这种方式获取敏感信息、绕过防火墙,甚至攻击内部资源。
http://127.0.0.1:8787/ssrf/in-get?url=http://127.0.0.1:8787/ssrf/flag
#
防御措施:要防范这种类型的漏洞,开发者需要对输入的 URL 参数进行严格的验证和过滤,限制访问内部网络资源。
同时,对于发起的网络请求,需要限制请求的目标范围,以及对请求的目标进行白名单控制,避免访问恶意站点。