This is an old revision of the document!
Una dintre cele mai importante structuri în limbajele de programare (și printre cele mai cauzatoare de dureri de cap) o reprezintă șirurile. Discutăm despre reprezentarea șirurilor, despre particularități ale lucrurilor cu șiruri, probleme frecvente și moduri de exploatare.
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/05-siruri-skel.zip unzip 05-siruri-skel.zip cd 05-siruri-skel
Accesăm directorul charsize/
din arhiva de suport.
Urmăriți conținutul fișierului prog.c
și rulați executabilele prog
și prog32
. Urmăriți dimensiunea tipurilor de date corespunzătoare unui caracter.
Accesăm directorul eof/
din arhiva de suport.
Urmăriți conținutul fișierului vuln.c
și rulați executabilul vuln
. Programul nu funcționează corespunzător, se oprește la citirea primelor 3 caractere din fișierul data
. Rezolvați problema.
data
rulați comanda
xxd data 00000000: 616e 61ff 6172 65ff 6d65 7265 0a ana.are.mere.
Accesăm directorul leak/
din arhiva de suport.
Urmăriți conținutul fișierului vuln.c
și rulați executabilul vuln
. Ambele funcții din fișierul sursă (do_nasty1()
do_nasty2()
) generează leak de informație. De ce se întâmplă asta? Ce informație este leaked în fiecare caz?
./vuln | xxd
Accesăm directorul overflow/
din arhiva de suport.
Urmăriți conținutul fișierului vuln.c
și rulați executabilul vuln
.
Accesăm directorul printf-features/
din arhiva de suport.
Urmăriți conținutul fișierului vuln.c
și rulați executabilul vuln
.
Accesăm directorul format-string-attack/
din arhiva de suport.
Urmăriți conținutul fișierului vuln.c
și rulați executabilul vuln
.