0

ZAP APIを使用して、さまざまな Web アプリケーションに対して認証スキャンを実行したいと考えています。これらの Web アプリケーションにはそれぞれ異なるログイン メカニズムがあり、それぞれ手動で構成する必要がある多数の異なるフォームを介してログインするという面倒なプロセスを実行したくありません。

より簡単な解決策は、アプリケーションごとに HTTP セッション Cookie を使用してこれらの認証済みスキャンを実行することですが、関連付けられたユーザーとのコンテキストを作成せずにこれを実行するメカニズムがわかりません。

この使用例ではないにもかかわらず、http セッションを介して新しいセッションを追加しようとしました。

def add_session(self, session_name, session_tokens):
        self.zap.httpsessions.create_empty_session(self.target_url, session_name, apikey=self.api_key)
        for token_name, token_value in session_tokens:
            self.zap.httpsessions.set_session_token_value(self.target_url, session_name,  token_name, token_value, apikey=self.api_key)
        self.zap.httpsessions.add_session_token(self.target_url, session_name, apikey=self.api_key)
        self.zap.httpsessions.set_active_session(self.target_url, session_name, apikey=self.api_key)

ただし、スキャンを実行する場合、手動で追加された Cookie はサーバーへの後続のリクエストには追加されません。

たとえば、スパイダーを実行する場合、セッション情報は無視されます。

def spider(self):
    scanid = self.zap.spider.scan(self.target_url, apikey=self.api_key)
    while (int(self.zap.spider.status(scanid)) < 100):
        print 'Spider progress %s%% ' % self.zap.spider.status(scanid)
        time.sleep(1.0)
    return self.zap.spider.full_results(scanid)

ZAP API 経由でリクエストに Cookie を追加してスキャンを実行することはできますか?

または、ログインしてスキャンする各 Web サイトのフォーム データとコンテキストを手動で追加する唯一のオプションですか?

4

1 に答える 1

1

はい、可能です。Mozilla で行っています。私が使用するコードのスニペットは次のとおりです。

zap.httpsessions.add_session_token(target + ":443", "sessionid")
zap.httpsessions.create_empty_session(target + ":443", "testsession")
zap.httpsessions.set_session_token_value(target + ":443", "testsession", "sessionid", session_cookie)
zap.httpsessions.set_active_session(target + ":443", "testsession")

これは、スパイダリングとアクティブ スキャンの両方で機能し、コンテキストは必要ありません。Auth Stats ( https://github.com/zaproxy/zap-extensions/wiki/HelpAddonsAuthstatsAuthStats ) アドオンを使用して、認証が期待どおりに機能していることを確認します。

乾杯、サイモン

于 2016-12-13T14:33:36.733 に答える