User Tools

Site Tools


secure-low-level-programming:capitole:04-memorie-stiva

4. Zone de memorie. Stiva

Discutăm despre zonele de memorie, cu accent pe stivă, zona folosită în cadrul apelurilor de funcții. Stiva este interesantă pentru că aici se găsesc variabilele locale și adresa de retur, ce pot fi folosite pentru a genera atacuri.

Subiecte abordate

  • zone de memorie
  • alocare dinamică
  • stiva

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/04-memorie-stiva-skel.zip
unzip 04-memorie-stiva-skel.zip
cd 04-memorie-stiva-skel/

Afișarea stivei

Accesăm directorul stack-print/ din arhiva de suport.

Urmăriți conținutul fișierului vuln.c și rulați executabilul vuln. Observați valorile afișate în formatul address: value. Identificați variabile locale, adresa de retur, frame pointer-ul.

Transmiteți două argumente funcției g(), recompilați executabilul și rulați-l din nou pentru a observa stiva.

Afișarea stivei cu un buffer

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

Urmăriți conținutul fișierului vuln.c și rulați executabilul vuln. Afișăm stiva folosind indexarea buffer-ului în afara limitelor (array index out of bounds). Identificați variabile locale, adresa de retur, frame pointer-ul.

Suprascrierea valorilor de pe stivă

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

Urmăriți conținutul fișierului vuln.c și rulați executabilul vuln. Obiectivul este să suprascrieți pointer-ul de funcție fn cu adresa funcției g() astfel încât apelul fn() să conducă la apelul funcție g() (nu al funcției idle()).

Pentru a afla adresa funcției g() folosiți utilitarul nm cu argument numele executabilului, adică rulând comanda

nm vuln

Pentru a converti o valoarea din zecimal în hexazecimal și invers puteți folosi consola Python, prin rularea comenzii python, ca mai jos:

student@pr706-pc:~$ python
[...]
Type "help", "copyright", "credits" or "license" for more information.
>>> hex(18282)
'0x476a'
>>> 0xabcdef
11259375

Bonus: Suprascrieți și adresa de retur cu adresa funcției g() ca să o apelați de două ori.

secure-low-level-programming/capitole/04-memorie-stiva.txt · Last modified: 2019/05/15 11:04 by razvan