この大会は2016/7/16 9:00(JST)~2016/8/15 9:00(JST)に開催されました。
個人戦の大会ですが、順位とか点数とかがよくわからない大会でした。
解けた問題をWriteupとして書いておきます。
unix tier level 1
perlのスクリプトで、スクリプトコードやデータがBase64エンコードされている。それぞれデコードするスクリプトを作成する。
key_begin = '. MIME::Base64::decode' key_begin_e = 'eval MIME::Base64::decode' key_end = '")' def decode(a, data): index = 0 while True: i_begin = data.find(key_begin, index) if i_begin < 0: break i_end = data.find(key_end, i_begin) enc = data[i_begin + 24:i_end] a += enc.decode('base64') index = i_end i_begin = data.find(key_begin_e) if i_begin < 0: return a, "" i_end = data.find(key_end, i_begin) e_data = data[i_begin + 27:i_end].decode('base64') return a, e_data with open('bowie.pl', 'r') as f: data = f.read() a = '' while True: a, e_data = decode(a, data) if e_data == "": break data = e_data with open('flag.gif', 'wb') as f: f.write(a) print data
実行すると、gifファイルが生成され、フラグが埋め込まれている。
PAN{L3ts_533_h0W_U_deal_w_th1s_little_511CE}
threat tier level 1
GETのアクセス先URLの文字列がフラグに関係ありそう。Base64文字列になっているので、いろいろ試してみる。
/[A].php?[B]&L4bry1nth_(数字)?[C]-<***>の形式。
[A]をBASE64デコードすると2桁数値
[C]+[B]をBASE64デコードするとよくわからないデータ。
ASCIIアートの一部かもしれない。
[A]のデコードした数値の順に[C]+[B]のデコードしたものを並べるスクリプトを書く。
from scapy.all import * import base64 import re pattern = 'GET /(.{4})\.php\?(.+)&L4bry1nth_.+\?(.+)-.+' packets = rdpcap('dopefish_labyrinth.pcap') d = {} for p in packets: if p['TCP'].dport == 80: l = p['Raw'].load m = re.match(pattern, l) p1 = m.group(1) p2 = m.group(2)[::-1] p3 = m.group(3)[::-1] id = base64.b64decode(p1).replace('\n', '') data = base64.b64decode(p3 + p2).replace('\n', '') d[id] = data for key, val in sorted(d.items()): print val
これを実行すると、魚のようなASCIIアートが出来上がる。
317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW 317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317W.317.;317;;317;;317.W317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW 317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317W.317;;317;;317;;317;W317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW 317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317;;317;;317;;317;;317;W317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317W.317.W317WW317WW317WW317WW317WW317WW317WW 317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317W.317;;317;;317;;317;;317.W317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317..317;;317.W317WW317WW317WW317WW317WW 317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317W.317..317;;317;.317..317..317..317;;317..317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317.;317;.317.W317WW317WW317WW317WW 317WW317WW317WW317WW317WW317WW317WW317WW317..317.;317;;317;;317P;317;;317;;317;;317;;317;;317;;317;;317;.317.W317WW317WW317WW317WW317WW317WW317WW317WW317WW317W.317;;317;.317WW317WW317WW317WW 317WW317WW317WW317WW317WW317WW317WW317.;317;;317;;317;;317;;317;A317;;317;;317;;317;;317;;317;;317;;317;;317;;317..317WW317WW317WW317WW317WW317WW317WW317WW317W.317;;317;;317..317WW317WW317WW 317WW317WW317WW317WW317WW317W;317;;317;;317;;317;;317;;317;;317;;317N;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317.W317WW317WW317WW317WW317WW317WW317W.317;;317;;317;.317.W317WW317WW 317WW317WW317WW317WW317W.317;;317;;317;;317;;317;;317;;317;;317;;317;{317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317.W317WW317WW317WW317WW317WW317W.317;;317;;317;;317..317WW317WW 317WW317WW317WW317W.317..317.;317;;317;;317;;317;;317;;317;;317;;317;;317t;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;.317WW317WW317WW317WW317WW317.;317;;317;;317;;317;.317.W317WW 317WW317WW317W.317WW317W.317.W317WW317WV317..317;;317;;317;;317;;317;;317;h317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;+317..317WW317WW317WW317W.317;;317;;317;;317;;317;.317.W317WW 317WW317W.317WW317WW317WW317WW317WW317WW317WW317WW317;;317;;317;;317;;317;;3173;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;.317.W317WW317W.317;;317;;317;;317;;317;;317;.317.W317WW 317WW317.V317W.317..317..317.W317WW317WW317WW317WW317.;317;;317;;317;;317;;317;D317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;.317..317.;317;;317;;317;;317;;317;;317..317WW317WW 317WW317.W317W.317..317..317.W317WW317WW317WW317WW317W.317;;317;;317;;317;;317;;3170;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;.317.W317WW317WW 317WW317..317WW317W.317..317..317WW317WW317WW317WW317V.317;;317;;317;;317..317.;317;p317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317..317WW317WW317WW317WW 317WW317.;317.W317.W317WW317WW317WW317WW317WW317WW317.;317;;317;;317;;317;.317.;317;;3173;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;.317WW317WW317WW317WW 317WW317..317.;317.V317W.317.W317WW317WW317WW317W.317;.317.;317;;317;;317;.317.;317;;317;f317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317..317WW317WW317WW 317WW317W.317..317..317.;317;;317..317..317..317;;317;;317;;317..317;;317;.317.;317;;317;;317s;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;.317.W317WW317WW 317WW317W.317WW317.V317V.317..317..317..317..317..317..317..317;;317;;317;.317.;317;;317;;317;h317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317..317WW317WW 317WW317W.317WW317.W317WW317WV317.;317;;317;;317;.317;.317..317.;317;;317..317.;317;;317;;317;;317l;317;;317;;317;;317;;317;;317;;317;;317;.317..317.;317;;317;;317;;317;;317;;317..317WW317WW 317WW317W.317WW317.W317WW317WV317..317..317;;317;;317;;317;.317.;317;;317..317;;317;;317;;317;;317;1317;;317;;317;;317;;317;;317;;317;.317.W317WW317W.317.;317;;317;;317;;317;;317..317WW317WW 317WW317W.317WW317.W317WW317WV317.;317;;317;;317;.317;;317;;317.;317;;317;;317;;317;;317;;317;;317;;317v;317;;317;;317..317;;317..317..317WW317WW317WW317..317;;317;;317;;317;;317..317WW317WW 317WW317W.317WW317.W317WW317WV317..317..317.;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;3317.;317;;317;.317..317.W317WW317WW317WW317WW317WW317.;317;;317;;317;.317.W317WW317WW 317WW317W.317WW317.W317WW317WV317.;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317s;317;.317..317..317WW317WW317WW317WW317WW317WW317.;317;;317;;317;.317.W317WW317WW 317WW317W.317..317.W317WW317WV317..317;;317;;317;;317;.317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317.}317..317..317WW317WW317WW317WW317WW317WW317WW317.;317;;317;;317..317WW317WW317WW 317WW317WW317WW317W.317..317WV317.W317W.317..317..317.+317;;317;;317;;317;;317;;317;;317;;317;;317;;317;;317;.317..317WW317WW317WW317WW317WW317WW317WW317W.317;;317;;317;;317.W317WW317WW317WW 317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317W.317.;317;;317;;317;;317;;317;;317;;317;;317;;317..317.W317WW317WW317WW317WW317WW317WW317WW317WW317W.317;;317;.317.W317WW317WW317WW317WW 317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317..317;;317;;317;;317;;317;.317..317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317.;317;.317WW317WW317WW317WW317WW317WW 317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW317WW
このアスキーアートの中に斜めにフラグが入っている。
PAN{th3D0p3fshl1v3s}
docs tier level 1
デバッグしながら実行すると、以下のURLにGETでアクセスしていることがわかる。
http://10.1.33.7/b64/x58/MDgxOTE2MjMwZTMxMDIzMTNhNjk2YjA3NjgzNjM0MjE2YTJjMzA2ODJiNmIwNzBmMzA2ODA3MTMz\nNjY4MmYwNzJmMzA2YjJhNmI2YTM0Njg2ODMzMjU=/evil.exe
でも実際にアクセスしても接続することはできない。URLのパスをヒントにして、まず以下の部分を "\n" は改行に変え、Base64デコードする。
MDgxOTE2MjMwZTMxMDIzMTNhNjk2YjA3NjgzNjM0MjE2YTJjMzA2ODJiNmIwNzBmMzA2ODA3MTMz\nNjY4MmYwNzJmMzA2YjJhNmI2YTM0Njg2ODMzMjU= →081916230e3102313a696b07683634216a2c30682b6b070f3068071336682f072f306b2a6b6a3468683325
さらに0x58とXORをとり、ASCIIコードとして文字に変換する。
enc = '081916230e3102313a696b07683634216a2c30682b6b070f3068071336682f072f306b2a6b6a3468683325' key = 0x58 dec = '' for i in range(0, len(enc), 2): code = int(enc[i:i+2], 16) dec += chr(code ^ key) print dec
PAN{ViZib13_0nly2th0s3_Wh0_Kn0w_wh3r32l00k}
docs tier level 2
マクロを参照しようとしたが、パスワードがかかっている。https://home.ayra.ch/unlock/でパスワードを解除した後、マクロのUserForm1のコードを見る。
Private Sub button_Click() x = suchcrypto(key.Text, "General Vidal") If x = "171,184,42,184,88,26,47,154,20,219,203,130,52,19,180,214,156,94,186,74,30,248,119,235,139,130,175,141,179,197,8,204,252," Then MsgBox "Wow. Good Job! Such crack." Else MsgBox "U can do. Try harder..." End If End Sub Function suchcrypto(sMessage, strKey) Dim kLen, x, y, i, j, temp Dim s(256), k(256) kLen = Len(strKey) For i = 0 To 255 s(i) = i k(i) = Asc(Mid(strKey, (i Mod kLen) + 1, 1)) Next j = 0 For i = 0 To 255 j = (j + k(i) + s(i)) Mod 256 temp = s(i) s(i) = s(j) s(j) = temp Next x = 0 y = 0 For i = 1 To 3072 x = (x + 1) Mod 256 y = (y + s(x)) Mod 256 temp = s(x) s(x) = s(y) s(y) = temp Next For i = 1 To Len(sMessage) x = (x + 1) Mod 256 y = (y + s(x)) Mod 256 temp = s(x) s(x) = s(y) s(y) = temp suchcrypto = suchcrypto & (s((s(x) + s(y)) Mod 256) Xor Asc(Mid(sMessage, i, 1))) & "," Next End Function Private Sub UserForm_Click() End Sub
途中までそのまま計算し、計算結果とIf文のチェックの内容とをXORで元に戻していく。
strKey = 'General Vidal' strCode = '171,184,42,184,88,26,47,154,20,219,203,130,52,19,180,214,156,94,186,74,30,248,119,235,139,130,175,141,179,197,8,204,252,' kLen = len(strKey) s = [] k = [] for i in range(256): s.append(i) pos = i % kLen k.append(ord(strKey[pos:pos+1])) j = 0 for i in range(256): j = (j + k[i] + s[i]) % 256 s[i], s[j] = s[j], s[i] x = 0 y = 0 for i in range(1, 3073): x = (x + 1) % 256 y = (y + s[x]) % 256 s[x], s[y] = s[y], s[x] codes = strCode[:-1].split(',') sMessage = '' for i in range(1, len(codes) + 1): x = (x + 1) % 256 y = (y + s[x]) % 256 s[x], s[y] = s[y], s[x] pos = (s[x] + s[y]) % 256 sMessage += chr(s[pos] ^ int(codes[i - 1])) print sMessage
PAN{L4$t_Night_@f@iry_Vizited_M3}
docs tier level 3
PDF Stream Dumperで見ようとしても見ることができない。どうやら壊れているようだ。https://www.pdf-online.com/osa/repair.aspx で修復し、修復したファイルをPDF Stream Dumperで見る。赤で表示されている「10 HLen: 0x189」のところを見ると、フラグが入っていた。
<< /JS ty.i.f.(.e.v.e.n.t...v.a.l.u.e.=.=.".P.A.N.{.g.0.o.b.y.g.o.0.b.y.d.0.0.w.h.3.r.3.r.u.?.}.".).{.a.p.p...a.l.e.r.t.(.".y.e.s.".).;.}.e.l.s.e.{.a.p.p...a.l.e.r.t.(.".n.o.".).;.}. /S /JavaScript /Type /Action >>
PAN{g0obygo0byd00wh3r3ru?}