[HackCTF] Random Key
System/PWNABLE

[HackCTF] Random Key

728x90

check

- 64 bit

- NX

Analyze

pseudo code

- random 변수 v5를 생성하고 일반 변수 v4의 값을 입력한 후 v4가 v5와 값이 같으면 플래그를 출력한다.

실행

>> rand 함수에 대한 이해가 필요한 문제이다.

- rand 함수
int rand(void)
:랜덤한 숫자를 반환하는 함수로, stdlib.h 헤더파일에 포함되는 함수이다. 하지만, srand함수와 time 함수 없이 rand 함수만 사용하게 되면 일정한 순서의 숫자들이 반환된다. 

- srand 함수
void srand(unsigned int seed)
: 매개변수로 전달되는 seed를 이용해 rand 함수에 사용될 수를 초기화한다. 즉, seed 값에 의해 rand 함수의 결과값이 달라지는 것이다.

- time 함수
time_t time(time_t* timer)
UCT 기준 1970.01.01.0:0:0를 기준으로 경과된 시간을 초로 반환하는 함수이다. time 함수의 리턴값을 srand 함수의 인자로 주면 seed의 값이 시간마다 달라지기 때문에 따로 지정해주지 않아도 랜덤한 값이 나오게 된다.

[출처] https://blockdmask.tistory.com/308

>> random을 실행했을 때 전달되는 seed와 같은 seed를 가진 상태에서 rand()함수로 랜덤한 값을 만들어내면 같은 값이 나오게 될 것이다!!!

 

Exploit

//gcc -o seed seed.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
	srand((unsigned int)time(NULL));
	int key;
	key = rand();
	printf("%d", key);
	return 0;
}

 

! 성공 !

더보기

그냥 하던대로 바로 ./random을 넣어버리니까 그런 파일이 없다고 하길래 바로 nc 연결을 해야하는 것을 깨달았다...

SMALL

'System > PWNABLE' 카테고리의 다른 글

[HackCTF] Look at me (재)  (0) 2021.03.03
[HackCTF] RTL core  (0) 2021.02.14
[HackCTF] 1996  (0) 2021.02.13
[HackCTF] g++ pwn  (0) 2021.02.13
[HackCTF] Poet  (0) 2021.02.11