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

Yuho Kameda

March 31, 2016
Tweet

More Decks by Yuho Kameda

Other Decks in Technology

Transcript

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

    View full-size slide

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

    (2) レスポンスボディに「admin.jsp」という文字列
    が含まれる場合、「[BODY]admin.jsp!!」と「アラー
    ト」タブに出力する

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  14. // 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
    アラート生成のコメント

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide