This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
secure-low-level-programming:capitole:05-siruri [2018/12/18 09:06] razvan |
secure-low-level-programming:capitole:05-siruri [2018/12/19 11:07] (current) razvan [Suprascriere (overflow)] |
||
---|---|---|---|
Line 15: | Line 15: | ||
* [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/05-siruri-skel.zip|Arhiva de suport]] | * [[http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/05-siruri-skel.zip|Arhiva de suport]] | ||
- | ===== Alte resurse ===== | ||
- | * TODO link | ||
- | * TODO link | ||
- | * TODO link | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
Line 53: | Line 49: | ||
Accesăm directorul ''leak/'' din arhiva de suport. | 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? | + | 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? |
<note tip> | <note tip> | ||
Line 66: | Line 62: | ||
Accesăm directorul ''overflow/'' din arhiva de suport. | Accesăm directorul ''overflow/'' din arhiva de suport. | ||
- | Urmăriți conținutul fișierului ''vuln.c'' și rulați executabilul ''vuln''. | + | Urmăriți conținutul fișierului ''vuln.c'' și rulați executabilul ''vuln''. Folosiți-vă de buffer overflow-ul existent în program ca să afișați mesajul //You've got it. Congratulations!//. Trebuie să suprascrieți șirul/buffer-ul ''msg'' cu mesajul corespunzător. |
+ | |||
+ | <note tip> | ||
+ | Ca să vedeți unde sunt plasate variabilele locale și bufferele și să aflați diferența între ele (//offset//-ul), dezasamblați executabilul și aflați adresa bufferului și a variabilei (sunt de forma ''rbp-<numar>''): | ||
+ | <code> | ||
+ | student@pr706-pc:~$ objdump -d -M intel vuln | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | Ca să afișați un șir mai complex folosiți Python ca mai jos: | ||
+ | <code> | ||
+ | student@pr706-pc:~$ python -c 'print "A"*16' | ||
+ | AAAAAAAAAAAAAAAA | ||
+ | |||
+ | student@pr706-pc:~$$ python -c 'print "A"*16 + "B"*4' | ||
+ | AAAAAAAAAAAAAAAABBBB | ||
+ | |||
+ | student@pr706-pc:~$$ python -c 'print "A"*16 + "B"*4 + "\xaa\xbb"' | ||
+ | AAAAAAAAAAAAAAAABBBB | ||
+ | |||
+ | student@pr706-pc:~$$ python -c 'print "A"*16 + "B"*4 + "\xaa\xbb"' | xxd | ||
+ | 00000000: 4141 4141 4141 4141 4141 4141 4141 4141 AAAAAAAAAAAAAAAA | ||
+ | 00000010: 4242 4242 aabb 0a BBBB... | ||
+ | </code> | ||
==== Caracteristici printf ==== | ==== Caracteristici printf ==== | ||
Line 72: | Line 91: | ||
Accesăm directorul ''printf-features/'' din arhiva de suport. | Accesăm directorul ''printf-features/'' din arhiva de suport. | ||
- | Urmăriți conținutul fișierului ''vuln.c'' și rulați executabilul ''vuln''. | + | Urmăriți conținutul fișierului ''printf_features.c'', folosiți comanda ''make'' pentru a compila și apoi rulați executabilul ''print_features''. Vedeți pentru fiecare mesaj ce se întâmplă și de ce se întâmplă. |
==== Atacuri de șir de formatare ==== | ==== Atacuri de șir de formatare ==== | ||
Line 78: | Line 97: | ||
Accesăm directorul ''format-string-attack/'' din arhiva de suport. | Accesăm directorul ''format-string-attack/'' din arhiva de suport. | ||
- | Urmăriți conținutul fișierului ''vuln.c'' și rulați executabilul ''vuln''. | + | Urmăriți conținutul fișierului ''vuln.c'' și rulați executabilul ''vuln''. Folosiți scriptul ''exploit'' pentru a exploata programul ''vuln'' în forma: |
+ | <code> | ||
+ | ./exploit | ./vuln | ||
+ | </code> | ||
+ | |||
+ | <note important> | ||
+ | Este posibil ca pe o configurație a sistemului să nu funcționeze scriptul ''exploit'' adică să nu suprascrie variabila ''v'' cu valoarea ''100'' ci cu altă valoare. Actualizați scriptul pentru a funcționa corespunzător. | ||
+ | </note> |