본문 바로가기

Pwnable.kr

Pwnable.kr [bof]

#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;
}

아직도 너무 수련이 부족하다...

 

gdb로 본 func 함수 내용.

 

키값이랑 입력 버퍼 시작 주소 간의 차이는 52byte이고

 

노란색 순서를 보면 버퍼를 덮고(gets), 키값이랑 검사를 하고, 쉘이 열리고(system), 이후에 canary 체크(chk_fail)를 한다.

 

즉 쉘이 먼저 열리기 때문에 canary를 무시해도 상관이 없는데, 이걸 생각을 못해서 한참 삽질했다.

 

그리고 쉘을 따도, file descriptor가 끊기면서 추가적인 데이터를 주고 받을 수 없기 때문에, ; cat을 추가해줘야 함

 

 

'Pwnable.kr' 카테고리의 다른 글

Pwnable.kr [input]  (0) 2019.04.30
Pwnable.kr [random]  (0) 2019.04.29
Pwanble.kr [passcode]  (0) 2019.04.29
Pwnable.kr [collision]  (0) 2019.04.24
Pwnable.kr [fd]  (0) 2019.04.24