User Tools

Site Tools


secure-low-level-programming:capitole:06-exploatarea-memoriei

This is an old revision of the document!


6. Exploatarea memoriei

Folosirea necorespunzătoare a șirurilor, întregilor și a altor tipuri de date și funcționalități poate lăsa atacatorului posibilitatea de citire și suprascriere de informații critice din memorie. Exploatarea memoriei este unul dintre modurile în care un atacator urmărește accesul la sistem și controlul acestuia.

Subiecte abordate

  • fluxul de control al programului
  • pointeri de cod
  • redirectarea execuției
  • injecția de cod

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/06-exploatarea-memoriei-skel.zip
unzip 06-exploatarea-memoriei-skel.zip
cd 06-exploatarea-memoriei-skel/

Buffer overflow pe variabilă locală

Accesăm directorul bo-local-variable/ din arhiva de suport.

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!.

Ca să afișați un șir mai complex folosiți Python ca mai jos:

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...

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>):

student@pr706-pc:~$ objdump -d -M intel vuln

Buffer overflow pe pointer de funcție

Accesăm directorul bo-function-pointer/ din arhiva de suport.

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 variabila locală de tip pointer de funcție f cu adresa funcției hidden() în locul funcției public().

Ca să aflați adresa unei funcții a unui program executabil, rulați comanda nm pe acel executabil:

student@pr706-pc:~$ nm vuln

Buffer overflow pe adresă de retur

Accesăm directorul bo-return-address/ din arhiva de suport.

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! prin apelarea funcției hidden. Va trebui să suprascrieți adresa de retur a funcției do_nasty() cu adresa funcției hidden().

Adresa de retur a unei funcții se găsește la adresa rbp+8.

Rulare de shellcode

Accesăm directorul run-shellcode/ din arhiva de suport.

Urmăriți conținutul fișierului vuln.c și rulați executabilul vuln.

Injectare de shellcode

Accesăm directorul inject-shellcode/ din arhiva de suport.

Urmăriți conținutul fișierului vuln.c și rulați executabilul vuln.

Buffer overflow și injectare de shellcode

Accesăm directorul bo-inject-shellcode/ din arhiva de suport.

Urmăriți conținutul fișierului vuln.c și rulați executabilul vuln.

secure-low-level-programming/capitole/06-exploatarea-memoriei.1545203083.txt.gz · Last modified: 2018/12/19 09:04 by razvan