from electron 2 web

インターネットのリソースを無駄遣いして検索におけるUXを下げてごめんなさい

圧倒的文章力のNASAでゴミみたいなチラ裏のようなメモを量産してしまい全ての"Web開発者"にごめんなさい

mbsd サイバーセキュリティコンテストに出場した(予選&提出したレポート)

mbsd なんとかかんとかコンテスト is 何?

こりをみよ!(めうめう)

システムに潜む脆弱性を探し出せ!! MBSD Cybersecurity Challenges|専門学校と経営:専門学校の経営者・広報・就職担当者の情報サイト

詳細はここ見て↓

naro3.hatenablog.jp

動機

たまたまサイトを見たら専門学生のみだったので、専門学生onlyだしこれ余裕じゃねwうはwwww

ってなって応募した。

チーム

勉強会でたまに会ったりするA、phpバイトをやってるBあたりを狙っていた。

どっちも弊専門学校の知り合い。Bのほうは同クラス。

phpで書かれてるサイトだしcpaw ctfを少しやらせた(1日で飽きていたが)ので適正は確実にBのほうがあると思う

がBとは卒研が忙しいだの何だかんだ言ってやってくれそうにないし(前例あり)2週間程度の長期戦になると思ったので人間関係崩すよりも外したほうがいいと判断したためAを誘った(結果的に仕事ぶりはどっちもどっちだったんだけど)

チームメンバの働き

愚痴が死ぬほどあふれるので割愛。

まあ俺が全部脆弱性を見つけたというところで察してくれ

正直予選終わった直後はかなりヘイトがたまっていた。

どんな感じで動いたか

自分はあらかじめtwitterのTLでこのコンテストがあることをセキュキャン系つながり経由で知っていたので初日から全力で取り組むことができた。

インターンなどいろいろ重なっていてあまり時間がなかったため初めの3日間ぐらいはそこまで時間を割けなかった。

作戦会議・進捗報告はどちらも同じ学校なので週一程度で俺がtwitterでDMで声をかけて放課後に集まる感じでやっていた。

hackmdも2回目ぐらいの進捗会議で使おうということになったが チームメンバーが全く見てくれなかった&全くeditしたり状況をかいてくれない ので全く役に立たなかった。

全体の順序としてはweb app、ネットワーク、web appみたいな感じで脆弱性診断をした。

1回目の進捗会議で初めて仮想建てた気がするがこのとき確か自明なXSSとSQLiを見つけた。

この程度か。と思ってあとんじゃZAPに全部やってもらおうwと調子に乗っていたがこの二つ以外はzap氏でも見つからなかった。

次にXSSの横にjpgを送信できるフォームがあった。

ctfでアップロードフォームといえばRFIやLFI、OSコマンドインジェクション、dirトラバーサルなどでフラグをとるコンボの鉄板であり約束事だしもう絶対これは何かあるだろうなと思ってかなりの時間執着してしまった。

また、個人的には入賞するにはまずOS内部に侵入するのが前提条件で内部でいろいろ見つけるのが勝負の分かれ目になるだろうなと思ってしまったので余計にここに執着してしまった。

一週間ぐらいここに対する攻撃をずっと調べたりやってたりした。結果的には何もなかった。

tcp/334。ちーん(笑)

P.S. dirtycowあったらしいけどね、このVMが作られた当時はdirtycow発表されてないっぽいので意図して作りこんだわけではない、とのこと。

まあそれと同時にnmap調べたりソースコードの静的解析した(俺もチーメンもphp読めない(読めるけど日常的に書いてないので脆弱性診断やセキュアプログラミングができない)ので)

んでripsをチームメンバに建ててもらった。(2日程かかったが)

まあripsは初めて触ったのでいい経験になった。ここでphpの$_SESSION使ったxssを発見した。

ここには何もない(しcookieも触れない)んだけど最近BeEF触ったのでね、XSS糞恐ろしい。

次にググりまくった。とにかく関係するワード+セキュリティ(脆弱性)でググりまくった

セッション固定化攻撃とかapache 脆弱性とか。22,23,5を見つけた。

あとなんかいじってたら仕様に起因する脆弱性(BABY,自明)を見つけた。

3日間ぐらい調べまくっても何も出ないので次に進むことにした。

次にsqlmapでどんなテーブルとかデータが出てくるか調べた。このころの俺はsqliとかブラインドsqliが全くできなくて、いい機会だと思ったのでsqli、ブラインドsqliを理解していなかったのでその辺について調べまくったり手動でsqli関係のクエリを投げまくった。目標はブラインドsqliを手動で何も見ずにできるようにしたかった。

投げたログはこんな感じで付箋にはりつけまくった。普段付箋にメモとか残してるんだがめちゃくちゃ枚数多くなってわかりづらくなったのはまた別の話。

f:id:lv7777:20161130134626p:plain

んでそれに関連してsqlmapのオプションを調べまくっていたんだが--sql-queryやら--os-query、などなどいろんなオプションを覚えた。

実際に使ってみたらこいつらがめちゃくちゃ有能だった。

ただし権限の制限がめちゃくちゃきつくてほぼ何もできなかった(CRDのみ。さらにshowも禁止。もちろんgrant文の発行なんかも禁止されている)

まあそんでいろいろ悪用して権限昇格を見つけた。(手順がめっちゃ複雑なのでこれは自慢の一品)

ちなみに肝心の手動でsqliをマスターするのはできなかった。う~んこの無能。(ksnctfのloginみたいなやつでブラインドsqli基礎ぐらいはできるようになった)

次にNW関係の脆弱性診断に回った。

ポート2000~10000ぐらいまで調べても何もなくてあきらめかけてまあ最後に10000以降も打っとくかと思って打ったらなんかsshtelnetに当たった。

スーパーラッキー(まあこのときnmap-aで調べてもsshのほうはわかったんだけどtelnetのほうはかなり隠蔽されてて気づくのにかなり苦労したのでこのときは存在に気付いただけ。

でまさかと思ってudpも調べてみたらいろいろ出てきた(そもそもサンプル報告にsnmpが出てる時点で調べなかったのでア

んでとりあえずXXX(プロトコル名)+脆弱性とかで調べてみた。ntpとかsnmpとかはそもそも全く知識がなくてMIB is 何というレベルから始めたのでとてもつらかった。

が専門学生バイトしてない糞ニートの有り余る時間を発揮して実際にNTPサーバー建てたりSNMP鯖建てたりそれ用に自宅ネットワークを改変したり本屋でntpとかsnmpとか読みまくっていろいろ調べた。セキュキャンでも言われたからね、実際に手を動かせ

んでいろいろ見つけた。ntpブロードキャストは盲点だったなあ。見つけたときはかなり嬉しかった。

dhcpのシェルショックとかもやってみたけど成功しなかった。今までの法則(穴が開いているポートで一つ以上の脆弱性が見つかっている)からするとなんかありそうなんだけどなぁ・・・

この時点で残り4日ぐらいだった。正直ファイルインジェクションとNWにかなり時間をとられすぎた。しかもレポート全く書いてない。

とりあえず提出しなきゃ話にならないので1.5日まるまる書けて書きまくった。書いて書いて書きまくった。めっちゃ手が痛くなった(セキュキャンの応募用紙並みに書いた)

んでとりあえず完成したのであとは見るからに怪しいsslとかに取り掛かった。そもそもip指定でアクセスするとfirefoxで警告だすし、それをhostsで修正してもオレオレ証明書だということが分かった。

んでheartbleedあたりもあるかなと思ってkaliにsslscanとかいうツールがあるっぽくてそいつで総当たりしてみたけどなんかsslv3の脆弱性が釣れた。ラッキー。

んで授業中暇だしwiresharkでパケット眺めてたら水色になっててなんか怪しかったのでそれとsslscanで出てきた情報と組み合わせて無理やり脆弱性を作り出した。(それっぽい単語でググったら悪用できるみたいなことが書いてあったけど再現はできなかった

最後の日も授業中暇だったんで調べてたらたまたま仕様に起因する脆弱性(EZ)を見つけたりパスワードを平文で送ってるとか見れば一秒でわかるような脆弱性を発見してしまった。

見つけた脆弱性

  • 簡潔に見たい人用

gist.github.com

  • 本物の提出した奴

docs.google.com

反省

最初にMBSDのサイトに書いてあった参考書籍を読まなかったのが非常に悔やまれる

特に上野宣 氏の脆弱性診断みたいな本を提出期限が終わった後に本屋で立ち読みしたら非常に今回の脆弱性診断に役立つことが分かった。

CWEに基づいた診断をするのは盲点だった。cwe自体は知ってたけどこういう風に生かせばいいんだな。。。CVEとかも書こうか非常に迷ったけど今回の脆弱性診断のサンプルにCVE乗ってなかったし載せないことにした(載せればよかった

脆弱性診断スタートガイドを読み進めるうちに脆弱なパスワードを登録できてしまうとか重要な値をGETメソッドで送ってるとかそれも載せていいのかよぉ!気づいてたよぉ!ってなるのがたくさん出てきてしまった。

しかもMySQLが外部から制限されてないってかなり大きなところだと思うし書いておけばよかった・・・(提出当時はこれが脆弱性だって思わんかった・・・