mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
20 lines
1.5 KiB
Markdown
20 lines
1.5 KiB
Markdown
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## CONNECT 방법
|
|
|
|
Go 프로그래밍 언어에서 HTTP 요청을 처리할 때, 특히 `net/http` 라이브러리를 사용할 때, 요청 경로를 표준화된 형식으로 자동 변환하는 것이 일반적인 관행입니다. 이 과정은 다음을 포함합니다:
|
|
|
|
- `/`로 끝나는 경로(`flag/`)는 슬래시가 없는 대응 경로인 `/flag`로 리디렉션됩니다.
|
|
- `/../flag`와 같은 디렉토리 탐색 시퀀스를 포함하는 경로는 단순화되어 `/flag`로 리디렉션됩니다.
|
|
- `/flag/.`와 같이 후행 마침표가 있는 경로도 깨끗한 경로인 `/flag`로 리디렉션됩니다.
|
|
|
|
그러나 `CONNECT` 방법을 사용할 때 예외가 관찰됩니다. 다른 HTTP 방법과 달리, `CONNECT`는 경로 정규화 프로세스를 트리거하지 않습니다. 이 동작은 보호된 리소스에 접근할 수 있는 잠재적인 경로를 열어줍니다. `curl`에서 `--path-as-is` 옵션과 함께 `CONNECT` 방법을 사용하면 표준 경로 정규화를 우회하고 제한된 영역에 도달할 수 있습니다.
|
|
|
|
다음 명령은 이 동작을 악용하는 방법을 보여줍니다:
|
|
```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}}
|