1

我正在尝试通过观看http://www.securitytube.net/groups?operation=view&groupId=4上的视频来了解我的Ubuntu12.04 32 位机器上的缓冲区溢出。目前,我在第 5 部分,它注入一些可重定位的代码以通过 ExecVe 生成一个 bash shell

使用第 5 部分视频中显示的方法,我可以Shellcode.c很好地构建。gcc -mpreferred-stack-boundary=2 -o Shellcode Shellcode.c但是,当我运行 C 代码时,我得到的只是Segmentation Fault (core dumped). 我没有像视频中显示的那样生成 bash shell。

谁能告诉我为什么我没有像演示节目那样生成 bash shell?我的直觉告诉我这是因为我使用的是更高版本的内核(不知道演示中使用了什么)。

谢谢!

代码如下:

Shellcode.c

#include<stdio.h>

char shellcode[] = "\xeb\x18\x5e\x31\xc0\x88\x46\x09\x89\x76\x0a"
                   "\x89\x46\x0e\xb0\x0b\x89\xf3\x8d\x4e\x0a\x8d\x56\x0e"
                   "\xcd\x80\xe8\xe3\xff\xff\xff\x2f\x62\x69\x6e\x2f\x62"
                   "\x61\x73\x68\x41\x42\x42\x42\x42\x43\x43\x43\x43";


int main(){

        int *ret;

        ret = (int *)&ret +2;

        (*ret) = (int)shellcode;

}
4

1 回答 1

1

我的朋友,请确保您正确编译它。

如果是 32 位 shellcode,这很可能是因为 \xcd\x80 在那里。

并确保堆栈是可执行的并且没有堆栈保护器

gcc -m32 -oa shell.code -fno-stack-protector -z execstack ./a

如果你的 shellcode 是正确的,这应该给你一个 shell。

如果不运行 gdb a 来逐步检查哪一部分是错误的。

于 2017-06-09T07:14:26.303 回答