2017-03-11 1 views
0

sys_execve (X86_64)를 트리거하려고합니다.nasm 어셈블리 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 

그것은 분할 오류 내가 잘못 뭐하는 거지

을 준다? ...

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; 
} 

이것은 또한 나에게 분할 오류를 제공합니다 당신은에 의해 포인터로 문자열 /bin/sh 역 참조로 커널을 일으키는

+0

'레아 RSI, [파일]'잘못된 것입니다. – Jester

+0

더 많은 태그를 스팸으로 보내는 것은 어떻습니까? – Olaf

+0

@Jester : execve에 두 번째 매개 변수로 문자열의 포인터가 필요하다고 생각 했습니까? – int80

답변

0

dxsi를 설정하여 빈 환경 및 인수를 전달합니다

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

을 :

나는 심지어 C 소스에 넣어 시도 주소를 rsi에로드합니다. 내가 그것을 알아 냈

그냥 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

안녕하세요. 아니, 작동하지 않아. 만약 내가 그것을 실행하고 echo $ 0라고하면 "bash"라고한다. – int80

관련 문제