2017-03-11 2 views
0

Ich versuche, sys_execve (X86_64) auszulösen.Nasm-Assembly sys_execve/bin/sh

section .data 
file db "/bin/sh",0 

section .text 
global _start 

_start: 

mov rax, 59 
mov rdi, file 
lea rsi, [file] 
mov rdx, 0 
syscall 

Es gibt Segmentation fault

Was mache ich falsch?

Ich habe sogar versucht, es in einer C-Quelle zu setzen:

int main(void) 
{ 
char shellcode[] = 
"\xb8\x3b\x00\x00\x00" 
"\x48\xbf\xd0\x00\x60\x00\x00" 
"\x00\x00\x00" 
"\x48\x8d\x34\x25\xd0\x00\x60" 
"\x00" 
"\xba\x00\x00\x00\x00" 
"\x0f\x05"; 

(*(void (*)()) shellcode)(); 

return 0; 
} 

Das gibt mir auch einen Segmentation fault ...

+0

'lea rsi, [file]' ist falsch. – Jester

+0

Wie wäre es mit Spamming noch mehr Tags? – Olaf

+0

@Jester: Ich dachte, dass Execve als zweiten Parameter den Zeiger der Zeichenfolge benötigt? – int80

Antwort

0

Einstellung ich es herausgefunden:

section .data 
file db '/bin/sh',0 
file_arg db 'sh',0 
argv dq file_arg, 0 

section .text 
global _start 
_start: 
mov  rax, 59 
mov  rdi, file 
mov  rsi, argv 
mov  rdx, 0 
syscall 
0

Sie verursachen den Kernel zu dereferenzieren den String /bin/sh als Zeiger durch Laden seiner Adresse in rsi.

einfach eine leere Umgebung und Argumente übergeben von dx und si auf 0.

section .text 
global _start 

_start: 
    mov rax, 59 
    mov rdi, file // *filename 
    mov rsi, 0  // *argv 
    mov rdx, 0  // *envp 
    syscall 

section .data 
    file db "/bin/sh",0 
+0

Hey thx für die Antwort. Nein, es funktioniert nicht. wenn ich es ausführe und echo $ 0 sage, sagt es "bash". – int80