やむなく日記

競プロやCTF、ゲームなどの日記を書きます

SECCON Beginnersに参加した

2017.seccon.jp

結果

4問解けた

f:id:yamunaku:20180527124224p:plain

Reversingはバイナリ解析ソフトをインストールする気力がなかったし、Pwnは未知の領域なのでできない

以下、各問題の解き方

 

 

[Warmup] Greeting

f:id:yamunaku:20180527124501p:plain

こんな感じのページがでてくる

サーバは下のPHPコードに沿って動いてるようなのでこのコードの脆弱性を突きたい

htmlタグに入った時点で$usernameの値が"admin"じゃないとflagを表示してくれないので、それより上で$usernameの値を設定したい

ページ上のフォームによるPOST送信で値を"admin"に設定しようとすると"偽管理者"になってしまうのでダメ

他の設定方法を探す

よく見るとPOST送信をしないときは、$usernameをcookieから取得しているみたい

この場合は"admin"に設定しても"偽管理者"になることはない

 cookieをつくろう

適当なcookie管理アドオンなどを導入したあと、サーバが作ってくれたcookieを書き換える

値をname=adminに設定し、有効期限をいい感じに延ばせばよい

あとはPOST送信をしないでページを閲覧すればいいので、F5を押してページを更新するとフラグが出てくる

 

 

[Warmup] Veni, vidi, vici

タイトルの元ネタはカエサル(シーザー)

シーザー暗号を使いそう

(それぞれの文字を決まった数だけずらすやつ、3つずらすならA→D,B→E,C→F,D→Gといったように)

3つのファイルが渡される

1つめと2つめはアルファベットの部分をシーザー暗号で戻す

3つめは180度回転したような文字が書かれているので頑張って読む

3つのファイルのフラグの情報をつなげればフラグが復元できる

 

 

[Warmup] Welcome

ルールに載っている公式IRCチャンネルに入るとフラグを教えてくれる

 

 

Gimme your comment

とある架空webサービスのURLが与えられる

記事を打ち込むと向こうの社員がブラウザで閲覧してコメントをつけてくれるので、社員が使っているブラウザの種類を特定しようという問題

f:id:yamunaku:20180527130819p:plainf:id:yamunaku:20180527130827p:plainf:id:yamunaku:20180527130833p:plain

本文に <script>alert();</script> と打ち込むとアラートがでた

これは、入力された文字列をそのままページに入れ込むと、ブラウザがその文字列をHTMLコードの一部と勘違いして、<script>タグ内部のjavascriptを実行してしまうことで起きる現象(やばい)

社員が使っているブラウザでも同じことが起きてるみたいなので、これを利用して種類を特定する

javascriptの仕様をググってみると、window.navigator.userAgent がブラウザの名前を保持しているらしい

相手のこの値を僕に伝えてくれればいいので、どうやって僕に送るか考える

送り方

①僕が保有しているサーバに何らかのメッセージを送る

僕のサーバがwebサーバのときで、相手のブラウザを僕のwebページに遷移させることをXSS(クロスサイトスクリプティング)という らしい

②このサービスを直接利用して僕のブラウザにメッセージを送る

 

①と②を比べると、②のほうが圧倒的に楽なので②を使いたい

もしこのサービスが他者のwindow.navigator.userAgentのような値を表示することを禁止していると、①を使うしかないけど、ひとまずやってみよう

 

このようなコードを送った

f:id:yamunaku:20180527133617p:plain

getElementsByClassNameでほしいHTML要素のクラスを指定していい感じに操作をさせる

window.onloadは、値として入れられた関数を、ページをすべて読み終わった後に実行する変数らしく、これを追加しないと、このスクリプトが読み込まれた以前のHTML要素しか扱えない。今回扱いたいinputとbuttonは、HTMLコード上ではスクリプトの後に配置されるので、window.onloadの部分は必要になる

結果はこう

f:id:yamunaku:20180527133755p:plain

僕も巻き添えを食らったけどflagがゲットできた

ページを閉じない限り止まらないので、スクショを撮って手で打ち込んだ