Authz0简介
Authz0是一款由hahwul开发的自动化授权测试工具,核心功能是识别并测试系统中的未授权访问问题。通过基于URLs、角色(Roles)和凭证(Credentials)的自动化测试,Authz0能够帮助开发者快速发现潜在的授权漏洞,提升系统的安全性。
Authz0采用YAML格式的模板来管理URLs和角色信息,这些模板可以自动创建和添加。此外,它还支持基于多种认证头和Cookie的测试。
Authz0功能详解
模板管理
Authz0的模板管理功能是其核心之一。以通过YAML文件定义测试的URLs、角色和凭证信息。这些模板文件可以自动创建和添加。在模板中,可以指定不同的角色和凭证组合,以模拟不同用户的访问权限。
自动化测试
Authz0支持自动化测试,指定模板文件进行测试。测试过程中,Authz0会遍历模板中定义的所有URLs和角色组合,访问这些URL,并记录访问结果。
结果输出与报告
测试完成后,Authz0会生成详细的测试结果报告。报告中列出了所有测试的URLs、角色组合、访问结果以及可能的授权漏洞。
Authz0使用方法
安装Authz0
通过Go语言工具链进行安装:
go install github.com/hahwul/authz0@latest
通过Homebrew进行安装:
brew install hahwul/tap/authz0
通过Snapcraft进行安装:
snap install authz0
创建模板文件
在使用Authz0进行测试之前,需要先创建模板文件。模板文件采用YAML格式,包含测试的URLs、角色和凭证信息:
name: template name
roles: # roles of this template
- name: role-name1
- name: role-name2
- name: role-name3
urls:
- url: https://authz0.hahwul.com/your-url
method: GET # Method
contentType: "" # or json
body: "" # HTTP Request Body
allowRole: # Allowed role
- role-name1
- role-name2
denyRole: [] # Denied role
alias: "main" # Alias of this URL
asserts: # assertions
- type: success-status
value: "200,201,202,204"
credentials:
- rolename: User
headers:
- 'X-API-Key: 1234'
- rolename: Admin1
headers:
- 'X-API-Key: 5555'
在这个示例中,定义了两个URLs(admin和user页面)以及两个角色(admin和user)。每个角色都对应一组凭证(用户名和密码)。
生成模版操作
使用介绍:
Usage:
authz0 new <filename> [flags]
Flags:
--assert-fail-regex string 设置失败正则表达式断言
--assert-fail-size ints 设置失败大小断言(支持重复标志)
--assert-fail-size-margin int 设置故障大小断言的近似范围
--assert-fail-status ints 设置失败状态断言(支持重复标志)
--assert-success-status string 设置成功状态断言
-h, --help 帮助
--include-burp string 包含Burp日志文件(XML)
--include-har string 包含HAR文件
--include-roles string 包含文件中的角色
--include-urls string 包含文件中的URL
--include-zap string 包含ZAP日志文件(HAR)
-n, --name string 模板名称
使用示例:
authz0 new admin.yaml -n test-admin --include-urls ./urls.txt --assert-fail-regex "permission denied"
扫描操作
使用介绍:
Usage:
authz0 scan <filename> [flags]
Flags:
--concurrency int 要并行测试的URL数量(默认值1)
-c, --cookie string 测试用例的Cookie值
--delay int HTTP请求的延迟秒数
-f, --format string 结果格式(纯文本、json、markdown)
-H, --header strings 此测试用例的请求头(支持重复标志)
-h, --help 帮助
--no-report 不打印报告(仅日志模式)
-o, --output string 将结果保存到输出文件
--proxy string 代理地址
-r, --rolename string 此测试用例的角色名称
--timeout int HTTP请求超时秒数(默认值10)
使用示例:
authz0 scan admin.yaml -r qa -c "auth=37F0B6E4439233442A2C1F8EC5C76E64E3B42A"
authz0 scan admin.yaml -r admin -c "auth=DF0B66038B0A4C3525CBAEF5BF732ABCAFF9EF"
authz0 scan admin.yaml -r superadmin -H "X-Admin-Key: 120439124" -H "X-API-Key: 124124"
修改模版操作
setRole
使用介绍:
Usage:
authz0 setRole <filename> [flags]
Flags:
-h, --help 帮助
-n, --name string 角色名称
setUrl
使用介绍:
Usage:
authz0 setUrl <filename> [flags]
Flags:
-a, --alias string 别名
--allowRole strings 允许角色名称
-d, --body string 请求数据
--denyRole strings 拒绝角色名称
-h, --help 帮助
-X, --method string 请求方法(默认“GET”)
-t, --type string 请求类型[form,json](默认“form”)
-u, --url string 请求URL
setCred
使用介绍:
Usage:
authz0 setCred <filename> [flags]
Flags:
-H, --headers strings 请求头
-h, --help 帮助
-n, --name string 角色名称
使用示例:
authz0 setRole admin.yaml -n superadmin
authz0 setRole admin.yaml -n admin
authz0 setRole admin.yaml -n qa
authz0 setUrl admin.yaml -u https://127.0.0.1/admin -a "main page"
authz0 setUrl admin.yaml -u https://127.0.0.1/admin/api/getUser "get user"
authz0 setUrl admin.yaml -u https://127.0.0.1/admin/api/getAdmin --denyRole qa -a "get admin"
authz0 setUrl admin.yaml -u https://127.0.0.1/admin/api/getSystemKey --allowRole superadmin --denyRole admin --denyRole qa -a "get system key"
authz0 setUrl admin.yaml -u https://127.0.0.1/admin/api/updateKey -X POST -d "key=1234" -a "update key"
authz0 setCred samples/sample.yaml -n "User" -H "X-API-Key: 1234"
authz0 setCred samples/sample.yaml -n "Admin1" -H "X-API-Key: 5555" -H "X-Test-1234: bbbb"