我的shellcode有什么问题?

时间:2017-04-25 09:21:52

标签: linux shellcode

很抱歉,这个问题必须经过千次询问和解释,但我不知道为什么这段代码会给我一个分段错误。 使用nasm编译为elf 64并且喜欢使用ld。

BITS 64          ;
xor  rax, rax    ;
mov  rax, 0x3b   ; LinuxX64 exevce
push 0x68732f2f  ;
push 0x6e690b2f  ;
pop rbx          ; Argv[0] /bin//sh
xor rcx, rcx     ;
push rcx         ;
push rbx         ; 
pop rcx          ; Argv[1] /bin//sh0
xor rsi, rsi     ; just need any GP register 
push rsi         ;
pop rdx          ; Argv[2] 0
syscall          ;

1 个答案:

答案 0 :(得分:0)

实际上很多事情都是错误的,首先是64位,如果我们必须使用堆栈,则参数将作为 rdi,rsi,rdx,rcx,传递。

BITS 64                       ;
xor  rax, rax                 ;
mov  al, 0x3b                 ; EXECVE -> al other wise we get null bytes
xor  rcx, rcx                 ; 
push rcx                      ; PUSH A NULL BYTE
mov  rdi, 0x68732f2f6e69622f  ; /*  
push rdi                      ;     use the stack to fill rdi '"/bin//sh"0'
mov  rdi, rsp                 ; */
xor sil, sil                  ; Argv[2] -> sil otherwise we ge null bytes
syscall                       ;