-
-
[翻译]第三部分:缓冲区溢出【Pwnable.kr ->bof】
-
发表于: 2019-5-25 16:21 7259
-
大家好,这篇是通过 pwnables(Yaaaaay)恢复Linux漏洞利用开发系列的一次尝试!在第一篇中,我们将看到 pawnable.kr 的 BOF 挑战。这是一个简单的32位Linux上的缓冲区溢出,让我们直接进入主题把!
对于这个挑战,我们将在下面展示源代码“bof.c”
#include <stdio.h> #include <string.h> #include <stdlib.h> void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme); // smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; }
该程序输入一个参数 key 调用函数 func,key 为 0xdeadbeef。然后检查键参数 key 是否为 0xcafebabe(显然这种情况永远不会发生),如果是,它会提供给用户一个利用 shell 的机会,否则,它会打印 "Nah.." 并退出。下面显示了相同的逻辑:
#include <stdio.h> #include <string.h> #include <stdlib.h> void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme); // smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; }
该程序输入一个参数 key 调用函数 func,key 为 0xdeadbeef。然后检查键参数 key 是否为 0xcafebabe(显然这种情况永远不会发生),如果是,它会提供给用户一个利用 shell 的机会,否则,它会打印 "Nah.." 并退出。下面显示了相同的逻辑:

在这里将会提供一个简单的方案。分配缓冲区输入长度为32字节,但为用户提供的输入没有长度限制。如果我们溢出缓冲区,那么我们就可以在内存中手动替换
0xdeadbeef和0xcafebabe。当我们将大量输入发送到缓冲区中时,快速查看程序是否有按预期的那样奔溃。

我们可以适当地在内存中向 0xcafebabe 进行大量输入,并且预期会出现我们想要地结果(在本例中的确出现了这种情况)。使用 pattern create,这样我们就可以在输入缓冲区中找到键变量的精确偏移。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2019-5-27 09:18
被Liary编辑
,原因:
赞赏
他的文章
赞赏
雪币:
留言: