Pwnable.kr의 문제입니다. 롸업을 보기 전에 문제를 풀어주세요.

 

https://pwnable.kr 

 

https://pwnable.kr

   there are flag   files corresponding to each challenges (similar to CTF), you need to read it and submit to pwnable.kr to get the corresponding point. in order to read the flag file, you need some skills regarding programming, reverse-engineering, bu

pwnable.kr


bof 문제입니다!

Nana told me that buffer overflow is one of the most common software vulnerability.

Is that true?

 

Download: bof 파일

Download: bof.c 파일

 

Running at: 주소

 

이렇네요.

두개의 Download를 받아보니까 하나는 실행 파일이고, 하나는 c언어 파일입니다.

우선 실행을 해보기 전에 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로 그냥 받고있네요..

 

흐음... overflowme라는 변수에 입력을 받지만, 이를 오버플로우시켜서 key라는 변수에 값을 덮어씌운 뒤 0xcafebabe라고 입력을 해줘야 문제가 풀릴 것 같습니다.

 

gdb를 통해 보겠습니다. main 함수에서는 볼게 뭐 없는 것 같고...

func 함수를 보았을 때 +24는 printf 함수인걸 코드와 비교해서 알 수 있고,

+35는 gets함수라는 것을 알 수 있으며,

cmp를 통해서 비교를 하고 있습니다.

 

여기서 하나 확실하게 안 것은 ebp+0x8에 해당하는 주소 값이 key 변수의 주소라는 것입니다.

ebp+0x8과 0xcafebabe를 비교하고 있으니 당연히 그런 것이겠죠.

 

아! 하나 더!

gets 함수를 사용하는 +35에서 그 위에 eax에 ebp-0x2c의 주소값을 입력하게 되는 것으로 보아 overflowme 라는 변수의 위치가 저 부분인 것도 알 수 있겠네요.

 

 

이를 통해 계산을 해보게 되면 2c+8은 34이므로 이를 10진수로 변환하면 52라는 값이 나오게 됩니다.

따라서 두 변수 사이의 거리가 52라는 것이 되겠죠.

 

혹시 모르니, 대충 값을 넣어보고 거리가 어떤지 다시 확인해보겠습니다.

 

A를 여러개 입력한 다음에 deadbeef와의 거리를 계산해보니 52가 맞는걸 또 알 수 있었습니다.

 

 

 

이제 빠르게 페이로드를 짜보도록 하겠습니다.

 

대충 이렇게 짜고 실행을 해봤습니다.

bash가 실행되었다는 것을 알 수 있습니다. 이제 문제를 풀어보겠습니다.

 

?? 뭐징 왜 안되는걸까요?

 

nc 명령어로 실행을 해봤더니... overflow me : 를 출력하기 전에 입력을 받는 모습을 볼 수 있습니다...

아니... 왜이래...

 

그래서 recvuntil을 또 주석처리 해주고 실행을 해줬더니?

 

이렇게 문제가 풀리긴 하네요!

 

끄읕..! 후우 LOB에서 쌓인 짬밥으로 인해 이제 BOF는 어느정도 이해하고 잘 풀 수 있는 수준까지 온걸까요?! 허헣

'Hacking-기초 > [PWN] Pwnable.kr' 카테고리의 다른 글

[PWN] random (1pts)  (0) 2020.08.11
Pwnable.kr에서 peda 사용하기  (0) 2020.08.11
[PWN] flag (7pts)  (0) 2020.08.11
[PWN] collision (3pts)  (0) 2020.08.10
[PWN] fd (1pts)  (0) 2020.08.10

+ Recent posts