| title | ret2shellcode tutoriel | |||
|---|---|---|---|---|
| challenge | Formation interne | |||
| difficulty | Easy | |||
| platform | amd64/local | |||
| date | 2024-02-10 | |||
| tags |
|
|||
| author | Ryan Bouchou | |||
| status | in-progress |
Résumé (1-2 lignes)
Ce niveau introduit les notions de frames, de passage d’arguments et de dépassement de tampon afin de préparer l’écriture d’un shellcode puis de détourner saved RIP vers celui-ci.
- Source : tutoriel interne ret2shellcode
- Environnement testé : Arch Linux (amd64)
- Fichiers fournis :
main.c, binaire compilé correspondant
Déterminer l’offset entre buffer et saved RIP, injecter un shellcode et renvoyer l’exécution dessus.
- GDB + GEF — traçage dynamique, suivi des registres et de la mémoire.
- pwntools — génération de payloads, orchestrations multi-phase et automatisation.
- NASM — assemblage de shellcodes personnalisés ou instrumentation précise.
- Python 3 — scripts d'automatisation, tooling auxiliaire, parsing.
- C — code vulnérable, harness minimal, reproductions.
- Autres utilitaires : checksec, file, strings, objdump, angr, etc.
tuto()alloue un buffer de 96 octets rempli d’un motif, puis affiche en détail le contenu de la pile et des registres. 【F:shellcodes/shellcodes-ret2sc-tutorial/main.c†L12-L82】gets(buffer);lit sans borne et permet d’écrasersaved RIPaprès les 96 octets + padding +saved RBP.- La fonction
caller()puismain()fournissent des frames supplémentaires illustrant la pile chaînée.
gdb -q ./bin,b gets,runpermet d’arrêter avant la lecture et de noter&buffer.- Après avoir saisi un motif généré par
pattern create 200,pattern searchdonne l’offset précis jusqu’àsaved RIP. x/20gx $rspconfirme l’agencement affiché dans les messages pédagogiques.
Stratégie envisagée (à finaliser)
- Générer un shellcode 64 bits via
shellcraft.sh()ou l’assembler depuissc.nasmsi besoin. - Construire un payload :
shellcode + padding + adresse_buffer(écrite en little endian) pour rediriger l’exécution. - Ajuster les registres si nécessaire (alignement 16 octets) avant le
ret.
- Travail en cours : la chaîne d’exploitation reste à automatiser.
Absence de contrôle de taille dans gets et pile exécutable (NX désactivé), exposant directement l’adresse de retour.
- Remplacer
getsparfgets. - Activer la protection
-fstack-protectoret NX.
- Valider l’offset obtenu en construisant un prototype de payload (pattern + adresse fictive).
- Rédiger un script
pwntoolsgénérant automatiquement le shellcode et injectant le payload.
pattern create 200,pattern search 0x41414141- Notes de cours : System V AMD64 ABI
- À produire : script d’exploitation et shellcode documenté.