BLOG main image
분류 전체보기 (224)
Reversing (13)
Pwnable (4)
Linux Kernel (3)
Crypto (2)
Wargames (68)
Programming (18)
Write Up (32)
Project (22)
Web (2)
My Life (52)
Memo (3)
etc (2)
발표자료 (1)
42,655 Visitors up to today!
Today 3 hit, Yesterday 27 hit
daisy rss
tistory 티스토리 가입하기!
2016.05.09 22:39


포렌식 문제이다. 맨 처음 나온 리버싱이 너무 안풀려서 잡아본 문제이다. 파일은 패킷 파일이 주어진다. 네트워크 같은거 잘 몰라서 내부에 어떤 파일들이 있나 봤더니 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 - firtog  (0) 2016.05.09
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
Name
Password
Homepage
Secret