Partie 13 - đ Challenge - exploiter un binaire avec ret2libc et canaris
đ Challenge : exploiter un binaire avec ret2libc et canaris
A ce stade, nous avons vu ensemble pas mal de protections et de mĂ©thodes dâexploitation concernant les buffer overflow sur la pile. Ce serait dommage dâoublier les principales informations retenues faute de pratique.
Le but de ce challenge, en termes de pĂ©dagogie, est de consolider vos acquis sur ce qui a Ă©tĂ© vu jusquâĂ prĂ©sent mais aussi de mieux vous familiariser avec pwntools. Ăgalement, le code source de ce challenge ne sera pas disponible, il va falloir entamer une premiĂšre Ă©tape de rĂ©tro-ingĂ©nierie afin de comprendre ce quâil fait et oĂč rĂ©side la ou les vulnĂ©rabilitĂ©s.
- âŹïž TĂ©lĂ©chargement : chall-ret2libc-canaris.zip
- đ SHA256 & Analyse Virus Total : 0dfecc08800539226b687db4871b0662deb677ef8c8e5113199b34c9c1b8108f
- đŻ Objectif : afficher le contenu de
flag.txten devenantroot
đ» Contexte dâexĂ©cution
Afin de se placer dans le contexte dâexĂ©cution prĂ©vu pour ce challenge, il est nĂ©cessaire de :
- dĂ©sactiver lâASLR ;
- exploiter le programme en tant quâutilisateur
challenger.
Un conteneur Docker est fourni afin que vous puissiez avoir un environnement de travail correct et cohérent avec le challenge indépendamment de votre distribution.
đ« Lancer le challenge
Ci-dessous les commandes permettant de lancer le challenge :
- construction du conteneur :
docker build -t chall-ret2libc-canaris .; - lancement du conteneur et du challenge :
1
docker run -it --rm -p 1234:1234 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined chall-ret2libc-canaris
Le port 1234 est ouvert afin de pouvoir déboguer à distance le programme avec gdbserver depuis la machine hÎte. Vous pouvez résoudre le challenge directement dans le conteneur Docker.
đ€ Quelques conseils
Voici quelques pistes de rĂ©flexion lorsque lâon est face Ă un challenge de pwn :
- Cherchez les protections en place pour dĂ©terminer quelles techniques dâexploitation seront utilisables et lesquelles ne le sont pas.
- Débroussaillez le code désassemblé afin de savoir ce que représente chaque variable.
- Quelles vulnĂ©rabilitĂ©s sont prĂ©sentes ? Que permet chacune dâelles ? Est-il possible de combiner lâexploitation de plusieurs de ces vulnĂ©rabilitĂ©s pour rĂ©ussir Ă exploiter le programme ?
- Quelles sont les principales étapes intermédiaires avant de réussir à ouvrir un shell ?
- NâhĂ©sitez pas Ă utiliser
recvuntil()afin dâĂ©viter dâavoir un exploit qui fonctionne une fois sur deux. Cela permet Ă©galement dâĂ©viter de remplir votre script dâappels Ăsleep().
Ces conseils ne sont pas des vĂ©ritĂ©s absolues. Ce nâest pas parce que vous avez une approche diffĂ©rente quâelle nâest pas valide ou intĂ©ressante.
đĄ Indices
Voici quelques indices qui devraient vous permettre dâavancer lorsque vous ĂȘtes bloquĂ©s et que vous ne voyez pas comment aller plus loin.
đĄ Indice n°1
1
TGUgcHJvZ3JhbW1lIHNlbWJsZSB1dGlsaXNlciB1bmUgc3RydWN0dXJlLiBOZSBzZXJhaXQtY2UgcGFzIHBsdXMgc2ltcGxlIGRlIGxhIHLDqWltcGzDqW1lbnRlciBkYW5zIGxlIGTDqWNvbXBpbGF0ZXVyIGFmaW4gZCd5IHZvaXIgcGx1cyBjbGFpciA/CgpFc3NheWV6IGRlIGNvbXByZW5kcmUgY2UgcXVlIGZhaXQgY2hhY3VuZSBkZXMgNCBhY3Rpb25zIGR1IHByb2dyYW1tZS4=
đĄ Indice n°2
1
UG91cnF1b2kgZGlmZsOpcmVudGVzIGZvbmN0aW9ucyBzb250IHV0aWxpc8OpZXMgcG91ciByw6ljdXDDqXJlciBsJ2VudHLDqWUgZGUgbCd1dGlsaXNhdGV1ciA/IFF1ZWxsZXMgc29udCBsZXVycyBkaWZmw6lyZW5jZXMgPw==
đĄ Indice n°3
1
WSBhLXQtaWwgdW4gc291Y2kgYXZlYyBsYSBib3VjbGUgcXVpIHLDqWN1cMOocmUgbGEgZGVzY3JpcHRpb24gPw==
đĄ Indice n°4
1
TGUgY2hvaXggbsKwMyBwZXJtZXQgZCdhZmZpY2hlciBsZXMgZG9ubsOpZXMgZCd1biB1dGlsaXNhdGV1ci4gRXN0LWlsIHBvc3NpYmxlIGRlIGZhaXJlIGZ1aXRlciBsZSBjYW5hcmkgZW4gdXRpbGlzYW50IGFzdHVjaWV1c2VtZW50IGNlIGNob2l4ID8=
đĄ Indice n°5
1
VW5lIGZvaXMgbGUgY2FuYXJpIHLDqWN1cMOpcsOpLCBpbCBlc3QgcG9zc2libGUgZCdleHBsb2l0ZXIgbGUgcHJvZ3JhbW1lIHZpYSB1biByZXQybGliYy4gRW5jb3JlIGZhdXQtaWwgZm9yY2VyIGxhIGZvbmN0aW9uICJtYWluIiDDoCBmaW5pciBzb24gZXjDqWN1dGlvbiAuLi4KCk/DuSBlc3QtaWwgcG9zc2libGUgZGUgc3RvY2tlciBmYWNpbGVtZW50IGxlcyBhcmd1bWVudHMgZGUgbGEgZm9uY3Rpb24gw6AgYXBwZWxlciA/