Slide 1

Slide 1 text

@YuhoKameda

Slide 2

Slide 2 text

ZAPのスクリプト機能を使って、下記のことを実 現する手順です。 URI/レスポンスボディに「特定文字列」が含まれて いる場合、「アラート」タブに出力する

Slide 3

Slide 3 text

今回は、下記を実装する場合を解説します。 (1) URIに「admin.jsp」という文字列が含まれる場 合、「[URI]admin.jsp!!」と「アラート」タブに出力す る (2) レスポンスボディに「admin.jsp」という文字列 が含まれる場合、「[BODY]admin.jsp!!」と「アラー ト」タブに出力する

Slide 4

Slide 4 text

使用ツール OWASP ZAP 2.4.3 対象サーバ OWASP Broken Web Application 1.2 対象サイト Bodge It

Slide 5

Slide 5 text

各JSPページには、下記の文字列が埋め込まれ ています。

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

(1)~(3)診断対象を設定する (4)~(9)スクリプトを作成する (10)~(12)アラートの動作確認を行う

Slide 8

Slide 8 text

(1) ZAPを通してhome.jspへアクセスする

Slide 9

Slide 9 text

(2) /bodgeit/をコンテキストに設定する

Slide 10

Slide 10 text

(3) /bodgeit/をコンテキストに設定する

Slide 11

Slide 11 text

(4) 「スクリプト」タブを開く

Slide 12

Slide 12 text

(5) 「スクリプト」タブ内の「Templates」の 「Passive Rules」にある「Passive default template.js」を右クリックし、新規スクリプトを作 成する

Slide 13

Slide 13 text

(6) Script名「Find admin.jsp」を入力し、保存 する

Slide 14

Slide 14 text

(7) 新しいスクリプトが作成されたことを確認す る

Slide 15

Slide 15 text

(8) 作成したスクリプトを選択した状態で、右 上の「Scriptコンソール」タブ内のウィンドウに次 ページの「スクリプト」を貼り付ける

Slide 16

Slide 16 text

// The scan function will be called for request/response made via ZAP, excluding some of the automated tools // Passive scan rules should not make any requests // Note that new passive scripts will initially be disabled // Right click the script in the Scripts tree and select "enable" function scan(ps, msg, src) { // (1) if (true) { // Change to a test which detects the vulnerability uri = msg.getRequestHeader().getURI().toString() // URI Check if (uri.indexOf('admin.jsp') > 0) { //raiseAlert(risk, int confidence, String name, String description, String uri, // String param, String attack, String otherInfo, String solution, String evidence, // int cweId, int wascId, HttpMessage msg) //risk: 0: info, 1: low, 2: medium, 3: high //confidence: 0: falsePositive, 1: low, 2: medium, 3: high, 4: confirmed ps.raiseAlert(1, 1, '[URI]admin.jsp!!', 'admin.jsp', msg.getRequestHeader().getURI().toString(), '', '', '', '', '', 0, 0, msg); } // (2) body = msg.getResponseBody().toString() // Body Check if (body.indexOf('admin.jsp') > 0) { ps.raiseAlert(1, 1, '[BODY]admin.jsp!!', 'admin.jsp', msg.getRequestHeader().getURI().toString(), '', '', '', '', '', 0, 0, msg); } } } https://gist.github.com/ykame/d29027255483e365d695e239948b1174 アラート生成のコメント

Slide 17

Slide 17 text

(9) スクリプトを「有効」にする スクリプトを実行後、エラー終了した場合、自動的 に「無効」になるため注意が必要です。

Slide 18

Slide 18 text

(10) 判別しにくいため、一度、アラートの中身 を全て削除する

Slide 19

Slide 19 text

(11) home.jspへアクセスすると、「アラート」タ ブに「[BODY]admin.jsp!!」が出力されているこ とが確認できる

Slide 20

Slide 20 text

(12) 一度、アラートを全て削除し、admin.jspへ アクセスすると、 「アラート」タブに 「[URI]admin.jsp!!」が出力されていることが確 認できる

Slide 21

Slide 21 text

URIとレスポンスボディに、特定文字列が存在す る場合、アラートを出力する内容を紹介しました。 アラートを自由に作成出来ます。 スクリプトのテンプレートをカスタマイズして、より こだわった検出手法を研究してみましょう。 2015年8月に行われた、ZAPスクリプトコンペの 結果を参考に、便利なスクリプトを使ってみま しょう。 https://www.owasp.org/index.php?title=2015-08-ZAP-ScriptingCompetition&setlang=en

Slide 22

Slide 22 text

Social Account Twitter : @YuhoKameda URL https://www.owasp.org/index.php/User:Yuho_Kameda E-mail [email protected]