[Pwnable] Random Key
Wargame/HackCTF

[Pwnable] Random Key

오늘은 마지막 200점 문제이다 :D

 

mitigation

NX bit만 걸려있으며, Partial RELRO이다.

 

./random

실행을 시키면 인증 프로그램이라는 문자열과 함께

key를 입력하고 "Nah.."라는 문자열을 출력한다.

 

아이다로 열어보면

 

main()

v5에 랜덤 값이 들어가며

우리가 입력하는 입력값이 v4에 들어가게 된다.

 

만약 우리의 입력값이 랜덤 값인 v5와 일치하게 된다면 flag를 보여주는데

 

우리가 프로그램에서 돌아가는 랜덤값을 어떻게 유추할 수 있을까?

 

코드를 다시 한번 잘보면 v3에 time 함수가 들어갑니다.

 


time() = 시간에 대한 정보를 얻어오는 함수


결론은 srand로 시드값을 현재 시간으로 설정하고 rand로 랜덤값을 뽑는다.

그렇다면 시드값이 동일하면 rand값도 동일하니,

내 컴퓨터에서의 seed와 서버에서의 seed가 같게하면 된다.

 

그렇다면 C로 seed값을 현재시간으로 설정하여 rand 값을 출력하는 프로그램을 작성하여

nc 서버에서 돌려보자

 

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

int main()
{
    srand(time(0));
    printf("%d\n", rand());
}

이런식으로 작성하여서 

 

gcc로 컴파일 해준다. 나의 경우는 이렇게 컴파일 해줬다.

 


gcc -o randomkey random.c


 

실행파일을 만든 후 nc서버에서 돌리면 된다.

 


./randomkey | nc ctf.j0n9hyun.xyz 3014


이번 문제는 삽질을 좀 했다.

그래도 잘 풀려서 다행이다.

 

FLAG = HackCTF{5087686686858549173307745189}

'Wargame > HackCTF' 카테고리의 다른 글

[pwnable] Look at me  (0) 2021.02.22
[Pwnable] RTL_Core  (0) 2021.02.07
[Pwnalbe] 1996  (0) 2021.02.06
[Reversing] Handray  (0) 2021.02.04
[Pwnable] Poet  (0) 2021.02.04