# TP6 - Florian POMPIDOU > Le binaire vuln_esdi a été découvert dans un audit de code. Le client suspecte un buffer overflow dans la fonction de parsing des arguments. Votre mission : confirmer la vulnérabilité, mesurer le décalage jusqu'au registre de retour, et produire un PoC Python qui détourne le flot d'exécution vers une fonction cachée (win()) présente dans le binaire. ## Analyses basiques Formules basiques pour extraire la structure du fichier : ```bash $ sha256sum vuln_esdi 6cf9d82d8d0023add3f211d65169de28264ce845795d6c384ef53da613f3c48c vuln_esdi $ file vuln_esdi vuln_esdi: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=ad96f823633c23654741962598e101b58be3bd09, for GNU/Linux 3.2.0, not stripped $ objdump -f vuln_esdi vuln_esdi: file format elf64-x86-64 architecture: i386:x86-64, flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED start address 0x0000000000401070 $ strings vuln_esdi [...] [+] Congratulations! You've redirected execution to win()! [+] Flag: CTF{b0f_m4st3r} [...] ``` ## Mise en place d'un analyseur profond Python ### Analyse GDB basique ```bash gdb ./vuln_esdi (gdb) info functions All defined functions: Non-debugging symbols: 0x0000000000401000 _init 0x0000000000401030 puts@plt 0x0000000000401040 printf@plt 0x0000000000401050 gets@plt 0x0000000000401060 fflush@plt 0x0000000000401070 _start 0x00000000004010a0 _dl_relocate_static_pie 0x00000000004010b0 deregister_tm_clones 0x00000000004010e0 register_tm_clones 0x0000000000401120 __do_global_dtors_aux 0x0000000000401150 frame_dummy 0x0000000000401156 win 0x000000000040117b vulnerable 0x00000000004011d0 main 0x0000000000401204 _fini (gdb) print win $1 = {} 0x401156 ``` ### Amorce de l'environnement En amorce du projet, déployer un environnement Python cloisonné : ```bash uv init uv run main.py uv run .venv/bin/activate_this.py uv add pwn chmod +x vuln_esdi ``` ### Script importé pour trouver le pattern disruptif ```py from pwn import * pattern = cyclic(200) p = process('./vuln_esdi') print(pattern) print(f"Le PATTERN a une longueur de {len(pattern)} caractères.") p.sendline(pattern) p.wait() ``` Dans GDB : ```bash (gdb) run < <(python3 -c "from pwn import *; print(cyclic(200))") Starting program: /home/kali/TP6/vuln_esdi < <(python3 -c "from pwn import *; print(cyclic(200))") [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/x86_64-linux-gnu/libthread_db.so.1". Welcome to SecureApp v1.0 Enter your name: Hello, b'aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaab'! Program received signal SIGSEGV, Segmentation fault. 0x00000000004011cf in vulnerable () (gdb) !python3 -c "from pwn import *; print(cyclic_find(0x6174616161736161, n=8))" 63272450 ``` ### ABANDON