ii4gsp

HITCON Training - LAB 1 본문

시스템 해킹/HITCON Training

HITCON Training - LAB 1

ii4gsp 2020. 2. 7. 12:49
#include <stdio.h>
#include <unistd.h>



void get_flag(){
	int fd ;
	int password;
	int magic ;
	char key[] = "Do_you_know_why_my_teammate_Orange_is_so_angry???";
	char cipher[] = {7, 59, 25, 2, 11, 16, 61, 30, 9, 8, 18, 45, 40, 89, 10, 0, 30, 22, 0, 4, 85, 22, 8, 31, 7, 1, 9, 0, 126, 28, 62, 10, 30, 11, 107, 4, 66, 60, 44, 91, 49, 85, 2, 30, 33, 16, 76, 30, 66};
	fd = open("/dev/urandom",0);
	read(fd,&password,4);
	printf("Give me maigc :");
	scanf("%d",&magic);
	if(password == magic){
		for(int i = 0 ; i < sizeof(cipher) ; i++){
			printf("%c",cipher[i]^key[i]);
		}
	}
}

int main(){
	setvbuf(stdout,0,2,0);
	get_flag();
	return 0 ;
}

문제 소스코드이다.

main()함수에서는 get_flag()함수를 호출한다.

get_flag()함수를 보면 password에 랜덤값을 넣고 password와 magic의 값이 같으면 flag를 출력해준다.

 

 

 

 

gdb로 get_flag함수를 disas 해보면 edx, eax에 값을 저장하고

두 레지스터가 비교를한다.

이부분이 password == magic 일것이다.

<get_flag+389>부분에 break point를 걸어주고 레지스터 값을 확인해보자.

 

 

 

 

edx의 값은 0xfb87a792이다.

eax의 값을 0xfb87a792로 조작해주자.

 

 

 

 

Flag: CTF{debugger_1s_so_p0werful_1n_dyn4m1c_4n4lySis!}

'시스템 해킹 > HITCON Training' 카테고리의 다른 글

HITCON Training - LAB 3  (2) 2020.02.07
HITCON Training - LAB 2  (0) 2020.02.07
Comments