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 |  |
||
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 |  |
||
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 | ``` |