blogのネタは出るものの 自分が怠惰だとか調べる暇ない とかでずっと更新してなかった。
今回は奈良高専のinsecure(@theoldmoon0602氏,@kyumina8376氏,@thrust2099氏,@miwpayou0808(わたし)の四人)というチームでKOSEN セキュリティ・コンテストに出た話。
10/21と22に渡りJeopady×22+KoH(King of Hill)×2を解く形式のCTF。KoHは30pts./10minで点数が入る。問題一覧は下図。
@theoldmoon0602氏がKoHをやってくれたり、@kyumina8379氏がWeak RSAを解いて数学マシーンになったり、@thrust2099氏がネットワークスペシャリストの勉強を利用してパケット読み取りマンになってくれたりしたおかげでinsecureは見事 1位 を獲得することができた。
これによりinsecureは今年もSECCON2017決勝大会に参加させていただけることになりExploit頑張らなきゃ感(去年のSECCON決勝ではExploitによるKoHメインだったが全然歯が立たなずJeopardyだけ解いて帰った)が増えた。
Write-ups
簡単な分をやってKoHとかは手伝いをやった感じ。風邪とかいろいろあってあんまり効率が出なかった感。2日目は死んでた。
とりあえず自力で(?)解いた分だけ記載。残りは他のチームメイトをあたってほしい。
こうしてWrite-upを書くと自分がいかに解いてなかったがわかって辛い。
あとCrypto.Homomorphic EncryptionのWrite-upを誰か書いてほしい。
Misc.素数を数えろ
7桁で最大の素数を答えるだけ。素数一覧で検索すれば数分でいける。
Misc.諜報機関は基本?
情報セキュリティの3要素とは。という問い。@theoldmoon0602氏が答えを言ってくれたけど検索すればみつかった。
この答え、twitterにあったらしい。情報戦に初めて立ち会った瞬間であった(完)。
Misc.君(脆弱性)の名は
脆弱性の名前は何か。とともにいくつかのCVEを投げてくる。 CVEはCVE-2017-13077からCVE-2017-13088まで順番に出てくる。
流行りのアレ。これは余談だけど自分は誰かがtweetしてた"有線NYAN"が好きなのでslackのstatusに採用してる。
Binary.ファイル名を探せ
フラグは簡単だ。ファイル名に隠した。と言われファイルをDLして解凍するとxor.pngとmasks.pngが出て来る。
2枚をGIMPに投げつけるとあっさりフラグの文字列が浮かんでくる。
これ圧縮ファイルを既知平文攻撃して回収するかという話があったけど、実はpassもなんにも掛かってなかったので問題違いか勘違いかあるいはその両方だった。
Binary.ボスを倒せ
ncすると名前を訊かれたあとplayerとbossでHPを減らし合うゲームが開始される。問題文に「とあるゲームを見つけたが、ボスがあまりにも強すぎて一切倒せそうにない。」とあるように通常では倒せないようになっている。
名前を訊かれる所で"1"を50個ぐらい突っ込んでやるとやたらHPが増えてplayer,bossともに825307441とかになる。
それでバイナリこそ与えられてないものの典型的なBuffer OverFlowだと思いいくつ突っ込めばいいかなと思い以下のスクリプトを作成。pwntools入れるのにやたら時間かかったりncできなくなったりして無駄に時間食った。
最終的に21個"1"を突っ込んだ所でbossのHPが49(これは"1"のasciiコードを10進に直したもの)になりそのままゲームを続行することで勝利したところでフラグがprintされた。
せっかくだからバイナリくれて解析する、ってパターンでもよかったのになあと思った。
#coding=utf-8
from pwn import *
for i in range(100):
payload = ""
sock = remote("score.kosensc2017.tech", 40051)
sock.recvuntil("Input your name: ")
payload += "1"*i
print("payload:A*"+str(i))
sock.sendline(payload)
sock.stream()
VPNとproxyを構築してしまった
この大会、オンサイト参加とオンライン参加の両方を実現するためにVPNを利用したようなのだけど、接続元IPでフィルタ掛かってると思い(実はそれは去年だけの話で、今年はなかった)、1日目と2日目の間に奈良高専会場である情報処理研究会のサーバと自前のVPS(このサイトのサーバ)をproxy越しにVPNに繋ぐ構成ができないかと漁ったが最後大会が終わった。
構成は以下。
client -> joken.nara-k.ac.jp(Proxy) -> vpn.kosensc2017.tech(VPN)
-> miwpayou0808.info(VPN)
Proxyはsquidを使用した。yumで入れてconf書いてsystemdでservice起こすだけ。
confは以下を参考にした。
- https://qiita.com/tosier/items/30297afb6ffbd4567eb5
- https://qiita.com/pcnikki/items/404329f9ad9cb6e235d4
VPNはここにそのままあったので使った。ブリッジ設定は上手く行かなかったのでなしにした。
さいごに
- 運営の皆さん、ぼくがArch LinuxでVPNに接続できるまで待っていただけてありがとうございました。そしてすみませんでした。
- チームメイト達に感謝。決勝のときは体調不良じゃないようにしたいです。
- 休日出勤の多い弊学の御方にも感謝。