Post

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.

đŸ’» 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 :

  1. construction du conteneur : docker build -t chall-ret2libc-canaris .;
  2. 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/
This post is licensed under CC BY 4.0 by the author.