CTF/암호학

[Tenable CTF] Not JSON - 암호학 / Base64 / Python

SecurityMan 2023. 3. 16. 11:00

 

어렵진 않지만

 

조금 고민했던 문제이다.

 

반응형

 

문제에서 주어지는 것은

 

Base64 로 인코딩된 듯한 긴 문자열이다.

 

 

일단 바로 CyberChef(https://gchq.github.io/CyberChef/) 에서 

 

Base64 디코딩을 해보았다.

 

뭔가 디코딩이 되긴 되는거 같은데..

 

깔끔하지 않은 느낌이었다.

 

 

좀더 자세히 보기 위해

 

To Hex 레시피를 추가해 16진수값으로 한번 살펴보았다.

 

 

notepad++ 에 옮겨적고 천천히 분석해봤더니

 

패턴이 보였다.

 

빨간 화살표가 표시된 1....2..... 부분부터 

 

16진수 값에 특정한 패턴이 보였다.

 

맨앞에 있는 30, 31, 32, 33 ... 이 숫자들은

 

ASCII 코드로 0,1,2,3... 을 의미하는데

 

이 숫자들은 플래그의 INDEX 값이다.

 

그리고 세번째 열(두자리 수는 네번째 열) 은 

 

앞에 나와있는 abcdefghijklmnopqrstuvwxyz_{} 의 INDEX 값이다.

 

예를들어 맨 처음 나와있는 30 00 05 00 00 00 10 같은 경우,

 

30은 0 을 의미하고, 05 는 abcdefghijklmnopqrstuvwxyz_{} 에서 5번째 있는 f 를 의미하니,

 

플래그의 0번째 글자는 f 다 라는 의미이다.

 

이런식으로 한글자씩 찾아나가면 플래그를 구할 수 있다.

 

string = 'abcdefghjiklmnopqrstuvwxyz_{}'

hexarr = ['05', '0b', '00', '06', '1b', '12', '0e', '0d', '1a', '0e', '05', '1a', '00', '1a', '01', '12', '0e', '0d', '1c']

flag = ''

for i in range(len(hexarr)):
    txt = int(hexarr[i], 16)
    flag += string[txt]

print(flag)

 

파이썬 코드를 이용해 문제를 풀었다.

 

hexarr 라는 배열에 세번째 열의 숫자를 모두 넣어주고

 

hexarr[i] 에 있는 값을 확인해서 string 변수에서 그 값을 찾아

 

flag 에 이어붙혀 적어주었다.

 

 

코드를 실행시키면 플래그를 찾을 수 있다.

 

 

이렇게 문제 다 풀고 나서 BSON 이라는게 있다는 것을 알았다.

반응형