jeudi 6 janvier 2011

NDH Steganographie Epreuve 3

J'ai décidé pendant mon temps libre de m'attaquer aux challenges publics de la nuit du hack 2010 qui a eu lieu le 19 Juin 2010. Comme ces challenges se déroulent sur une nuit, ils sont relativement rapides à faire et je dois dire très bien faits. Je félicite donc les concepteurs de ces challenges, car ils sont très intéressants sans être trop prise de tête. L'épreuve 3 de steganographie illustre parfaitement mon post sur le padding BMP. On ressort donc mon petit programme python que l'on peut trouver dans ce post et on l'exécute sur notre image.
time0ut# ./bmp.py space.bmp
Taille padding : 842
Padding non nul !
Ca ne fait pas de doute, ça sent l'information cachée dans le padding à plein nez ! Le problème c'est qu'en stéganographie il peut être facile de savoir si oui ou non une information est cachée dans le support, par contre savoir extraire cette information est d'une toute autre difficulté.

On va commencer doucement et simplement afficher le contenu de ce padding, avec un peu de chance on trouvera quelque chose de connu. Pour cela, je m'appuie sur la classe BMP codée dans mon post sur le padding.
...
img = BMP(sys.argv[1]);
print "".join(bmp.padding());
Et on execute le programme !
time0ut# ./ep3.py space.bmp
bGUgaGFzaCBlc3QgOiA2Njk3NmI1ZDNiYWNjNzQwOWNkODNiNGIzMTM5NDcxYw==
Hum, ça sent bon. On voit clairement que c'est de la base64, l'extraction de l'information ne sera donc pas difficile ! On modifie le programme.
...
img = BMP(sys.argv[1]);
print base64.b64decode("".join(bmp.padding()));
Et on conclut !
time0ut# ./ep3.py space.bmp
le hash est : 66976b5d3bacc7409cd83b4b3139471c
Voilà résolution terminée !

2 commentaires:

  1. Bonjour
    Bon j'essai de reproduire le tuto mais je rencontre pas mal de difficultés.

    1- Pour la première étape nickel / sauf que je tape python bmp.py space.bmp (je suis dans mon home)
    time0ut# ./bmp.py space.bmp
    Taille padding : 842
    Padding non nul !

    2- Pour la seconde je pige pas (afficher le contenu de ce padding )
    ...
    img = BMP(sys.argv[1]);
    print "".join(bmp.padding());

    time0ut# ./ep3.py space.bmp
    bGUgaGFzaCBlc3QgOiA2Njk3NmI1ZDNiYWNjNzQwOWNkODNiNGIzMTM5NDcxYw==

    Avez-vous créer un autre script ou l'avez vous modifier avec les lignes ci-dessus et renommer [ep3.py(je supose épreuve 3)]
    Après pour la base 64 je peut toujours allé sur décode mais franchement j'aimerais trop arrivé à visualiser le contenu du pading.

    Merci par avance de vos réponses

    N'Hésitez pas à détailler je suis un Newbe...

    Merci par avance

    Blackline

    RépondreSupprimer
  2. Bonjour,

    Il te faut la classe développée dans mon post sur le padding. Soit tu fais quelque chose de propre : tu écris cette classe dans un fichier bmp.py et ensuite tu l'inclus via un import dans ep3.py. Soit tu fais un truc crade, tu fais un copier coller de la classe et tu ajoutes ensuite

    img = BMP(sys.argv[1]);
    print "".join(bmp.padding());

    à la suite.

    Cela va afficher le padding. Tu vois que c'est de la base64, donc tu changes ton code pour décoder cette base64.

    RépondreSupprimer