hacktricks/network-services-pentesting/pentesting-web/golang.md

48 lines
3.6 KiB
Markdown

{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## 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)
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
</details>
{% endhint %}