This shows you the differences between two versions of the page.
secure-low-level-programming:capitole:03-gestiunea-bufferelor [2018/12/16 13:29] 127.0.0.1 external edit |
secure-low-level-programming:capitole:03-gestiunea-bufferelor [2018/12/17 09:11] (current) razvan |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== 3. Gestiunea bufferelor ====== | ====== 3. Gestiunea bufferelor ====== | ||
- | TODO: Descriere scurtă | + | 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 ===== | ===== Subiecte abordate ===== | ||
- | * TODO | + | * definiția unui buffer |
- | * TODO | + | * pointeri și vectori |
+ | * probleme în folosirea bufferelor | ||
===== Resurse ===== | ===== Resurse ===== | ||
Line 12: | Line 13: | ||
* [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/slides/03-gestiunea-bufferelor.pdf|Slide-uri]] | * [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/slides/03-gestiunea-bufferelor.pdf|Slide-uri]] | ||
* [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/03-gestiunea-bufferelor-skel.zip|Arhiva de suport]] | * [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/03-gestiunea-bufferelor-skel.zip|Arhiva de suport]] | ||
- | |||
- | ===== Alte resurse ===== | ||
- | |||
- | * TODO link | ||
- | * TODO link | ||
- | * TODO link | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
Line 26: | Line 21: | ||
</code> | </code> | ||
- | ==== Exercițiu 1 ==== | + | ==== 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 ''lalala/'' din arhiva de suport. | + | Accesăm directorul ''buffer-overwrite/'' din arhiva de suport. |
- | TODO | + | 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!//. |
- | ==== Exercițiu 2 ==== | + | ==== Use-after-free ==== |
- | Accesăm directorul ''lalala/'' din arhiva de suport. | + | Accesăm directorul ''use-after-free/'' din arhiva de suport. |
- | TODO | + | Urmăriți conținutul fișierului ''vuln.cpp'' și rulați executabilul ''vuln''. Ce se întâmplă? Cum poate fi această "problemă" exploatată? |
- | ==== Exercițiu 3 ==== | + | ==== Leak în lanț ==== |
- | Accesăm directorul ''lalala/'' din arhiva de suport. | + | Accesăm directorul ''chained-leak/'' din arhiva de suport. |
- | TODO | + | 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. |