오늘은 마지막 200점 문제이다 :D
NX bit만 걸려있으며, Partial RELRO이다.
실행을 시키면 인증 프로그램이라는 문자열과 함께
key를 입력하고 "Nah.."라는 문자열을 출력한다.
아이다로 열어보면
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 |