---layout: posttitle: "Timisoaradate: 20 Avril 2018comments: truecategories: wuauteur: françois---``` ===== INFOS ===== Filename                 letssortFile format              ELF64Architecture             x86-64Endianess                little endianEntry point              0xa40Loadables segments       2Sections                 27
NX bit                   enabledSSP                      enabledRelro                    partialRPATH                    no rpathRUNPATH                  no runpathPIE                      enabled```
Il y a tout d'abord un gros travail de reverse dans ce programme.* Il prend une chaine de caractère s=[c1,.....,cn] e longueur n* Il fait une association
ci <-> di = [c(i+1).....c(n)c(1)...c(i-1)]
* Il trie les di, qui donne d(i1),d(i2),...,d(in) associé à un ordre c(i1)...c(in)* Il est donc relativement facile d'obtenir un classement final voulu aux premières lettres près.
La chaine 
"}a Al Bl Cy D  EL FO GV HE I  Js Ko LR Mt Ni On Pg Q  RA SL Tg Uo VR Wi Xt Yh ZM [s \! ]I ^  _R `e a\x00}}}}}}}}}}}}}}}}}}}}}...." 
permet d'obtenir en sortie
"DIQ^ally LOVE soRting ALgoRithMs!I Re\R    H     ]  ES Z  ..."
On peut enfin noter que si on envoit une chaine terminée par 0, ce 0 n'est pasmis dans le buffer et le tri ne sefait que sur les lettres du début.Ainsi pour avoir GLOP, il suffit d'envoyer
"PPPP\x00" puis "OOO\x00" puis "LL\x00" puis "G\x00"
J'ai préféré envoyer la chaine ce dessus puis compléter les 4 premiers caractèrespar cette dernière méthode.
Bon, donc on peut sortir du programme par cette méthode.
Un buffer overflow est possible de manière assez grossière (on envoit une chaine, puis \x00 et une suite qui écrase la pile à partir du 1024ième caractère)mais un canari existe. Cependant ce canari est facile à retrouver, une fuite a lieupour des chaines envoyées de longueur >= 1023.
On procède donc de la façon suivante:
1) Envoi de "a\x00bbbbbbbb[........]bbbbbb" qui permet d'avoir une fuite d'où ontire le canari et l'adresse de la libc.
2) Envoi de 
"}a Al Bl Cy D  EL FO GV HE I  Js Ko LR Mt Ni On Pg Q  RA SL Tg Uo VR Wi Xt Yh ZM [s \! ]I ^  _R `e a\x00}}}}}}}}}}}}}}}}[...]"+payload 
où le payload est un simple rop réalisant un appel de system avec /bin/sh commeargument.
3) Envoi de 4 chaines permettant d'obtenir "I Really LOVE soRting ALgoRithMs!"
4) Enjoy du shell
