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 10:37]
razvan [Injectare de shellcode]
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 ''​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''​.+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. 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.
Line 86: Line 92:
 <​code>​ <​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:​~$ 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 shellcode ​+student@pr706-pc:​~$ objdump -D -M intel -b binary -m i386:​x86-64 ​shellcode ​
  
 shellcode: ​    file format binary shellcode: ​    file format binary
Line 93: Line 99:
 Disassembly of section .data: Disassembly of section .data:
  
-00000000 <​.data>:​+0000000000000000 <​.data>:​
    ​0: ​  6a 42                  push   0x42    ​0: ​  6a 42                  push   0x42
-   ​2: ​  ​58 ​                    ​pop ​   ​eax+   ​2: ​  ​58 ​                    ​pop ​   ​rax
    ​3: ​  fe c4                  inc    ah    ​3: ​  fe c4                  inc    ah
-   ​5: ​  ​48 ​                    dec    eax +   ​5: ​  48 99                  ​cqo ​    
-   ​6: ​  99                     cdq     +   ​7: ​  ​52 ​                    ​push ​  rdx 
-   ​7: ​  ​52 ​                    ​push ​  edx +   ​8: ​  48 bf 2f 62 69 6e 2f   ​movabs rdi,0x68732f2f6e69622f 
-   ​8: ​  ​48 ​                    dec    eax +   ​f: ​  2f 73 68  
-   ​9: ​  bf 2f 62 69 6e         mov    edi,0x6e69622f +  12:   ​57 ​                    ​push ​  rdi 
-   ​e: ​  ​2f ​                    ​das ​   ​ +  13:   ​54 ​                    ​push ​  rsp 
-   ​f: ​  ​2f ​                    das     +  14:   ​5e ​                    ​pop ​   ​rsi 
-  10:   73 68                  ​jae ​   0x7a +  15:   49 89 d0               ​mov    ​r8,rdx 
-  12:   ​57 ​                    ​push ​  edi +  18:   49 89 d2               ​mov    ​r10,rdx
-  13:   ​54 ​                    ​push ​  esp +
-  14:   ​5e ​                    ​pop ​   ​esi +
-  15:   ​49 ​                    dec    ecx +
-  16:   89 d0                  mov    ​eax,edx +
-  18:   ​49 ​                    dec    ecx +
-  19:   89 d2                  mov    ​edx,edx+
   1b:   0f 05                  syscall ​   1b:   0f 05                  syscall ​
 </​code>​ </​code>​
Line 123: Line 123:
 Va trebui să mențineți conexiunea activă la standard input pentru ''​vuln''​. Cel mai indicat este să folosiți comanda: Va trebui să mențineți conexiunea activă la standard input pentru ''​vuln''​. Cel mai indicat este să folosiți comanda:
 <​code>​ <​code>​
-cat <(echo -en '<​TODO_shellcode>​) - | ./vuln+cat <(echo -'<​TODO_shellcode>​') - | ./vuln
 </​code>​ </​code>​
  
Line 132: 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.1545208643.txt.gz · Last modified: 2018/12/19 10:37 by razvan