Samsung CTF PreQuals 2018 - HideInSSL (121 pts.)

HideInSSL (121pts)

문제에서 준 pcap파일을 열어서 훑어본 결과 Client HelloContinuation Data가 정말 많았다.
Client Hello를 좀 더 살펴 본 결과 Secure Sockets LayerHandshake Protocol에서 보내는 Random BytesJFIF 즉, .jpg파일을 보내는것을 알 수 있었다.

Continuation Data에는 0또는 1이 있었으며 0으로 응답을 받았을 경우 이전에 전송한 내용을 재전송 하는 것을 볼 수 있다.

해당 내용을 기반으로 하여 .jpg파일들을 전부 빼와보기로 했다.

solve.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import os

os.system("rm -rf result")
os.system("tshark -r HideInSSL.pcap -Y 'ip.addr==192.168.0.107 && ip.addr==192.168.0.128 && ssl' -T fields -e tcp.payload -e ssl.handshake.random_bytes > filtered.txt")
os.system("mkdir result")

lines = open('filtered.txt').read().split('\n')

output = ''
for i in range(0, len(lines)):
if len(lines[i]) == 0:
continue
if lines[i] == '31\t' or lines[i] == '30\t':
continue

random_bytes = lines[i].split()[1]
string = random_bytes.replace(':', '').decode('hex')[4:]

if i != 0 and 'ff:d8' in lines[i] and '31' in lines[i + 1]:
open('result/output{0}.jpg'.format(i), 'w').write(output)
output = ''

if '31' in lines[i + 1]:
output += string

open('result/output{0}.jpg'.format(i), 'w').write(output)

result

flag : SCTF{H3llo_Cov3rt_S5L}

Share