mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
20 lines
1.2 KiB
Markdown
20 lines
1.2 KiB
Markdown
{{#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}}
|