1. 程式人生 > >pwnable.kr 3.bof writeup

pwnable.kr 3.bof writeup

基本緩衝區溢位的利用。
拿到題目
在這裡插入圖片描述
訪問下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
在這裡插入圖片描述