首页
社区
课程
招聘
[翻译]第三部分:缓冲区溢出【Pwnable.kr ->bof】
发表于: 2019-5-25 16:21 7259

[翻译]第三部分:缓冲区溢出【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编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回