티스토리 뷰

보안/CTF

[Web] Recovery - 2021 Tamil CTF Writeup

돔돔이부하 2021. 9. 30. 00:00
728x90
반응형

문제 설명 : flag is located at flag, but its not flag

입력 폼이 있고, 버튼이 있습니다. 버튼이 누르면 아래 result 에 인코딩된 문자열들이 출력됩니다.

 

입력폼에 있어서 있던 제한사항은 lowercase letters 와 numbers 만 입력이 가능하다고 합니다.

input : domdomi
result : crIng3 CRIng3 cr1ngE crIng3 CRIng3 cr1ngE crinGE

테스트로 domdomi 라고 쳐봤습니다. 봤을 때 d에 해당하는 crIng3 이 앞에서나 뒤에서 모두 동일했습니다. 마찬가지로 o 와 m 도 동일하였습니다. 이 말 뜻은 단순히 특정 문자를 다른 문자열로 치환한다고 보아도 됩니다.

해서 a 부터 z까지 그리고 0 부터 9까지에 해당하는 문자열들을 파악하였습니다.

 

input : abcdefghijklmnopqrstuvwxyz0123456789
result : cringe cr1nge cRinge crIng3 cRimG3 cR1Ng3e criNgee CRINGE crinGE ccR1nge CriNGE cRINGe cr1ngE cringE CRIng3 Cr1nGe cR1nnge cR1Ng3 CrInGe cRingE cR1NGE CRiNg3 CR1NGe CRINGe cring3 CRIMNGE cRInGE crinG3 cRInge cRinG3 criNG3 cr1NG3 crinGe cRiNge CrInGE CRinGE

위의 결과를 하나의 사전(dictionary)로 두고 flag를 살펴보았습니다. 문제 설명에도 나와 있듯이 flag는 flag에 위치해 있다고 합니다. 짐작하건데 URL 경로를 의미하는 듯 하였습니다.

이제 위 문자열들을 사전에 대입해서 찾아주면 되겠습니다. python 코드로 짜보았습니다.

cringes_text = {
'a':'cringe','b':'cr1nge','c':'cRinge','d':'crIng3','e':'cRimG3',
'f':'cR1Ng3e','g':'criNgee','h':'CRINGE','i':'crinGE','j':'ccR1ng',
'k':'CriNGE','l':'cRINGe','m':'cr1ngE','n':'cringE','o':'CRIng3',
'p':'Cr1nGe','q':'cR1nnge','r':'cR1Ng3','s':'CrInGe','t':'cRingE',
'u':'cR1NGE','v':'CRiNg3','w':'CRINGe','x':'CR1NGe','y':'cring3',
'z':'CRIMNGE','0':'cRInGE','1':'crinG3','2':'cRInge','3':'cRinG3',
'4':'criNG3','5':'cr1NG3','6':'crinGe','7':'cRiNge','8':'CrInGE',
'9':'CRinGE'
}

flag_str = 'cR1Ng3e crinG3 cringE cringe cRINGe cRINGe cring3 \
crinG3 cringE cringE cRinG3 Cr1nGe cRimG3 criNG3 cRinge cRimG3 \
cringe cR1Ng3e cRiNge cRinG3 cR1Ng3 CrInGe cRInGE cr1ngE \
criNG3 cringE cring3 cRinge cR1Ng3 crinGE cringE criNgee \
cRinG3 CrInGe'

flag_lst = flag_str.split()
key_lst = list(cringes_text.keys())
value_lst = list(cringes_text.values())

flag = []
for i in flag_lst:
	flag.append((key_lst[value_lst.index(i)]))
print(''.join(flag))

# f1nally1nn3pe4ceaf73rs0m4nycring3s

그럼 위와 같은 결과가 나옵니다. 해당 값을 TamilCTF{플래그값} 형태로 넣어주면 문제가 풀렸습니다.

제일 쉬운 문제로써 Web 문제에서는 제일 점수가 낮은 200점 문제였습니다.

728x90
반응형
댓글