portswigger_authentication

漏洞产生原因

  1. 无法充分抵御爆破
  2. 逻辑缺陷或poor coding(?)

基于密码的认证机制

用户名

  1. 查找潜在公开的用户名
    1. profile,可能profile里的名字是用户名
    2. http报文里的email,可能包含管理员的邮箱,而邮箱可能包含管理员的用户名
  2. 判断用户名的recognizable pattern
  3. 尝试 username enumeration
    1. 检查status code
    2. 检查 error 信息
    3. 检查 response times

密码

  1. 检查密码policy
  2. 根据policy,用户习惯等准备字典
  3. 爆破

lab1

官网提供的字典
https://portswigger.net/web-security/authentication/auth-lab-usernames
https://portswigger.net/web-security/authentication/auth-lab-passwords

lab: https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-different-responses

直接用burpsuite的集群炸弹

但感觉这样太低效,而且可以user enumeration,所以先枚举用户名

alt text

用户名acid

接下来爆密码

密码shadow

lab2

lab: https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-subtly-different-responses

有时,在用户名枚举时,存在的用户名确实会得到不同的响应,但若是变化太小,那就很容易错过
而burpsuite有个很好的功能弥补了这一点

在intruder-setting-grep-extract或者intruder-设置-检索-提取
可以添加一个项,选中error信息就能自动在爆破时检查error信息,然后就通过自带的sort发现细微的变化(subtly different response)
alt text
alt text

所以在渗透测试时,可以将这一步骤加入测试流程
最后密码爆出来是这个
alt text

lab3

首先有IP-based爆破保护,用X-forwarded-for就行了

然后就是看接收到响应-响应完成的差,发现有三个可能的username

alt text
alt text

结果好像都不是
毕竟这个timing也受网络波动的影响,所以要多测几次