OWASP OFFAT测试数据配置进阶:用YAML多角色模拟发现越权漏洞

📅 2026/8/17 23:27:54
OWASP OFFAT测试数据配置进阶:用YAML多角色模拟发现越权漏洞
OWASP OFFAT测试数据配置进阶用YAML多角色模拟发现越权漏洞【免费下载链接】OFFATThe OWASP OFFAT tool autonomously assesses your API for prevalent vulnerabilities, though full compatibility with OAS v3 is pending. The project remains a work in progress, continuously evolving towards completion.项目地址: https://gitcode.com/gh_mirrors/of/OFFAT越权漏洞Broken Access Control常年高居 OWASP API Top 10 榜首也是最容易被传统扫描器漏掉的隐患。OWASP OFFATOFFensive Api Tester是一款开源 API 安全测试工具能根据 OpenAPI/Swagger 规范自动生成测试用例而它的YAML 测试数据配置功能允许你模拟多个不同权限的角色actor去访问接口从而高效发现越权漏洞。本文将以实战案例带你掌握 OFFAT 多角色模拟配置的完整进阶玩法。为什么多角色模拟是发现越权漏洞的关键单角色扫描只能验证这个接口存不存在漏洞却回答不了更关键的问题普通用户能否访问管理员的资源例如/user/{username}接口用你自己的 Token 访问自己的数据返回 200 是正常的但如果换成另一个角色的 Token 依然能访问就说明存在水平越权BOLA或垂直越权风险。OFFAT 的 YAML 测试数据配置-tdc参数正是为此设计它为每个角色注入独立的请求头、查询参数、请求体和路径参数再配合unauthorized_endpoints正则规则把本不该被某角色访问的接口单独拎出来做越权判定。整个逻辑封装在 src/offat/tester/post_test_processor.py 的run_broken_access_control_tests方法中无需改一行代码只需改配置。OFFAT的YAML测试数据配置三分钟快速上手先看最基础的 YAML 配置文件结构它包含一个核心字段actors角色列表每个角色下可定义四类数据配置块作用示例字段request_headers模拟身份认证头Authorization、User-AgentqueryURL 查询参数id、country、citybody请求体参数name、email、phonepath路径参数userId、orderId定义好文件后一行命令即可让 OFFAT 使用这套数据生成测试用例offat -f swagger_file.json -tdc test_data_config.yaml测试数据会通过 src/offat/config_data_handler.py 的populate_user_data方法合并进 BOLA、SQL 注入、命令注入、XSS、SSTI、缺失鉴权等各类测试中实现用户数据 模糊测试的双重覆盖。多角色actor配置模拟真实用户权限的完整写法多角色模拟的核心思路是两个角色持有不同的身份令牌和不同的业务数据。下面是一份经典的test_data_config.yaml配置模拟两个普通用户 actor1 和 actor2actors: - actor1: request_headers: - name: Authorization value: Bearer [Token1] - name: User-Agent value: offat-actor1 query: - name: id value: 145 type: int - name: country value: uk type: str body: - name: name value: actorone type: str - name: email value: actoroneexample.com type: str unauthorized_endpoints: # 声明 actor1 无权访问的接口 - /store/order/.* - actor2: request_headers: - name: Authorization value: Bearer [Token2] - name: User-Agent value: offat-actor2 query: - name: id value: 199 type: int - name: country value: uk type: str body: - name: name value: actortwo type: str - name: email value: actortwoexample.com type: str unauthorized_endpoints: - /user/.*注意三个要点每个角色必须定义request_headers中的认证信息OFFAT 会用不同身份令牌发请求对比访问结果差异。query、body的type字段支持int、str等类型OFFAT 会根据类型替换掉 OpenAPI 规范里的示例值。actors列表第一个元素必须是actor1这是配置校验的硬性要求见config_data_handler.py的validate_config_file_data。用unauthorized_endpoints正则锁定越权漏洞这是整个配置的灵魂。unauthorized_endpoints是一组正则表达式用来声明该角色本不该访问的接口。OFFAT 在跑完全部测试后会做一次越权专项检测遍历每个 actor 名下所有测试结果用unauthorized_endpoints正则去匹配结果中的 endpoint匹配成功且响应状态码落在成功码如 200/201/301范围内即判定为越权漏洞。unauthorized_endpoints: # 以正则形式声明支持通配 - /store/order/.* # 所有订单相关接口 - /admin/.* # 所有管理接口 - /user/\\d/profile # 精确匹配某类资源实战思路给 actor1 声明/store/order/.*为越权接口OFFAT 就会用 actor1 的 Token 去请求订单接口。如果服务器返回 200 而不是 403/401说明普通用户能越权访问订单数据——越权漏洞实锤。最终判定逻辑由PostRunTests.run_broken_access_control_tests完成测试名称会标记为Broken Access Control。运行测试与解读报告一张表看懂越权风险保存好 YAML 配置后执行offat -f swagger_file.json -tdc test_data_config.yaml -o report.html -of htmlOFFAT 会依次执行用户数据 模糊测试组合用例并在终端输出结果表格。重点关注两列vulnerable是否为漏洞越权命中时显示Truedata_leak是否泄露敏感数据邮箱、手机号、身份证等按内置正则匹配。需要提醒的是data_leak与vulnerable是相互独立的维度接口可能既存在数据泄露又显示 Success所以解读报告时务必两列对照别被单一字段误导。越权测试的进阶技巧与注意事项角色数据要真实多角色模拟的价值取决于数据差异。让 actor1 和 actor2 使用不同 id、不同邮箱越权判定才有区分度。正则宁细勿粗unauthorized_endpoints写太宽泛会大量误报建议结合业务接口路径如/api/v1/users/{id}/orders写成/users/.*/orders。结合代理与限速在测试环境配合-p http://localhost:8080走代理观察请求或用-rl 1000限制每秒请求数避免打爆目标服务。输出多种格式-of json/yaml/html可导出不同格式报告方便归档到 CI/CD 流水线或安全平台。迭代更新规范文件OFFAT 目前对 OAS v3 的兼容仍在完善中遇到解析异常时可先检查 Swagger 文件的参数定义是否完整。写在最后OWASP OFFAT 用一段 YAML 测试数据配置就把多角色越权测试这种原本需要手动构造请求的复杂工作变成了可复用、可入库、可进 CI 的自动化用例。只要配置好request_headers区分身份、用unauthorized_endpoints声明越权边界再对照vulnerable与data_leak两列解读报告你就能在发布前拦截掉大部分越权漏洞。马上打开你的 Swagger 文件写一份多角色配置试试吧【免费下载链接】OFFATThe OWASP OFFAT tool autonomously assesses your API for prevalent vulnerabilities, though full compatibility with OAS v3 is pending. The project remains a work in progress, continuously evolving towards completion.项目地址: https://gitcode.com/gh_mirrors/of/OFFAT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考