プロジェクト

全般

プロフィール

CTF Writeup TMCTF2017 » 履歴 » バージョン 1

kanata, 2025/04/13 15:14

1 1 kanata
# CTF Writeup TMCTF2017
2
3
{{toc}}
4
5
# 結果&感想
6
7
Trend Micro CTF 2017 に、某チームで参加しました。
8
今年は善戦しましたよ!(国内10位以内)。二問解けました。
9
解けたけど、途中までチームの方が解いてくれたやつのオイシイ所だけ持っていった感じだったりします。
10
11
という訳で、解ってる部分のwriteupです。
12
13
Trend Micro CTF 2017 オンライン予選 ランキングページ
14
https://ctf.trendmicro.com/ranking.html
15
16
# Forensic 100
17
18
pcapのファイルが渡されます。
19
早速Wiresharkで読んでみるとこんな感じ。
20
21
![20170625_tmctf_forensic100.jpg](20170625_tmctf_forensic100.jpg)
22
23
DNS通信の羅列です。なんかメチャクチャなホスト名のAレコードを引っ張ってこようとしているように見えます。
24
25
## Malwareの通信を模している
26
27
どうやら、以下のマルウェアを模した通信のようです(チームの方が調査して教えてくれました)
28
29
遠隔操作ウイルスの制御にDNSプロトコルを使用する事案への注意喚起
30
https://www.lac.co.jp/lacwatch/alert/20160201_000310.html
31
32
{{rawhtml(<blockquote class="embedly-card"><h4><a href="https://www.lac.co.jp/lacwatch/alert/20160201_000310.html">遠隔操作ウイルスの制御にDNSプロトコルを使用する事案への注意喚起 | LAC WATCH | 株式会社ラック</a></h4><p>「遠隔操作ウイルスの制御にDNSプロトコルを使用する事案への注意喚起」のページです。ラックは、セキュリティ対策とシステム開発より培った技術と経験より、ITを活用する企業に対して技術情報の共有や、情報セキュリティやIT活用に対する提言などの有用な情報発信をします。</p></blockquote><script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script>)}}
33
34
> 余談ですが、一般的な企業の外部との通信環境として、DNSのログまで取らなかったり、DNS通信のためにファイアウォールのポートを開けてたりするので、通信の偽装方法としてはかなり賢いやり方かと思います。
35
36
そして、そのチームの方が、そのメチャクチャなホスト名を抜き出してくれます。
37
38
```
39
ASfsbGivEQsT2aQPHzaB
40
5GBJZEAWX7WJASGCg5Br
41
9TvJjPCj9kRW9fk5XU2b
42
rvAptS4tZnjLwCNsXn5N
43
9jUqipSo5xgNR6EM3Zpw
44
8kdhrsqDd3Gb5wSSPqKN
45
8wkw5kPRgi5ihJnGYxid
46
p7vfcECXgiGtisBnZiD9
47
C2kv3MzxMXGZiSgQpfmt
48
y3vYWgxkk9ygyqJcRDnD
49
PB2gk8K9SJFcKrPimJja
50
9REhmzgECtjmEMYVz5QY
51
tsHgSBzRBT8FbQx3mvpX
52
jEkoi86dM8n9eQuZ38wj
53
8Jvg2HSvjr8qyEtur3E5
54
vPfFiANqqbY4J4jbCyNr
55
UrJLW8fGVvr9mdAyAqpJ
56
sk8h9X8t1LtyXV2cMoxa
57
j2ELd8EoY3aGDatsba5m
58
VkNwpptkVumdo8sxXoYS
59
ta6fKKAC3MXfLVvkHYSs
60
Gs9fnyXPMgitffJ49xt4
61
oCxCHtyoWgytH6sudYPk
62
SypJUuCWfsS1R771e95R
63
eRvie3RgQjEwpVL4HsnC
64
EJeEEzPWVtJQpTcheGGB
65
sMzqMuR3y8eui2wU93H5
66
ZeDVauv4qQYPWdpub8Ys
67
J9X3mQCZ7B4XsdyTUSyT
68
goeboTbqpATAnuCDRzYn
69
pd6sQ5PggQBdoUYjABcP
70
HgUp34UmzHSGaRScoHzF
71
T8W51c8iY3X6uNCxRwnZ
72
LCx2C4PBwZN24wKWFAoL
73
vSTGaeVcxBQ3UHo9xpY5
74
HoHJaL1pPaxAhFhei73H
75
5k5doyAoKhvTdvNehEhJ
76
ocCoxRZKbBQP8f7cZgTm
77
CuD1ekRNQ6o7ZysnuDwf
78
vvmotn9Wap7DeGZGnS94
79
g7wUSB4B7VUcSEcT9G18
80
yYuKh8fjBAw9fJrrgZmZ
81
97FnKJWgXf9Ju9648DDB
82
gh534XrjqMLiBXFq2dnf
83
qmG845ndTuXSR1bMRpqp
84
jFeJN52D9KKKaYqTgoCq
85
o9Y1nt9pwahd3v1srMpj
86
VTPt46SH2RKU21ZfiqEN
87
of8hkgxxLTLtkWPRPJeB
88
9WSVGzALTZ3L8QVsq1uX
89
HwUKYkmjbX71Phrzfnhz
90
V5ffFCtjiuF1D4gtMY1c
91
f9ieUzKWF7voscgM2zcV
92
oiDdYCfpKJGrkzpDZB1c
93
QTPDZYyLbzZ9hE2B1RAw
94
V7e4NGuG8TPQmaXvet3r
95
Ze3Q7zZhmcdXhwbd8Et7
96
JZHcvidkLCb1JDrNe1dX
97
6fjddFonVfoMWNcAHLH5
98
BypDgNtAwK2JkABnkMAs
99
BQi16XaNToXzTC4Ug8UN
100
gyUfRjXrwzTYckVfE7Vo
101
e5kdwYLX4FQ12eQm3BbW
102
76tkfsZUUAm3gHHk3roT
103
CiQ8kNejjitLaRVhfeuG
104
yfMkotR8TVmYPGqEmcS1
105
qRMWJmigBwg7ZbG4hSDC
106
dSq83eKsFyig8A4EDsPF
107
XnGKAgUe1UYHvzahFBhn
108
eyhgmfdbheRAEAkMqVn5
109
PBmEhv7bC4aNUZ465Hus
110
2JpJF5L4tkfbJsAVmCrt
111
REhCuLhUqXqVmFBqknho
112
x2BfRQqAZMB6f4udU3Xo
113
U4qED1V5kEqA1qVGytjW
114
B2pQGbjuacAjf2C8n7QS
115
UTJhFsrmQp12sUE7WJ6w
116
tTg4bnjNDzyHbJSiVWhr
117
2EuES8qZbVFP5478HpVh
118
8dpCvz6DJJybAEfcsg76
119
pGLBatEMvjiHTC5LhdAf
120
PbQiePVedCjEQL21Pn6i
121
GLTPZfWqHVz3ZtkR4iDF
122
Zyn3L5ZGWjCJ3JgzCTRm
123
YeuXfW2XcNMipgv4c97i
124
8TAbL3m5rhV5ShtjBAqw
125
dfszh1erSpVDMuijNpo2
126
sC6czF2fq6mGMKe8hwWo
127
BwVt7sRaAYtp94AEw5AJ
128
HUdvfRzsQ7XBMQBMDHbp
129
mCkWortnVk1krAVUK8Mf
130
GQezUgvSmX6pBgXDrGkx
131
yNmWpQg8DeF5saQApGKM
132
zshqTmGrrJm7s4TYajBs
133
RKatfjKBLgto6YHd548A
134
LADReAEmymFbDg31U6dJ
135
Pp1XbHujeMe3z2QQqmft
136
Az2LRpfjz6Rh64cVRK6D
137
adBBsL9quZoiZB339vLD
138
Mx4xRRaU7N5NxSnPz4Zj
139
uYm4V2uUoTmA4jaS7atS
140
zbEBujiVf2wTz18ymbPF
141
apXrc53WNL9iYa7nqHUA
142
gvn1Bx9L5hadd5A97ss2
143
NhSPmwZGBu7rj2f43uwf
144
dGamzZpGxEascuGT48p9
145
wgm49Ck6QovrCj7g3KAZ
146
XEopDkmeReSRNkEipH2U
147
4V7Vim425LAJsghg1nqX
148
DRHx4QNAe9TKBiRYPw2w
149
PdPi9gWHPpnwHJyX896E
150
rCvXadRfQrEuushKthcn
151
vUyUXt8MZWcHLujDkKFq
152
hama3vxFTDH7N8QD5Kch
153
Nevv7KPDo95DagyyZHGy
154
LT7DKEusvJ8SZuodBEeW
155
wwJ1qfCMasEBBiPXov6h
156
UexhazHeJRTEVscjZ2bN
157
iScQs2YuqPnej26QShcr
158
wwyunJZu2S9yqo7i6Psf
159
pWXAmZcQ7Nba7QpAfaH4
160
NuGnhzUb9KcVZmJkfRzg
161
D3egFR9C79gQYybVMpd6
162
Kxz5xRzS4WAhLLdqwUFx
163
NBw3hUV7nMywSR6Cg2aj
164
nv61ZWVNgAofwXuthzfG
165
kAyae51WNWjtbtpCSEQL
166
PY1uTwWZ13bthQaoCeZ5
167
3nomwgWB4EBaimmu78qn
168
AquqjeCw73XK4UXGR61T
169
HLxgSiuGjRRcj6489cuW
170
fQ7gyU6ckPo6QL8cGPvH
171
j6CXJ4w8CakQMmwq7JGp
172
PToD826chKGtH5A2RKCk
173
Hc7NQA79MvHvXdtByDC4
174
iPaivSRmLXZa5W8vr4F7
175
JqbK8ghZcQJuSGWTaQwQ
176
jjABhkmWvDvs6HHyW3j8
177
XK6cPijnTVvCgDN63Nrm
178
suNkMCnbkiWRZfgu8pqc
179
kVze5LxGnVWPmtmnVv4u
180
nssrKhd1SBPU17vps76M
181
iHontgDCbfxtp9BZFt8E
182
YtZMUghzzxQxTKFGGg9b
183
L6eRrrFfjYx15E4GtAmZ
184
5wZA5oxE8atxtdaWc1qf
185
Q7wMMvzR8QHx5Xw7imGX
186
h4M58Kiknsw7urRDkitH
187
2EAxKPLsbp4eAERFFNT3
188
Vy6XdymAGGkok1KcM5EW
189
WSpdEjWJpdi36dYsXCTr
190
bLYqXuMFHViL5GP9HFJh
191
Mez6hsvcsscaLUUz3KhW
192
D9owzzczVAk8GzDkkrT1
193
Sqxs6oG3Q6isAHUAVYUb
194
iRaqm3AjSazJf5BsA6Xx
195
xc9LV25nKvTKjK6Q4UEX
196
WvMnEM5iKTmwWsoHvGB4
197
EnNNN34f9mfavgdTfG9W
198
ovwysP4AxHK4iHipuv5m
199
to1ugHG2vFgVafweSaFh
200
63qhYqEc9HHmJaFRJ8bS
201
JBLBEi9LKmsDCufc6u6F
202
QCshYApRFKKGYWEgMaWA
203
BHSLEfwA8KrZyF2Whbyu
204
NiskF6RWVJMpBX2g7oqU
205
j3W73H4E5ybHUqQx5HeK
206
pPgDFSxRMtVCee8U5KmU
207
XDPDFHEY9ayoDGE3P6UM
208
Mu6u4GPwMxoT8r2hKrZi
209
gMvngG5ujwKm5FCX1DQN
210
PAdzTtQPMuVfNSq5YL8n
211
jRpT1UFDWFV6PQ616hX3
212
92iTiMQbNN41VgKE1Zp5
213
4qG3nYK6DJCG1yssE71H
214
xYudvTV2vRdx4kLQvMLc
215
7UPfCfjswRxptxyffRcM
216
NV4fpnSXHKVKVNo7rnmb
217
ZjyAgQmNiA4tG2yaVLqK
218
Q6mdzH914mH7inV9keb4
219
evbazKxFhumbhtKr4YAm
220
7VqUxTiwGrqcsdg9XwHu
221
wZG69BmoRkhJhVFRkxe2
222
qSQGrk6qGMP4MPKYZXzC
223
JEU14sq3rGEU23avuKUj
224
CPcEVcMboGvjH6N7TG8z
225
gQmnhrXaDQVqQ6dBiGwg
226
3eESUiXFQxZLZFecXiu1
227
gHG7p75QCedSV5EEwdpy
228
EL1rJWTji8WvAKDGpkqX
229
KDxJPQW78DmTtdVDNWgE
230
VqkBRKp4HiYcSV3WZ71v
231
pm6LzkEW7UyoQnF3AfcV
232
uFp4ogxeA9vPzZ3LoVFS
233
ts9CYgPxJW8i2KpUW1bP
234
itDsYqqr6tK3wvLW3CWd
235
zWrDWowzgSoFHZQ6EqiL
236
pfVbfuvj5FyURHsmDecG
237
FnnAdBFckx6hJeuagNNb
238
K4iyT9KfPDUPoGXprsGc
239
peVY9SRU3nMVjuFB22zi
240
qZxPwASjebDepePoe3Lb
241
TDwK8XFTx8JaKr5xXyGk
242
w7cqBCzvhVWQvkRjyWhF
243
YmfRc3S2814fatrghk9C
244
phAcHkLfNhvU9yUmsDmw
245
WpUXQH9ZnxUPRDVN3oEJ
246
hvG5ptZF9YJtSQdKATni
247
f7Ut2tis18xaKdiARRi2
248
cQiD1GTtd7NFtq9TxNmL
249
7C2vQNGneNpGJPWb9mZM
250
G3g4CCHaunsKyXExXL9y
251
EjBwHq6H9unt9wAiCGVH
252
32mvVRZbLMF4CpWRiqW8
253
nVqCx4PpCdopakRUqZfX
254
2iEJ4UKtU4CEYUMH23sB
255
2XSeveHgoNtTZvaziunD
256
XHMHSTJe3VKYRy4JQSs3
257
W3xe3apFCkwS33mea2gf
258
giqwhGTifa2QAjgGsdae
259
1RejMC5dqWjAMfXMmC6m
260
A3b5DEDZAP5XgJqi6vZM
261
Sho8CNWQAZ1xD2RKGyCr
262
8gCx1zsfpuL5ffFmzC7K
263
rzZ9ZxoWRHrnWmS9E5rs
264
gtGRn5kMtVe8jnYXZeoV
265
xYt7uvFeLjXRfmaDXt7S
266
mD5pz9nNwXTqZ1WhUN74
267
3CFUCeMD2ZFpT68gme2T
268
iT17Fhwuh1EQekVwxDrQ
269
sTD2tRh3PHRatw49h9vi
270
4FUyNnh3BJwuq9UykbJ7
271
kq9faJQxuJiwxWRUBD9T
272
K9G9dBn1AhcDwogPyqU3
273
rFneZ37FL56NvaPXgVLX
274
7d2wY7JbrzuY3SHhjECW
275
yFWGBSpGurNmCUFf4a9b
276
LvH8xnKXyPpLjNyBcsPT
277
aXET3299mhHaXKTpBApD
278
bukmRnpMkwqUJyQAvhxq
279
iDRkrZTfKYws43sfzfab
280
xEEWL6uaSZLTjze8avxq
281
tDemvaPgjfMcfvqvjz66
282
UAnraPLbymzo9PL5imY2
283
6LPinAGSJi6q3oSPAvYg
284
boMWbDWrNbsS56v64KBa
285
iLS28qQWdL5t3ADvL5eC
286
R1EDEDzx74zYL3WVNcJe
287
nBQFprxj7U4hzDm22edM
288
xLpR5daeYKmKtTcjEanU
289
Lv6obrrXW5JWbEoKn4qG
290
patrf76fKwKMZnvwxUhz
291
3iSLkfZQLgQoJHWvzVCR
292
E7e7GmJwgLPri45ctU4W
293
NuN72W8UyWzGTK
294
```
295
296
ぱっと見、Base64っぽいので、デコードしてみますが、なんかよく解らないバイナリの値になりました。
297
よく見るとBase64で使われるはずの +/ が見当たりません。なんの文字が使われているかちょっと確認してみましょう。
298
シェル芸が光ります。
299
300
```bash
301
$ cat file5_dns.txt|grep -o .|sort|uniq|xargs|tr -d ' '
302
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
303
```
304
305
## Base ? encoding
306
307
数字・英大文字・英小文字・記号は無し
308
という事が解ります。
309
310
Base64ではなくて、他のエンコーディング形式かもしれません。
311
予め、以下にまとめてあるので確認してみます。
312
313
raintrees.net - CTF Crypto - Base N encoding
314
https://raintrees.net/projects/a-painter-and-a-black-cat/wiki/CTF_Crypto#Base-N-encoding
315
316
以下、抜粋
317
318
| 方式   | 使用される文字                                       | 参考 |
319
|--------|------------------------------------------------------|------|
320
| Base58 | 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz | Bitcoinに利用
321
| Base62 | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 | JavaScriptの難読化等
322
323
この特徴に合致しそうなのが、Base58とBase62であることが解ります。なんというマニアックなエンコード方式w
324
325
使われている文字をもう一度確認してみましょう。
326
327
```
328
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
329
```
330
331
数字 0 英大文字 I O 英小文字 l が見当たりませんね。実はこれ、Base58の特徴と合致します。
332
333
>Base58は、Bitcoinに利用されているエンコーディング方式で、数字として間違えやすい0OやIlを意図的に除外しているそうです(知らんけど)
334
335
## Base58によるdecode
336
337
そんな訳でBase58でデコードしてみます。
338
ググると以下が使えそうなことが解りました。
339
340
https://asecuritysite.com/encryption/base58
341
342
後は、やるだけ。以下、ソルバ。
343
344
```python
345
import sys
346
347
val='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'
348
349
from hashlib import sha256
350
351
# 58 character alphabet used
352
alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
353
354
355
if bytes == str:  # python2
356
    iseq = lambda s: map(ord, s)
357
    bseq = lambda s: ''.join(map(chr, s))
358
    buffer = lambda s: s
359
360
def b58encode(v):
361
362
    origlen = len(v)
363
    v = v.lstrip(b'\0')
364
    newlen = len(v)
365
366
    p, acc = 1, 0
367
    for c in iseq(v[::-1]):
368
        acc += p * c
369
        p = p << 8
370
371
    result = ''
372
    while acc > 0:
373
        acc, mod = divmod(acc, 58)
374
        result += alphabet[mod]
375
376
    return (result + alphabet[0] * (origlen - newlen))[::-1]
377
378
379
def b58decode(v):
380
381
    if not isinstance(v, str):
382
        v = v.decode('ascii')
383
384
    origlen = len(v)
385
    v = v.lstrip(alphabet[0])
386
    newlen = len(v)
387
388
    p, acc = 1, 0
389
    for c in v[::-1]:
390
        acc += p * alphabet.index(c)
391
        p *= 58
392
393
    result = []
394
    while acc > 0:
395
        acc, mod = divmod(acc, 256)
396
        result.append(mod)
397
398
    return (bseq(result) + b'\0' * (origlen - newlen))[::-1]
399
400
print 'Input:\t',val
401
print 'Base58:\t',b58decode(val)
402
```
403
404
で、以下がフラグ
405
406
```
407
出力結果、中略
408
409
410
411
TMCTF{DNSTunnelExfil}
412
```
413
414
# Analysis-Defensive 200
415
416
なんかzipファイルを渡され、中身はdataというバイナリファイルと、q.jpgというテキストファイルが入っています。
417
418
q.jpg(中身はrubyのソースコードかな?)
419
420
```ruby
421
function rc4 {
422
    please implement it yourself.
423
}
424
425
function md5($txt){
426
    please implement it yourself.
427
}
428
429
function invoke-Encryption{
430
    $FileName = "ZGF0YQ=="
431
    $FileBase64Data = ????????
432
    [Byte[]] $FileBinByte = [Byte[]][Convert]::FromBase64String($FileBase64Data)
433
    [Byte[]] $FileNameByte = [Byte[]][Convert]::FromBase64String($FileName)
434
    $enc = [System.Text.Encoding]::ASCII
435
    $key = "Y2hjaGVz"
436
    $key1 = [System.Convert]::FromBase64String($key)
437
    $key1 = [System.Text.Encoding]::UTF8.GetString($key1)
438
    $key1 = md5($key1)
439
    $key1 = $key1.Substring(8,16)
440
    [Byte[]]$key1 = $enc.GetBytes($key1)
441
    [Byte[]]$key2 = [Byte[]][Convert]::FromBase64String($key)
442
    $FileBinByte = $key2 + $FileBinByte
443
    $FileBinByte = rc4 $FileBinByte $key1
444
    $tempFile=[System.Text.Encoding]::Default.GetString($FileNameByte);
445
    if($tempFile.Length -ne 0){
446
        if($FileBinByte.Length -ne 0){
447
            if(Test-Path "$tempFile"){rm "$tempFile"}
448
            $fs=New-Object System.IO.FileStream($tempFile,[System.IO.FileMode]::CreateNew)
449
            $fs.Write($FileBinByte,0,$FileBinByte.Length)
450
            $fs.Close()
451
        }
452
453
    }
454
}
455
invoke-Encryption
456
```
457
458
実装してねという事かと思いますが、チームメイトのcatさんがやってくれました。
459
ほんと天才やでぇ。
460
461
で、中身はpcapファイルでした。
462
463
![20170625_tmctf_analysis-defensive200.jpg](20170625_tmctf_analysis-defensive200.jpg)
464
465
怪しげなcookieの値があるのが解ります。
466
467
```
468
asdf=d01J5ln6eJxopAgX2SgmLRYGt5X70XRw4HL6sFoDbvWD5yQ%3D;
469
qwer=fJDeRjsja7z8wcPVLrZzm6jYl3UsvQC9AoduZgL24n1NYs8%3D;
470
zxcv=%2Fvox%2Bi3on9Iy1U%2B2itypfjagJ06762d9yfkxI%2FLgSq3a2PJXwdnQ8BhDI9ofW9HXXSQMaEXBkYdrun%2BF%2BxIi3a%2B3TvHY
471
```
472
473
## cookieの値で通信内容を偽装するMalware
474
475
なんでしょうねコレ・・・。ふと、マルウェアの通信で使ってるんじゃないかと気づき(だって、DNSで偽装通信してるくらいだしね)
476
ちょっと調べてみました。
477
478
ありました。
479
480
Cookieヘッダーを用いてC&CサーバとやりとりするマルウエアChChes(2017-01-26)
481
https://www.jpcert.or.jp/magazine/acreport-ChChes.html
482
483
{{rawhtml(<blockquote class="embedly-card"><h4><a href="https://www.jpcert.or.jp/magazine/acreport-ChChes.html">Cookieヘッダーを用いてC&CサーバとやりとりするマルウエアChChes(2017-01-26)</a></h4><p>Cookieヘッダーを用いてC&CサーバとやりとりするマルウエアChChes(2017-01-26)</p></blockquote><script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script>)}}
484
485
>ちなみに、問題文には、 xiangqi とだけ書いてありました。xiangqi は「中国の将棋」の意味らしいです。ChChesと合致しますね。
486
487
488
なんか、このページには、この怪しげなクッキーから通信内容を復号化するソースコードまで書かれています。
489
490
## ソルバ
491
492
後は・・・やるだけ!ではないです。URLエンコーディングされている箇所があるので、そこだけ置換します。
493
494
```
495
%3D → =
496
%2F → /
497
%2B → +
498
```
499
500
```python
501
from Crypto.Cipher import ARC4
502
import hashlib
503
504
cookie_data="asdf=d01J5ln6eJxopAgX2SgmLRYGt5X70XRw4HL6sFoDbvWD5yQ=;qwer=fJDeRjsja7z8wcPVLrZzm6jYl3UsvQC9AoduZgL24n1NYs8=;zxcv=/vox+i3on9Iy1U+2itypfjagJ06762d9yfkxI/LgSq3a2PJXwdnQ8BhDI9ofW9HXXSQMaEXBkYdrun+F+xIi3a+3TvHY"
505
data_list = cookie_data.split(';')
506
dec = []
507
for i in range(len(data_list)):
508
    tmp = data_list[i]
509
    pos = tmp.find("=")
510
    key = tmp[0:pos]
511
    val = tmp[pos:]
512
    md5 = hashlib.md5()
513
    md5.update(key)
514
    rc4key = md5.hexdigest()[8:24]
515
    rc4 = ARC4.new(rc4key)
516
    dec.append(rc4.decrypt(val.decode("base64"))[len(key):])
517
print("[*] decoded: " + "".join(dec))
518
```
519
520
実行結果
521
522
```
523
[*] decoded: AWIN7-PC*1234*TMCTF{e3526984696bc9f89ac88d4f72abe24}?361846839?C:\Users\win7\AppData\Local\Temp?1.7.3 (1024x768)*6.1.7601.17514
524
```