본문 바로가기

Write Up

2016 ASIS CTF Quals - firtog


포렌식 문제이다. 맨 처음 나온 리버싱이 너무 안풀려서 잡아본 문제이다. 파일은 패킷 파일이 주어진다. 네트워크 같은거 잘 몰라서 내부에 어떤 파일들이 있나 봤더니 zlib 파일들이 많이 있었다. 그래서 다 추출해 보았다. 

1
2
3
4
5
6
file = open('firtog.pcap''rb').read().split('\x78\x9c')
 
data = ''
for i in range(1len(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
 
= 128
rd = urandom(l)
= md5(rd).hexdigest()
flag = 'ASIS{' + h + '}'
= open('flag.txt''r').read()
flag = ''
for c in f:
    flag += hex(pow(ord(c), 65537143))[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), 65537143))[2:]):
            flag += i
            tmp += hex(pow(ord(i), 65537143))[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