2009/02/25

"Sysinfos" is powned .

Au lendemain de l'article sur les .bss overflow posté par mon ami HyP sur son blog , j'ai eu envie de voir comment bypasser l'authentification de son "Sysinfos" mais avec une approche différente .

Bon , aprés coup je me suis vite rendu compte que ce serait trés classique voir presque triste , je le reconnait mais 24h aprés la publication de son article , ça me tenter donc ...

Code de Sysinfos.c ici

Premiere étape comme souvent , on désassemble a la recherche d'une ou plusieurs intructions intéréssantes ( ici avec objdump) de cette maniere :

objdump -d Sysinfos

et...bingo !

Aprés avoir parcouru les lignes ,on se rend vite compte de la simplicité de la chose lorsqu'on tombe sur un JNE (Jump if Not Egal ) intéréssant.

...........................................
...........................................>

8048410: 55 push ebp
8048411: 89 e5 mov esp,ebp
8048413: 53 push ebx
8048414: 83 ec 04 sub 0x4,esp
8048417: 80 3d bc 98 04 08 00 cmpb 0x0,0x80498bc
804841e: 75 40 jne 8048460 <__do_global_dtors_aux+0x50>
;saut au destructeur si valeur inégale

<..........................................
..........................................


Reste plus qu'a l'éditer a l'aider d'un éditeur hexadécimal pour en modifier la valeur sachant que l'on doit remplacer la valeur 75 par 74 .

Nous avons jne = 75
Nous allons faire en sorte d'obtenir je = 74

Editons donc a l'aide (par exemple ) de Ghex .

Ghex2 Sysinfos

On va rechercher la valeur hexa 75 40 et hop , y'a plus qu'a modifier , enregistrer, faire un chmod +x Sysinfos et lancer le prog pour vérifier.


[root@localhost kmkz]# ./Sysinfos2 i
Vérification de votre mot de passe..
'+) Authentification réussie...
U'r root!

sh 3.0 #


Et voila , le Sysinfos est encore une fois bypasser et ce d'une façon des plus élémentaire mais c'était " just for fun " ;-) .

2 commentaires:

HyP a dit…

Que dire ... simple est efficace

### HYP ###

shp a dit…

débordement sur pointeurs de fonctions ça défonce :p. Après faut dire qu'on en voit pas tous les jours des pointeurs de fonctions, ils ont peu d'utilité mis à part dans un programme qui contient des menus du genre "1. faire ça 2. faire ci 3. faire cela". Reste à ce que les fonctions renvoient le même type de valeur et aient les mêmes arguments. Mais un pointeur de fonction SANS ARGUMENT c'est vraiment inutile vu que le nombre de ligne est équivalent à sans.