20 lines
1.5 KiB
Markdown

{{#include ../../banners/hacktricks-training.md}}
## Metoda CONNECT
W języku programowania Go powszechną praktyką przy obsłudze żądań HTTP, szczególnie przy użyciu biblioteki `net/http`, jest automatyczna konwersja ścieżki żądania do ustandaryzowanego formatu. Proces ten obejmuje:
- Ścieżki kończące się ukośnikiem (`/`), takie jak `/flag/`, są przekierowywane do ich odpowiednika bez ukośnika, `/flag`.
- Ścieżki zawierające sekwencje przechodzenia do katalogu, takie jak `/../flag`, są upraszczane i przekierowywane do `/flag`.
- Ścieżki z końcową kropką, jak w `/flag/.`, są również przekierowywane do czystej ścieżki `/flag`.
Jednakże, wyjątek obserwuje się przy użyciu metody `CONNECT`. W przeciwieństwie do innych metod HTTP, `CONNECT` nie uruchamia procesu normalizacji ścieżki. To zachowanie otwiera potencjalną drogę do uzyskania dostępu do chronionych zasobów. Używając metody `CONNECT` wraz z opcją `--path-as-is` w `curl`, można obejść standardową normalizację ścieżki i potencjalnie dotrzeć do zastrzeżonych obszarów.
Poniższe polecenie demonstruje, jak wykorzystać to zachowanie:
```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}}