totoridipjp API 1.1について

取り急ぎmikutter本で書いた内容についての訂正及び補足です。

APIのエンドポイントにブラウザでアクセスするとXMLが出ることがありますがHTTPのAcceptヘッダに指定されたMIMEの内容を返すようになっているためです。

何も指定しない場合はJSONで返りますし、?format=json等のオプションでオーバーライドできます。

2015/12/31 10:19現在でめっちゃ適当にデプロイしてるので落ちたりしたら許して

----- 2015/12/31 10:44追記 -----

現時点で神棚経由モードが実装できてません。

----- 追記以上 -----

たぶん年越した頃には確認できると思うのでそれぐらいまではできるだけ変なことしないでください

以上

SECCON2015 Online CTFに出た

この記事は「さくらインターネット Advent Calendar 2015 - Qiita」 8日目の記事です。

・・・なんですがうかうかしていたらいい感じの枠が埋まってしまっていたので名目上8日目だけど6日目に書いちゃいます。すいません。

チームMr.Takedaで出て3500ptsで19位、残念ながら3年連続本戦出場は無理そう。

以下writeup

自力で解いたやつ

Bonsai XSS Revolutions

f:id:misodengaku:20151206171718p:plain 起動するとわけのわからん画面が出る。

どこか外部と通信してるのかなあと思ってWiresharkだのBurp SuiteだのでSSLで通信してるパケットを捕まえようとしたけど何も無くていったん断念。

放置していたらチームメイトの__mathせんせーから「25番ポート開いてなんかしてるぞ」との情報、見てみたらどうもSMTPサーバが立ち上がってるっぽい。

最初はThunderbirdSMTPサーバとしてlocalhostを登録していろいろやっていたのだけどThunderbirdがいろいろ余計なことをしてくれるので自前クライアントに方針転換。

C#でメール送信しまくるクライアントを書いたはいいけど標準で付いてるSystem.Web.Mail.SmtpClientではちゃんとRFCに準拠したメールアドレスとかでないと例外を吐いて死ぬ。

そこで「SMTPでメールを送信する: .NET Tips: C#, VB.NET」のコードを丸々拝借して変なメールを連続して送れるコードを書く。

クソ長いのでリンクだけにしておきます。

最終的にはDateフィールドに任意の文字列を入れることができ、エスケープもされないようなのでここでXSSが可能。

ブラウザのユーザーエージェントがフラグなので Date: <script>alert(window.navigator.userAgent);</script> をヘッダに仕込んでフラグゲット。

f:id:misodengaku:20151206172947p:plain

Exec dmesg

極端に機能の少ない(?)LinuxのLiveCDのイメージが渡される。

問題名からdmesgが怪しいけどbusyboxから削られてるのかdmesgが実行できない。

VMwareで起動したら幸いネットワーク環境も一発で認識してくれていたのでちゃんとしたBusyboxを落としてきて

busybox dmesg | grep SECCON でフラグゲット。

QR puzzle (Windows)

f:id:misodengaku:20151206173502p:plain

バラバラになってるQRコードのパズルを完成させてQRコードの内容を読んだら1ステージクリア x300ステージぐらいあるやつ。

メモリダンプしてみたらあからさまに内部で使ってる辞書っぽいのが見えたのでそいつをWindowsAPIで送りつけまくる頭の悪いコードを書いてみたら案外上手く行ったのでその方針で行く。

残念すぎて正解したかどうかもわからないまま300回回す上一度通ったワードも再度チャレンジする(これに関しては問題の仕様が不明なのである程度しょうが無いけど)とか本当に頭が悪い。

途中拾えなかったワード(先頭大文字になってる単語が1つだけ混じってる)とか唯一辞書に載ってなかったsecconだとかを手で読むお世話をしながら延々6時間ぐらい回してたらフラグが出た。記念にスクリーンショット撮ったんだけど大会終了後にPCが落ちてスクリーンショット紛失。

とりあえずそんなこんなでフラグゲット。

www.youtube.com

すごいやってるぞ感があるけどこの間PCは使えないし遅いしで何もいいことがないソルバーの実行中の動画があったので貼っておきます。

途中までやって投げた or 途中からやった

Fragment2

全く意味がわからなかったけどもしかしてHTTP2じゃね?と言ってWiresharkでHTTP2としてDecodeさせてみたけどよくわからず。

f:id:misodengaku:20151206180152p:plain

ここが怪しそうじゃね?とSlackに投げて放置していたらチームメイトのaki33524が解読してくれた。

Command-Line Quiz

chibiegg先生がstage4まで突破して最後で悩んでいたのを持っていった。

f:id:misodengaku:20151206175322p:plain

以上

Bonsaiがおそらく想定解で解けたのでよかった

Exec dmesgは要らんこと(Slackで解けたぜヤッター等)してなければ最速いけたかもしれないのが残念

つらい回路を読めるようになりたいがつらい

MMACTF 1st 2015に出た

Mr. Takedaで出て何もしなかった。1100ptで42位。

国内で言うと7位?まあつらい

Login as admin!

某ctfの某と全く同じだったけどこれ以外の解き方があったっぽい。

Splitted

わからんということでチームメイトのきひろちゃんに既にPSDになった状態のファイルを渡された。

Paint.netで開いてみたら白背景レイヤーがFLAGの上に被さっているだけだった。変換ツール避けかなんかか?

This program cannot be run in DOS mode.

f:id:misodengaku:20150910035013p:plain 実行ファイルを1バイト書き換えるだけ。

渡された実行ファイルを普通に実行すると「このファイルは実行できません」と言われて16ビットバイナリかなんかか?と思ったけどどうも普通の32bitバイナリっぽい。

ってことはヘッダがおかしそうなんでいろいろ見て回ったらMZスタブに書いてあるPEヘッダのオフセットが0で潰されていた。正しい値に直すと普通に起動できる。

Uploader

"php without start tag"みたいな怪しい英語でググりまくったら「PHP7.0で<% %>とか<script language="php"></script>で囲われた範囲をPHPとして解釈するのやめるよ」的な公式のリファレンスが出てきた。

ご丁寧にHTTPヘッダでPHP5.xを使っていることを教えてくれていたので怪しいPHPコードを<script language="php"></script>で囲ってアップロードした。

lsしただけでは見つからず結局/flagにFLAGがあった。

stream...

pcapngが渡されるのでWiresharkでpcapにしてからNetworkMinerに食わせるとストリーミング再生している動画のデータ?がファイルとして取り出せる。

ただそのまま拡張子をwmvとかにしても再生できないので、適当にwmv形式のファイルヘッダを漁ったところ(案外面倒)30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6Cで始まる(参考)ことがわかったのでそこが先頭になるようにデータを削る。

しかしこれだけだと動画の再生時間?かなにかを示すフィールドが0のままで再生できない(一応0xFFとかで潰してみたりもしたけどダメだった)。

結局ffmpegに食わせてaviとして出力、普通に再生してFLAGゲット。

MQAAAA

渡された文字列をBase64でデコードするとよくわからないファイルが出来上がる。

中身を見てみると#@~で始まって#~@で終わっているのに規則性がありそうな気がするんで#@~でググったらエンコードされたVBScript?らしいことがわかった。

デコードする方法もあるらしいんだけど適当に拡張子を.vbeにして実行したらFLAGが出た。

おわり

最高で100pt問しか解けなくてつらい

まあ自分が勉強不足なだけで全体的によかったと思うので次回以降期待してます