어렵진 않지만
조금 고민했던 문제이다.
문제에서 주어지는 것은
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 이라는게 있다는 것을 알았다.
'CTF > 암호학' 카테고리의 다른 글
[Space Heroes CTF] Rick Sanchez Algorithm - 암호학 / RsaCtfTool (89) | 2023.05.09 |
---|---|
[Tenable CTF] Quit messing with my flags - 암호학 / MD5 (62) | 2023.03.20 |
[JISCTF] Call - 암호학 / SMS PDU (64) | 2023.01.24 |
[JISCTF] Upside Down!! - 암호학 / Python (64) | 2023.01.15 |
[Cyber Security Rumble] Hashfun - 암호학 / XOR / Python (60) | 2022.12.21 |