execve(/ bin / sh)shellcode问题

时间:2019-05-23 23:44:34

标签: assembly x86-64 shellcode execve

我正在尝试为execve(/ bin / sh)编写shellcode,但是在理解为什么它不起作用时遇到了一些麻烦。

这是我的.asm代码:

global _start       

section .text
_start:

    ; PUSH 0x00000000 on the Stack

    xor rax, rax
    push rax

    ; PUSH //bin/sh in reverse i.e. hs/nib//

    push 0x68732f6e
    push 0x69622f2f

    ; Make RDI point to //bin/sh on the Stack using RSP

    mov rdi, rsp

    ; PUSH 0x00000000 using RAX and point RDX to it using RSP

    push rax
    mov rdx, rsp 

    ; PUSH Address of //bin/sh on the Stack and make RSI point to it using RSP

    push rdi
    mov rsi, rsp

    ; RAX = 0, Let's move 59 into AL to avoid nulls in the Shellcode

    mov al, 0x3b        ; SYS_execve
    syscall

我使用“ strace -f -s 10000 -e execve ./shellcode”来查看我的execve命令是否编写正确,并且得到了这个信息:

execve("//bi", ["//bi"], [/* 0 vars */]) = -1 ENOENT (No such file or directory)
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0xfffffffffffffffe} ---
+++ killed by SIGSEGV +++
Segmentation fault

我不明白为什么我只有“ // bin”而不是整个字符串。 我尝试使用更长的字符串,但它仍然相同,仅显示4个字符,但无法正常工作。

顺便说一句,我使用nasm在x86_64上即时通讯,我不明白为什么我不能像pushq 0x0000000000000000那样推送8个字节(pushq结果带有解析器错误,而使用push时会截断输入)

0 个答案:

没有答案