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

16 lines
1.3 KiB
Markdown
Raw Normal View History

2023-06-06 18:56:34 +00:00
## Método CONNECT
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
Em golang, a biblioteca net/http geralmente transforma o caminho em um caminho canônico antes de acessá-lo:
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
* /flag/ -- É respondido com um redirecionamento para /flag
* /../flag --- É respondido com um redirecionamento para /flag
* /flag/. -- É respondido com um redirecionamento para /flag
2021-02-01 09:01:16 +00:00
2023-06-06 18:56:34 +00:00
No entanto, quando o método CONNECT é usado, isso não acontece. Portanto, se você precisar acessar algum recurso protegido, pode abusar desse truque:
2021-02-01 09:01:16 +00:00
```text
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)
2023-06-06 18:56:34 +00:00
A função `readRequest` é responsável por ler e analisar as requisições HTTP recebidas pelo servidor. Ela é chamada pelo servidor HTTP sempre que uma nova requisição é recebida. A função lê o cabeçalho da requisição e, em seguida, analisa o método HTTP, o caminho do recurso e a versão do protocolo. Se a requisição contiver um corpo, a função também lê e armazena o corpo da requisição. A função retorna um objeto `http.Request` que contém todas as informações da requisição.