pwnable.kr 3.bof writeup
阿新 • • 發佈:2018-12-26
基本緩衝區溢位的利用。
拿到題目
訪問下http://pwnable.kr/bin/bof.c得到原始碼
#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; }
一個基本的棧溢位。將key的值覆蓋為0xcafebabe即可得到shell。
訪問http://pwnable.kr/bin/bof 得到可執行檔案。
用ida反彙編檢視char陣列的首地址和key的地址的距離。
可以看到陣列s的首地址是EBP-0x2c,畫下此時的堆疊圖
EBP-0xc處是canary保護(stack protector),canary的值如果被改變就會報錯。
canary保護即是圖中的
因為canary的關係,陣列的首地址發生了改變,如果不反彙編就無法知道其到key地址的距離。
從堆疊圖可以清晰的看到,陣列的首地址到key的首地址的距離是52是位元組,只需用52個位元組填充,再加上0xcafebabe即可。
由於0xcafebabe轉化為字元後不是可見字元,無法通過鍵盤打入,可以藉助pwntools來編寫利用程式碼。利用程式碼如下:
p32函式將0xcafebabe轉化為\xbe\xba\xfe\xca,也可以直接寫成\xbe\xba\xfe\xca
interactive函式是開啟人機互動模式,取得shell許可權後,使用此函式。
執行此指令碼後即可得到shell
使用命令cat flag得到flag