hacktricks/network-services-pentesting/pentesting-web/golang.md
2023-06-03 13:10:46 +00:00

3 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Méthode CONNECT

En golang, la bibliothèque net/http transforme généralement le chemin en un chemin canonique avant d'y accéder :

  • /flag/ -- Est répondu avec une redirection vers /flag
  • /../flag --- Est répondu avec une redirection vers /flag
  • /flag/. -- Est répondu avec une redirection vers /flag

Cependant, lorsque la méthode CONNECT est utilisée, cela ne se produit pas. Ainsi, si vous devez accéder à une ressource protégée, vous pouvez exploiter cette astuce :

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

La fonction readRequest est utilisée pour lire une requête HTTP à partir d'une connexion. Cette fonction est appelée par la fonction readRequestHeader qui lit la première ligne de la requête HTTP et la stocke dans la variable req.Method, req.URL, req.Proto et req.ProtoMajor. Ensuite, la fonction readRequest est appelée pour lire le corps de la requête HTTP et le stocker dans la variable req.Body. Si la requête HTTP contient un corps, la fonction readRequest utilise la fonction io.LimitReader pour limiter la taille du corps de la requête à la valeur spécifiée dans la variable maxBytesReader.