Table of Contents

3. Gestiunea bufferelor

Vom vorbi despre zone de memorie continue în spațiul de adrese al procesului (bufferele). Vom discuta despre moduri de adresare a memoriei, dimensiuni ale bufferelor, modul în care putem trece de limitele unui buffer.

Subiecte abordate

Resurse

Exerciții

Arhiva de suport pentru exerciții se găsește aici. Descărcați arhiva și apoi decomprimați-o folosind comenzile:

wget http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/03-gestiunea-bufferelor-skel.zip
unzip 03-gestiunea-bufferelor-skel.zip

Pointeri și vectori

Accesăm directorul pointers-and-arrays/ din arhiva de suport.

Urmăriți conținutul fișierului prog.c și rulați executabilul prog. Observați toate operațiile cu pointeri. De ce sunt comentate cele trei linii din funcția work_lhs()? Ce se întâmplă dacă le decomentați?

Leak din buffer

Accesăm directorul buffer-leak/ din arhiva de suport.

Urmăriți conținutul fișierului vuln.cpp și rulați executabilul vuln. Obțineți leak din memorie folosind un index dorit. La ce pot fi utile informațiile afișate? Afișați parola.

Overwrite din buffer

Accesăm directorul buffer-overwrite/ din arhiva de suport.

Urmăriți conținutul fișierului vuln.cpp și rulați executabilul vuln. Folosiți un atac de tipul array index out of bounds ca să suprascrieți variabila v cu valoarea 87654321 și să afișați mesajul You've got it. Congratulations!.

Use-after-free

Accesăm directorul use-after-free/ din arhiva de suport.

Urmăriți conținutul fișierului vuln.cpp și rulați executabilul vuln. Ce se întâmplă? Cum poate fi această “problemă” exploatată?

Leak în lanț

Accesăm directorul chained-leak/ din arhiva de suport.

Urmăriți conținutul fișierului vuln.cpp și rulați executabilul vuln. Obțineți leak din memorie ca să accesați parola.