【问题标题】:ZAP API session authenticationZAP API 会话身份验证
【发布时间】:2016-12-13 14:13:57
【问题描述】:

我想使用 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 添加到请求中来执行扫描?

或者是为我要登录和扫描的每个网站手动添加表单数据和上下文的唯一选项?

【问题讨论】:

    标签: zap


    【解决方案1】:

    是的,这是可能的——我们在 Mozilla 这样做。我使用的代码的 sn-p 是:

    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-04-24
      • 2023-03-14
      • 2015-02-20
      • 2019-02-06
      • 1970-01-01
      • 2017-06-16
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多