2016-12-13 11 views
0

ZAP APIを使用して、さまざまなWebアプリケーションに対して認証スキャンを実行します。これらのWebアプリケーションはそれぞれログインの仕組みが異なり、手動で設定する必要のあるさまざまなフォームを使用してログインするという面倒なプロセスを実行したくありません。ZAP APIセッション認証

簡単な解決策は、認証されたこれらのスキャンを実行するアプリケーションごとに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を介して要求にクッキーを追加することにより、スキャンを実行することが可能ですか?

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

答えて

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)アドオンを使用して、認証が期待どおりに機能していることを確認します。

Cheers、Simon