Wargame/HackCTF

Random Key

Anatis 2021. 3. 21. 02:46

 

1. Mitigation

메모리 보호기법은 GOT Overwrite가 가능하고 실행 권한이 없다.

 

2. 문제 확인

프로그램을 실행시키면 key를 입력하라고 나오며 입력을하면 Nah...라고 출력한다.

 

3. 풀이

IDA를 통해 분석을 해보면 time(0), srand(), rand() 함수가 있고 키를 입력 받는다. v5와 v4가 같아야만 플래그 값을 출력 해준다. 

srand 는 rand의 seed값을 지정해주고 rand함수는 srand가 지정해준 seed값을 바탕으러 난수를 생성한다. time 함수를 NULL로 받으면 1970년 1월 1일 00시 기준으로 현재까지 흐른 시간의 초를 나타내준다. 

 

초는 멈추지 않고 계속 흐르니깐 srand(time(NULL))을 설정하면 난수는 실시간으로 변경된다. 그러면 서버의 seed와 우리가 만든 seed를 같게하면 인증이 통과할 것 이다.

 

exploit

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    srand(time(NULL));
    printf("%d", rand());
}