포렌식 문제이다. 맨 처음 나온 리버싱이 너무 안풀려서 잡아본 문제이다. 파일은 패킷 파일이 주어진다. 네트워크 같은거 잘 몰라서 내부에 어떤 파일들이 있나 봤더니 zlib 파일들이 많이 있었다. 그래서 다 추출해 보았다.
1 2 3 4 5 6 | file = open('firtog.pcap', 'rb').read().split('\x78\x9c') data = '' for i in range(1, len(file)): data += ('\x78\x9c' + file[i]).decode('zlib') open('decypted', 'wb').write(data) | cs |
이렇게 파이썬 소스를 짜서 추출하면 된다.
추출된거 보면 막 이상한 것들이 많다. 페이크 플래그도 있고 막 파이썬 소스도 있고 했는데 추출된 데이터의 밑쪽을 보니까
1 2 3 4 5 6 7 8 9 10 11 12 | from os import urandom from hashlib import md5 l = 128 rd = urandom(l) h = md5(rd).hexdigest() flag = 'ASIS{' + h + '}' f = open('flag.txt', 'r').read() flag = '' for c in f: flag += hex(pow(ord(c), 65537, 143))[2:] print flag | cs |
이런 소스가 있었다. 처음에 나오는 flag는 말도 안되는 값이고, 8번째 줄부터 보니까 flag.txt를 열어서 암호화 하는 것 같았다. 그리고 복호화된 데이터 맨 밑을 보면 41608a606a63201245f1020d205f1612147463d85d125c1416635c854c74d172010105c14f8555d125c3c 이런 값이 있었다.
그래서 복호화 했다.
1 2 3 4 5 6 7 8 9 10 11 12 | flag_enc = '41608a606a63201245f1020d205f1612147463d85d125c1416635c854c74d172010105c14f8555d125c3c' flag = '' table = 'ASIS{}abcdef0123456789' tmp = '' while tmp != flag_enc: for i in table: if flag_enc.startswith(tmp + hex(pow(ord(i), 65537, 143))[2:]): flag += i tmp += hex(pow(ord(i), 65537, 143))[2:] break print flag | cs |
돌리면 키 나와요.
key : ASIS{c691a0646e79f3c4d495f7c5db3486005fad2495}
'Write Up' 카테고리의 다른 글
YISF 2016 예선 Write-Up (2) | 2016.08.19 |
---|---|
2016 KDMHS-CTF times (0) | 2016.05.15 |
2016 ASIS CTF Quals - Catch Me! (0) | 2016.05.09 |
2016 CodeGate Final rev (1) | 2016.05.06 |
2016 CodeGate Final GMPQZ (0) | 2016.05.04 |