{{#include ../../banners/hacktricks-training.md}} ## CONNECT 方法 在 Go 编程语言中,处理 HTTP 请求时,特别是使用 `net/http` 库时,一个常见的做法是将请求路径自动转换为标准格式。这个过程包括: - 以斜杠 (`/`) 结尾的路径,如 `/flag/` 被重定向到其无斜杠的对应路径 `/flag`。 - 包含目录遍历序列的路径,如 `/../flag` 被简化并重定向到 `/flag`。 - 以句点结尾的路径,如 `/flag/.` 也被重定向到干净的路径 `/flag`。 然而,使用 `CONNECT` 方法时观察到一个例外。与其他 HTTP 方法不同,`CONNECT` 不会触发路径规范化过程。这种行为为访问受保护资源打开了潜在的途径。通过在 `curl` 中使用 `CONNECT` 方法和 `--path-as-is` 选项,可以绕过标准路径规范化,并可能到达受限区域。 以下命令演示了如何利用这种行为: ```bash curl --path-as-is -X CONNECT http://gofs.web.jctf.pro/../flag ``` [https://github.com/golang/go/blob/9bb97ea047890e900dae04202a231685492c4b18/src/net/http/server.go\#L2354-L2364](https://github.com/golang/go/blob/9bb97ea047890e900dae04202a231685492c4b18/src/net/http/server.go#L2354-L2364) {{#include ../../banners/hacktricks-training.md}}