Web - Basic (10 points)
RTLxHA CTF 2021의 웹 카테고리의 Basic 문제다. 링크만 주어져 있다.
해당 링크로 들어가면 위 사진처럼 로그인 창이 뜨는데, 시험 삼아 sql injection을 이용한 인증 우회 공격을 시도해봤다.
id : 1' or '1' = '1' --
pw : 1234 (<- 이 부분은 아무거나 입력해도 상관없다.)
바로 flag가 출력된 것을 볼 수 있다.
Flag : RTL{b@s1c_5ql}
Crypto - Welcome (5 points)
거의 거저 주는 것과 다름없는 암호학 문제다. 3번째 줄에 암호문이 주어져 있는데 뒤에 '=='이 붙은 것을 보아 base64로 암호화된 것 같다.
base64 해독을 해주는 사이트(https://www.base64decode.org/)를 이용하니 flag를 얻을 수 있었다.
Flag : RTL{H4VE_FUN_PL4Y1NG!}
Windows - WDigest (50 points)
Windows 카테고리의 WDigest 문제다. 처음에는 Windows 카테고리가 뭔지 몰랐지만 풀고나니 windows 상의 포렌식을 말하는 것 같다.
문제 설명을 보면 Windows os의 비밀번호를 잃어버렸다고 이를 찾아달라 한다.
문제 파일로는 위 lsass.DMP 파일이 주어져있다. 이 Isass.DMP 파일을 구글링한 결과 lsass가 윈도우 패스워드 관련 프로세스라는 것을 알 수 있었다.
혹시하고 strings로 "RTL{"로 시작하는 문자열을 검색하는 방법도 시도해봤지만 아쉽게도 이 방법은 실패했다.
여러방면으로 알아보던 중 mimikatz라는 툴을 알게되어 이를 사용해봤다.(https://github.com/gentilkiwi/mimikatz/releases)
dmp 파일을 mimikatz를 압축 풀면 나오는 x64 폴더로 복사한뒤 mimikatz.exe 파일을 실행한 뒤, 아래 명령어를 입력하면 flag를 얻을 수 있다.
sekurlsa::minidump lsass1.DMP
sekurlsa::logonpasswords
Flag : RTL{WD1G3ST_1S_B4D}
Reversing - Bad Developers (10 points)
리버싱 카테고리의 Bad Developers 문제다. 링크가 주어져있다.
링크에 들어가 보면 올바른 flag인지 입력 값을 체크하는 기능을 하는 파이썬 코드가 존재한다. "Good job"이 출력되는 경우의 조건만 눈여겨본다면 쉽게 flag를 얻을 수 있다.
a = "LTR"
b = "0D"
c = "S1"
inp = input("> ")
if len(inp) != 17:
print("Wrong size.")
exit()
if (inp[0] == a[2] and inp[1] == a[1] and inp[2] == a[0]) and inp[3] == "{" and \
((inp[4] + inp[5]) == b[::-1]) and (inp[6] == "N" and inp[7] == "T" and inp[8] == chr(95)) and \
(inp[9] + inp[10] == b[::-1]) and (inp[11] + inp[12] + inp[13] == "_TH") and (inp[14] + inp[15] == c[::-1]) and \
(inp[16] == "}"):
print("Good job.")
else:
print("Flag is incorrect.")
앞부분만 조금 살펴보면 입력 값이 저장되는 변수 inp의 0번째 인덱스와 "LTR"이 들어있는 a 변수의 2번째 인덱스를 비교한다. 즉 입력 값의 첫 번째는 R임을 알 수 있다.
이런 식으로 하나하나 조건문을 해석해 나간다면 아래와 같은 flag를 얻을 수 있다.
Flag : RTL{D0NT_D0_TH1S}
Reversing - The gate of ultimate success (50 points)
리버싱 카테고리의 The gate of ultimate success 문제다. 요약하자면 바이너리를 분석해 올바른 key 값을 찾으라는 것이목적이다.
문제 파일로 exe 파일이 주어져 있다.
exe 파일을 실행해보면 key를 입력하라는 문구가 뜨고 입력을 받는다. 1234를 입력하자 틀린 key라는 문구가 나온다.
이 실행 파일을 분석해 입력 값 검증 로직을 본다면 시리얼 키를 알아낼 수 있을 것 같다.
메인 함수에 확인해야할 로직이 존재했다. 간단하게 해석을 해보면 입력 값을 for문을 통해 한 글자 한 글자 0x7B라는 값으로 xor한다. 그리고 xor된 값을 v12 변수에 저장한 후 이 v12와 serial_key 값과 같은지 strcmp 함수를 통해 비교하고 성공, 실패 분기를 나눠준다.
따라서 serial_key 값인 "/5:/)4+62/(46>):(82(:9"을 문자 하나 하나 0x7B로 xor 연산한다면 어떤 값을 입력해야 성공 문자열을 띄울지 알 수 있다.
a = "/5:/)4+62/(46>):(82(:9"
flag = ""
for i in a:
flag += chr(ord(i) ^ 0x7b)
print('RTL{',flag[::-1],'}',sep="")
위 파이썬 코드를 사용해 파일 내에서 얻은 serial_key 값을 0x7B로 xor했다.
Flag : RTL{BASICSAREMOSTIMPORTANT}
'CTF' 카테고리의 다른 글
[YISF 2021] YISF 2021 후기 및 write up (0) | 2021.09.21 |
---|---|
CSAW CTF 2021 Write up (0) | 2021.09.13 |
[redpwnCTF 2021] rev - wstrings (0) | 2021.07.13 |
[redpwnCTF 2021] pwn - ret2generic-flag-reader (0) | 2021.07.13 |
[redpwnCTF 2021] pwn - beginner-generic-pwn-number-0 (0) | 2021.07.13 |