Thứ Bảy, 27 tháng 8, 2016

[Write-up] [IceCTF] [For125] Intercepted Conversations Pt.2

Đề :


File đính kèm là pcapng. Sau khi mở file bằng wireshark ta thấy đại khái có 2 thằng nói chuyện với nhau. Và thằng A kêu không an toàn nên gửi cho thằng B cái tool là file encode.pyc

 Kéo xuống 1 chút ta có thể thấy phần data file đc gửi qua
Follow TCP stream rồi dump file đó ra.
Đây là file pyc nên ta sẽ decompiler file này. Sau đó có phần source code Encode như sau :

# Python 3.5 (decompiled from Python 2.7)# Embedded file name: encode.py# Compiled at: 2016-08-08 05:10:09import randomimport base64P = [27, 35, 50, 11, 8, 20, 44, 30, 6, 1, 5,
2, 33, 16, 36, 64, 3, 61, 54, 25, 12, 21,
26, 10, 57, 53, 38, 56, 58, 37, 43,
17, 42, 47, 4, 14, 7, 46, 34, 19, 23,
40, 63, 18, 45, 60, 13, 15, 22, 9, 62,
51, 32, 55, 29, 24, 41, 39, 49, 52, 48,
28, 31, 59]S = [68, 172, 225, 210, 148, 172, 72, 38, 208,
227, 0, 240, 193, 67, 122, 108, 252, 57, 174,
197, 83, 236, 16, 226, 133, 94, 104, 228, 135,
251, 150, 52, 85, 56, 174, 105, 215, 251, 111,
77, 44, 116, 128, 196, 43, 210, 214, 203, 109,
65, 157, 222, 93, 74, 209, 50, 11, 172, 247, 111,
80, 143, 70, 89]inp = input()inp += ''.join((chr(random.randint(0,47)) for _ in range(64 - len(inp) % 64)))ans = ['' for i in range(len(inp))]for j in range(0,len(inp),64):for i in range(64):ans[j + P[i] - 1] = chr((ord(inp[j + i]) + S[i]) % 256)

ans = ''.join(ans)print(base64.b64encode(ans.encode('utf8')).decode('utf8'))# okay decompiling encode.pyc

Bên cạnh đó theo dõi tiếp file pcapng thì 2 thằng còn gửi qua một tin có dạng mã base64. Mà dựa theo đoạn code trên thì sẽ in ra chuỗi đc encode base64 nên ta đoán tin này là flag sau khi được encode
Giờ việc cần làm là dịch ngược đoạn code trên và tin nhắn này để đưa về flag. Decode
import random

import base64

P = [27, 35, 50, 11, 8, 20, 44, 30, 6, 1, 5,
2, 33, 16, 36, 64, 3, 61, 54, 25, 12, 21,
26, 10, 57, 53, 38, 56, 58, 37, 43,
17, 42, 47, 4, 14, 7, 46, 34, 19, 23,
40, 63, 18, 45, 60, 13, 15, 22, 9, 62,
51, 32, 55, 29, 24, 41, 39, 49, 52, 48,
28, 31, 59]S = [68, 172, 225, 210, 148, 172, 72, 38, 208,
227, 0, 240, 193, 67, 122, 108, 252, 57, 174,
197, 83, 236, 16, 226, 133, 94, 104, 228, 135,
251, 150, 52, 85, 56, 174, 105, 215, 251, 111,
77, 44, 116, 128, 196, 43, 210, 214, 203, 109,
65, 157, 222, 93, 74, 209, 50, 11, 172, 247, 111,
80, 143, 70, 89]

ans="Wmkvw680HDzDqMK6UBXChDXCtC7CosKmw7R9w7JLwr/CoT44UcKNwp7DllpPwo3DtsOID8OPTcOWwrzDpi3CtMOKw4PColrCpXUYRhXChMK9w6PDhxfDicOdwoAgwpgNw5/Cvw=="

ans=(base64.b64decode((ans.encode('utf8')))).decode('utf8')inp=['' for i in range(64)]

for i in range(64):

inp[i]= chr((ord(ans[P[i]-1])-S[i])%256)inp=''.join(inp)print inp


FLAG :
IceCTF{4Lw4y5_US3_5s1_AnD_n3VR4r_mAKe_Y0ur_0wN_cRyp70}



4 nhận xét: