CyberRebeatCTF Write-up
概要
2018/9/8 15:00 ~ 9/9 15:00 に開催されたCyberRebeatCTFのwrite-upです
チームGrowthKeysとして参加しました(お疲れさまでした~)
一時は8位くらいまで上昇しましたが、最終順位は24位、3432ptでした
CTFに誘われたのが1週間前なのでバイナリも暗号も何もわかりません、Webと競プロだけをやりました(いつもやってることと大して変わらないじゃん)
少し遅れて参加したところすでに半分くらい埋まっていたのでやることがほとんどありませんでした
全完していないのでまずは強い人たちのブログを見てください
https://shiho-elliptic.tumblr.com/post/177894007289/cyberrebeat-ctf-writeup
解法
White page(Web)
指定されたページに移動するとLOGINと書かれたボタンがぽつんとあります
idとpasswordを入力する欄が欲しいのでおもむろに開発者ツールを開きます(ChromeならF12です)
Elementsタブから要素を展開してみるとこうなります
style="visibility:hidden"
が悪さをしている気がするので右クリックからEdit attributeなりEdit as HTMLなりしてこれを消します
やったね
感想
それはそう
Visual Novels(Programming)
典型ナップザックDPらしいと聞いて見てみるとなるほどナップザックだ
入力が少し面倒なのでsplitでゴリゴリします(形式指定は桁の関係でバグりやすいので注意しましょう)
長さが与えられないので最後に'end'と手打ちします
W = int(input()) data = [] while True: s = input() if s != 'end': data.append(list(map(int, s.split(']')[0].split('[')[1].split(', ')))) else: break # print(data) n = int(len(data)) dp = [[0 for j in range(10010)] for i in range(1000)] for i in range(n): dp[0][i] = 0 for i in range(n): for w in range(W+1): if w >= data[i][0]: dp[i+1][w] = max(dp[i][w], dp[i][w-data[i][0]]+data[i][1]) else: dp[i+1][w] = dp[i][w] print(dp[n][W])
ncで自動実行する方法があるらしいのですが面倒なのでshellからコピペしました
感想
AtCoder400点易くらい?
picoCTFちょこっとやった時にncを触ってたのでよかった
Opening Movie(Misc)
- おもむろにConsoleを開きます
- 次のコードを叩きます
let i = 0; const ctfrun = () => { document.getElementsByTagName('button')[0].click(); i += 1; console.log(`clicked ${i} times!`); // 147秒だけど止まるのが怖いので setTimeout(ctfrun, 150000); } ctfrun();
- 12時間ほど待ちます
- flagが出てきます、やったね
想定解は他のブログを見てください(投げやり)
感想
24時間以内に終わるのは作問者の慈悲だなあと思いました(あるいはテスト不足)
感想
UploaderなりSignatureなり解きたかったです
Web触ってるのでセキュリティは身につけないといけないということを実感しました、ちょっとずつ精進していきたいです