User Tools

Site Tools


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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
secure-low-level-programming:capitole:06-exploatarea-memoriei [2018/12/19 09:04]
razvan
secure-low-level-programming:capitole:06-exploatarea-memoriei [2018/12/21 10:41] (current)
razvan [Rulare de shellcode]
Line 34: Line 34:
 AAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA
  
-student@pr706-pc:​~$$ python -c 'print "​A"​*16 + "​B"​*4'​+student@pr706-pc:​~$ python -c 'print "​A"​*16 + "​B"​*4'​
 AAAAAAAAAAAAAAAABBBB AAAAAAAAAAAAAAAABBBB
  
-student@pr706-pc:​~$$ python -c 'print "​A"​*16 + "​B"​*4 + "​\xaa\xbb"'​+student@pr706-pc:​~$ python -c 'print "​A"​*16 + "​B"​*4 + "​\xaa\xbb"'​
 AAAAAAAAAAAAAAAABBBB AAAAAAAAAAAAAAAABBBB
  
-student@pr706-pc:​~$$ python -c 'print "​A"​*16 + "​B"​*4 + "​\xaa\xbb"'​ | xxd+student@pr706-pc:​~$ python -c 'print "​A"​*16 + "​B"​*4 + "​\xaa\xbb"'​ | xxd
 00000000: 4141 4141 4141 4141 4141 4141 4141 4141  AAAAAAAAAAAAAAAA 00000000: 4141 4141 4141 4141 4141 4141 4141 4141  AAAAAAAAAAAAAAAA
 00000010: 4242 4242 aabb 0a                        BBBB... 00000010: 4242 4242 aabb 0a                        BBBB...
Line 52: Line 52:
 </​note>​ </​note>​
  
 +<note tip>
 +Ca să transmiteți un payload unui program folosiți o linie de comandă de forma:
 +<​code>​
 +student@pr706-pc:​~$ python -c 'print <​TODO_payload>'​ | ./vuln
 +</​code>​
 +</​note>​
 ==== Buffer overflow pe pointer de funcție ==== ==== Buffer overflow pe pointer de funcție ====
  
Line 79: Line 85:
 Accesăm directorul ''​run-shellcode/''​ din arhiva de suport. Accesăm directorul ''​run-shellcode/''​ 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 ''​prog.c''​ și rulați executabilul ''​prog''​. ​Programul vă deschide un shell nou. Ca să ieșiți din acel shell folosiți comanda ''​exit''​ sau combinația de taste ''​Ctrl+d''​. 
 + 
 +Programul folosește variabila ''​shellcode''​ pentru a reține un cod binar care generează un shell (realizează apelul de sistem ''​execve''​) atunci când este executat. 
 + 
 +Pentru a investiga în detaliu shellcode-ul (codul binar) puteți folosi ''​objdump''​ ca mai jos: 
 +<​code>​ 
 +student@pr706-pc:​~$ echo -en '​\x6a\x42\x58\xfe\xc4\x48\x99\x52\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5e\x49\x89\xd0\x49\x89\xd2\x0f\x05'​ > shellcode 
 +student@pr706-pc:​~$ objdump -D -M intel -b binary -m i386:x86-64 shellcode  
 + 
 +shellcode: ​    file format binary 
 + 
 + 
 +Disassembly of section .data: 
 + 
 +0000000000000000 <​.data>:​ 
 +   ​0: ​  6a 42                  push   ​0x42 
 +   ​2: ​  ​58 ​                    ​pop ​   rax 
 +   ​3: ​  fe c4                  inc    ah 
 +   ​5: ​  48 99                  cqo     
 +   ​7: ​  ​52 ​                    ​push ​  rdx 
 +   ​8: ​  48 bf 2f 62 69 6e 2f   ​movabs rdi,​0x68732f2f6e69622f 
 +   ​f: ​  2f 73 68  
 +  12:   ​57 ​                    ​push ​  rdi 
 +  13:   ​54 ​                    ​push ​  rsp 
 +  14:   ​5e ​                    ​pop ​   rsi 
 +  15:   49 89 d0               ​mov ​   r8,rdx 
 +  18:   49 89 d2               ​mov ​   r10,rdx 
 +  1b:   0f 05                  syscall  
 +</​code>​
  
 ==== Injectare de shellcode ==== ==== Injectare de shellcode ====
Line 85: Line 119:
 Accesăm directorul ''​inject-shellcode/''​ din arhiva de suport. Accesăm directorul ''​inject-shellcode/''​ 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''​. Furnizați-i la intrarea standard shellcode-ul pentru a genera un shell. 
 + 
 +Va trebui să mențineți conexiunea activă la standard input pentru ''​vuln''​. Cel mai indicat este să folosiți comanda: 
 +<​code>​ 
 +cat <(echo -e '<​TODO_shellcode>'​) - | ./vuln 
 +</​code>​ 
 + 
 +După ce obțineți un shell nu vă apare prompt, tastați comenzi precum ''​ls''​ sau ''​ps''​. Ca să închideți shell-ul generat folosiți comanda ''​exit''​ sau combinația de taste ''​Ctrl+d''​.
  
 ==== Buffer overflow și injectare de shellcode ==== ==== Buffer overflow și injectare de shellcode ====
Line 91: Line 132:
 Accesăm directorul ''​bo-inject-shellcode/''​ din arhiva de suport. Accesăm directorul ''​bo-inject-shellcode/''​ 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''​. ​Va trebui să injectați un shellcode în variabila ''​shellcode''​ și să generați buffer overflow care să conducă la executarea shellcode-ului. Buffer overflow-ul va suprascrie adresa de retur a funcției ''​do_nasty()''​ cu adresa variabilei ''​shellcode''​. 
 + 
 +<note tip> 
 +Aflați adresa variabilei ''​shellcode''​ folosind comanda ''​nm''​. 
 +</​note>​ 
 + 
 +Modificați template-ul din scriptul ''​exploit''​ pentru obținerea shell-ului și rulați scriptul folosind: 
 +<​code>​ 
 +./exploit | ./vuln 
 +</​code>​
secure-low-level-programming/capitole/06-exploatarea-memoriei.1545203083.txt.gz · Last modified: 2018/12/19 09:04 by razvan