備忘録/にわかエンジニアが好きなように書く

個人的にとりあえず仕組みを知りたいから勉強になる?ってことで、 (利便性無視で)触りたように好きに構築してみる 個人用の備忘録となるので内容の保証はないのでその点はご了承ください。 ※変な内容や間違いを書いているなどありましたらコメントやご指摘いただけると幸いです。

OWASP ZAP2.7でzap-cli+context を使ってScan実行

 

概要

まず、ZAPのGUI(Windows)を使用してコンテキストファイルを作成する。

(zap2.7で作ったコンテキストをweekly版でも使用可能だった)

その後zap-cliにコンテキストの設定情報を読み込ましScanを実行する。

1.contextの作成準備(zapのGUIを使用)

ブラウザにプロキシとして設定する

OWASP ZAPを起動させ、設定済みのプロキシ用アドレス(127.0.0.1)とポートを入力します。

f:id:pocket01:20171225233925p:plain

 

Scan用サイトへアクセス(ZAP Proxy機能を経由)

履歴タブにURLが記録するためScan用Webサイトにアクセスする。

f:id:pocket01:20171225234951p:plain

Scan用サイトへログイン(Authentication設定用)

ついでに、wordPressのログイン認証を実施する。

f:id:pocket01:20171225234857p:plain

ログイン後画面

f:id:pocket01:20171225235058p:plain

 

2.ZAP(GUI)でcontext作成

※おそらく下記の全設定は不要だが、最低限必要な設定は絞り込めていない※

アクセス履歴確認

f:id:pocket01:20171226001236p:plain

 Scan対象URLをコンテキストへ追加

f:id:pocket01:20171226001444p:plain

 

f:id:pocket01:20171226001550p:plain

コンテキスト内の認証設定

①左のアクセス履歴からPOSTの履歴を選択

②リクエストタブを選択し、表示されるPOSTデータにログインユーザ名/Passwordが記載されていることを確認

③ユーザ名とパスワードに紐づくパラメータを確認

log : ユーザ名  pwd : Password という変数に紐づくパラメータであることがわかる。

f:id:pocket01:20171226002609p:plain

認証設定へ追加

"Flag as Context" から URLを登録したコンテキストを選択

f:id:pocket01:20171226003949p:plain

認証用パラメータを入力 f:id:pocket01:20171226004611p:plain

【自動入力】

・Authentication Method (認証方法の種類)
・Login Form Target URL (ログインするURL)
・Login Request POST Data (ログイン時に送信するデータ)

【手動入力】

・Username Parameter (ユーザ名)

・Password Parameter (パスワード)
・Logged In Indicator Pattern / Logged Out Indicator Pattern ※どちらか片方で良い

 ⇒とりあえずログインを示す文字を入力(今回はlogoutという文字を選択※適当)

f:id:pocket01:20171226004711p:plain

 ユーザ登録

f:id:pocket01:20171226015237p:plain

ログインする時に使用するユーザ名とパスワードを入力して[追加]ボタンを押します。

f:id:pocket01:20171226015329p:plain

f:id:pocket01:20171226015336p:plain

Forced Userの登録

自動認証で使用するユーザ選択

f:id:pocket01:20171226015404p:plain

Session Management設定

f:id:pocket01:20171226015605p:plain

3.contextのエクスポート

f:id:pocket01:20171226010513p:plain

保存先とファイル名を指定し保存する。

f:id:pocket01:20171226010933p:plain

 

設定情報をメモする

 コンテキストファイルをメモ帳で開き、コンテキスト名と認証用のUser名を控える。

後述のzap-cliのオプション機能で使用する。

■コンテキスト名

<context>
<name>context</name>
<desc/>
<inscope>true</inscope>
<incregexes>http://192.168.20.161.*
<tech>

 ■USER

 ユーザ登録で追加した名前

※実際にLoginのPOSTリクエストを再送信してみる

再送信を選択

f:id:pocket01:20171228202704p:plain

POSTデータの確認

f:id:pocket01:20171228202850p:plain

レスポンス情報の確認

logoutに関する情報が読み取れるため、この時点では問題なく使えるLOGIN情報ということがわかる。

f:id:pocket01:20171228202913p:plain

※パスワードを変更してログイン不可のデータを再送信

リクエストデータの修正

f:id:pocket01:20171228203212p:plain

レスポンス確認

正常の場合と異なるレスポンスが帰ってきていることがわかる。

f:id:pocket01:20171228203235p:plain

 

4.contextのインポート設定追加

 contextファイルを Docker(ZAP)が動作するサーバへファイル転送を実施

[root@sv01 contexts]# ls
contexts.context
 
root@a2ede6b7ad63:/zap# zap-cli context --help
Usage: zap-cli context [OPTIONS] COMMAND [ARGS]...

Group of commands to manage the contexts for the current session.

Options:
--help Show this message and exit.

Commands:
exclude Exclude a pattern from a given context.
export Export a given context to a file.
import Import a saved context file.
include Include a pattern in a given context.
info Get info about the given context.
list List the available contexts.
new Create a new context.
users List the users available for a given context.
root@a2ede6b7ad63:/zap#

 

5.Scanの実行結果

 ■Scan実施用シェル

※contextのインポートを9行目(status -t 120)の前で実施すると、なぜかエラーで実施できなかったので open-url確認後に実施するようにしている。

spiderとactive-scanは、前手順でメモした名前を指定する。

#!/bin/sh

CONTAINER_ID=$(docker run -v $(pwd):/zap/wrk/:rw -u root -p 8080:8080 -i -d owasp/zap2docker-weekly zap.sh -daemon -host 0.0.0.0 -port 8080 -config api.disablekey=true -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true)

#target
TARGET_URL=$1

#SCAN start
docker exec $CONTAINER_ID zap-cli -p 8080 status -t 120
docker exec $CONTAINER_ID zap-cli -p 8080 open-url $TARGET_URL
docker exec $CONTAINER_ID zap-cli context import /zap/contexts/contexts.context
docker exec $CONTAINER_ID zap-cli -p 8080 spider -c context -u user01 /zap/contexts/contexts.context -u user01 $TARGET_URL
docker exec $CONTAINER_ID zap-cli -p 8080 active-scan active-scan -c context -u user01 -r $TARGET_URL


#Output
docker exec $CONTAINER_ID zap-cli -p 8080 alerts
docker exec $CONTAINER_ID zap-cli report -f xml -o /zap/wrk/testreport_$(date +%Y%m%d).xml

#docker削除
docker logs $CONTAINER_ID
docker stop $CONTAINER_ID
docker rm -f $CONTAINER_ID

 ※CONTAINER_IDの取得で、参考にしたサイトの実施コマンドでも取得できるがコンテナが起動し

zap-cli確認

contextのユーザ設定は反映されたScanとなっていそうだった。

が、計測結果が分かるのが半日以上の時間かかりdocker logの結果もタイムアウト、いろいろとエラーが出ているので正確なデータとなるのかは微妙かも。

spiderやActiveScanで継続時間や調査対象の階層の指定方法が不明なので指定方法があればいいのだが。。

[root@sv01 ~]# ./test.sh http://192.168.20.161   ※ここでスキャン対象を入力
[INFO] ZAP is running
[INFO] Accessing URL http://192.168.20.161
[INFO] Imported context from /zap/contexts/contexts.context
[INFO] Running spider...
[INFO] Running an active scan...
[INFO] Issues found: 41
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Alert | Risk | CWE ID | URL |
+==============================+========+==========+===================================================================================================+
| Source Code Disclosure - SVN | High | 541 | http://192.168.20.161/search/feed |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/account |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/1 |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/author |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/author/user |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/category |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/category/%e6%9c%aa%e5%88%86%e9%a1%9e |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/date |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/date/2017 |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/date/2017/10 |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/comments |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/logout |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/members |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-join |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-join/membership-registration |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login/membership-profile |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login/password-reset |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login/password-reset |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login/password-reset |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login/password-reset |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/page |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/page/2?s |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/password-reset |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/register |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/sample-page |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/search |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/search/feed |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/user |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/sitemap.xml |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/wp-login.php |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/wp-login.php?action=lostpassword |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/wp-login.php?action=lostpassword |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/wp-login.php |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/wp-login.php?redirect_to=http%3A%2F%2F192.168.20.161%2Farchives%2F1 |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/wp-login.php?reauth=1&redirect_to=http%3A%2F%2F192.168.20.161%2Fwp-admin%2F |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/%e3%82%a2%e3%82%af%e3%83%86%e3%82%a3%e3%83%93%e3%83%86%e3%82%a3 |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
[INFO] Report saved to "/zap/wrk/testreport_20171226.xml"