用于 HTTPS 应用程序的基于表单的身份验证 OWASP ZAP

Posted

技术标签:

【中文标题】用于 HTTPS 应用程序的基于表单的身份验证 OWASP ZAP【英文标题】:Form Based Authentication OWASP ZAP for HTTPS application 【发布时间】:2018-10-20 10:55:57 【问题描述】:

我正在尝试使用 ZAP 的 python API 来使用 OWASP ZAP 的基于表单的身份验证功能。

我注意到,在使用 HTTP 应用程序(例如 - http://demo.testfire.net/)时,它能够在登录后抓取并提供额外的 URL。但是,当我对 HTTPS 应用程序尝试相同的操作时,它不会一次获取额外的 URL已登录。

我的问题是 - ZAP 是否仅支持 HTTP 相关 Web 应用程序的基于表单的身份验证?

【问题讨论】:

【参考方案1】:

是的,我们有一个常见问题解答:https://github.com/zaproxy/zaproxy/wiki/FAQformauth

仅使用 API 时很难调试问题,所以我建议先使用 UI,一旦你完成了工作,然后将你所做的转换为 API。

通过用户界面:

    列表项 通过 ZAP 代理时探索您的应用 使用有效的用户名和密码登录 定义上下文,例如,在“站点”选项卡中右键单击应用的顶部节点并选择“包含在上下文中” 在“站点”或“历史记录”选项卡中找到“登录请求” 右键单击它并选择“标记为上下文”/“基于表单的身份验证登录请求” 检查用户名和密码参数是否设置正确 - 他们几乎肯定不会! 在响应中查找可用于确定用户是否登录的字符串 突出显示此字符串,右键单击并选择相关的“标记为上下文”/“登录/退出指示器” - 您只需要设置其中一个,而不是两个都设置 双击相关上下文节点并导航到“用户”页面 - 检查用户详细信息是否正确,添加您要使用的任何其他用户并全部启用 导航到上下文“强制用户”页面并确保选择了您要测试的用户 现在应该启用“强制用户模式已禁用 - 单击以启用”按钮 按下此按钮将导致 ZAP 在检测到用户不再登录时重新发送身份验证请求,即使用“登录”或“注销”指示器。

通过 API 的过程是相同的,但使用 API 调用:

context/includeInContext
authentication/setAuthenticationMethod

authMethodName : formBasedAuthentication
authMethodConfigParams : loginUrl=http://example.com/login.html&loginRequestData=username%3D%7B%25username%25%7D%26password%3D%7B%25password%25%7D
    authentication/setLoginIndicator or setLogoutIndicator
    forcedUser/setForcedUserModeEnabled

authMethodConfigParams 参数的值必须是 URL 编码的,在这种情况下 loginRequestData 是 username=%username%&password=%password%

【讨论】:

我得到了使用 UI 方法的程序,想澄清一下,在更新“authMethodConfigParams”的值时,如果 POST 数据是“uid=xyz&passw=xyz&btnSubmit=Login”,我将其 URL 编码为“ uid%3Dadmin%26passw%3Dadmin%26btnSubmit%3DLogin" 并使用 API 调用 (zap.authentication.set_authentication_method(contextid, authmethodname, authmethodconfigparams)) 导致“missing_parameter”输出。我在这里使用的方法是对的还是我做错了?请建议。谢谢。 我不认为 *** 是调试此类问题的最佳论坛 - ZAP 用户组groups.google.com/group/zaproxy-users 更好:) 有一个很好的视频教程解释它:alldaydevops.com/zap-in-ten 谢谢 :) 更多视频即将推出 - 它们将在 ZAP 用户组上公布并链接到 zaproxy.org/videos

以上是关于用于 HTTPS 应用程序的基于表单的身份验证 OWASP ZAP的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 4 (十三) 基于表单的身份验证

在 Grails 中支持基本身份验证和基于表单的身份验证

SignalR 不适用于 Windows 集成身份验证

为啥基于表单的身份验证不被视为 RESTful?

使用 oAuth 和基于表单的身份验证配置 Spring Security

.NET 基于 cookie 的身份验证,无需表单身份验证