Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How to create the alert by script of ZAP

How to create the alert by script of ZAP

ZAPで指定文字列をアラート出力
-How to create the alert by script of ZAP-
@YuhoKameda

https://gist.github.com/ykame/d29027255483e365d695e239948b1174

F9b27b006dc2c4f3ca6613073c661834?s=128

Yuho Kameda

March 31, 2016
Tweet

Transcript

  1. @YuhoKameda

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

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

  4. 使用ツール OWASP ZAP 2.4.3 対象サーバ OWASP Broken Web Application 1.2

    対象サイト Bodge It
  5. 各JSPページには、下記の文字列が埋め込まれ ています。 <!-- td align="center" width="16%"><a href="admin.jsp">Admin</a></td-->

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

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

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

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

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

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

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

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

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

  16. // 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 アラート生成のコメント
  17. (9) スクリプトを「有効」にする スクリプトを実行後、エラー終了した場合、自動的 に「無効」になるため注意が必要です。

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

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

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

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

  22. Social Account Twitter : @YuhoKameda URL https://www.owasp.org/index.php/User:Yuho_Kameda E-mail yuho.kameda@owasp.org