ZAP API 会话验证
ZAP API session authentication
我想使用 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 来执行扫描?
或者是为我要登录和扫描的每个网站手动添加表单数据和上下文的唯一选项吗?
是的,这是可能的 - 我们在 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) 插件来检查身份验证是否按预期工作。
干杯,西蒙
我想使用 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 来执行扫描?
或者是为我要登录和扫描的每个网站手动添加表单数据和上下文的唯一选项吗?
是的,这是可能的 - 我们在 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) 插件来检查身份验证是否按预期工作。
干杯,西蒙