文章目录
- 通过不同响应枚举用户名
- 2FA 简单旁路
- 密码重置破坏逻辑
- 通过细微不同的响应枚举用户名
- 通过响应计时的用户名枚举
- 破解暴力保护,IP 封锁
- 通过帐户锁定的用户名枚举
- 2FA 破坏逻辑
- 暴力破解保持登录状态的 cookie
通过不同响应枚举用户名
就是所谓的暴力破解,用户名和密码的字典都给了
首先遍历用户名得到 atlas
同样方法得到密码2000
2FA 简单旁路
就是使用密码后还有个验证码,我们无法拿到对方的验证码,如何进行登录呢
先使用自己的账密登录
通过自己的电子邮件拿到验证码 ,成功登录后记录一下url
这个url提供了成功登录后的地址信息 也就是url/my-account
拿carlos:montoya
进行登录后跳过验证码环节,直接访问/my-account
密码重置破坏逻辑
跟上面比较像
https://0a8e00b204609bacc0f64a2600d400ea.web-security-academy.net/forgot-password?temp-forgot-password-token=zClSL4YN2T76ZNfEqHE4A6wXFANxnbHq
抓包来分析修改密码时的包
删除URL和请求体中temp-forgot-password-token参数的value。将用户名参数更改为 carlos
将新密码设置为想要的任何内容并发送请求。
然后carlos的密码就被改为了1234
通过细微不同的响应枚举用户名
也是暴力破解 ,不同的是,这次简单的看响应长度找正确结果不可行
可以设置一下返回有用的响应信息,以便分辨正确的结果
有一个结果没有. 就是他了
然后爆破密码 看长度或状态302跳转即可
通过响应计时的用户名枚举
这题的特点呢,首先需要X-Forwarded-For
伪造ip,否则多次请求会封ip,但并不会检测ip格式,所以就1-100就行
然后这里的通过响应时间来进行区分,经过测试,如果用户名正确,则响应时间根据你设置密码的长度增加而增加。
用户名不正确则直接响应结束,所以这个点可以进行用户名爆破。
ip和username一一对应进行爆破(Pirchfork模块),响应时间长的即为正确用户名
ad的响应时间明显大很多,所以ad可能是用户名,有了用户名正常方法爆密码即可
ad : love
破解暴力保护,IP 封锁
这题的情况是: 错误登录只允许三次,否则要等待1分钟继续登录,可利用的点是我们可以正常登录自己的用户来重置次数。
所以在爆破carlos的密码时,中间要穿插正确的账号密码,准备这样的字典进行爆破。
为了方便呢,这两用户就交叉跑
carlos pass1
wiener peter
carlos pass2
wiener peter
准备如上的字典即可
账号好搞,密码字典写个脚本生成一下
with open('小脚本\pass.txt') as f:
c = f.readlines()
targ = open('小脚本\pass2.txt',"w")
s = 'peter'
for i in range(100):
targ.write(c[i])
targ.write(s+'\n')
targ.close()
一一对应爆破即可
通过帐户锁定的用户名枚举
判断是否是正确用户,每个账户需要多试,如果是正确用户,试多了会有某种错误提示。
基于这样的判断来爆破用户,
用集束炸弹来定义两个payload,第一个就是用户名,第二个变量在最后设置空,数量5个
然后爆密码即可
这里还可以添加一个Grep-Exteact提取错误信息
2FA 破坏逻辑
用wiener用户拿到验证码登录时,这里verify
参数判断用户,验证码是4位纯数字。。就很好爆破
直接将verify
设成carlos
, 然后直接爆破验证码,md不知道哪里有问题
暴力破解保持登录状态的 cookie
先登录一遍,在Stay logged in
状态下进行抓包分析
就是个简单的cookie 存储密码的md5 ,主要post传入的密码也需要爆破,一一对应
base64(username+':'+md5HashOfPassword)
在Payload processing下,依次添加以下规则。在提交请求之前,这些规则将按顺序应用于每个有效负载。
- 哈希:
MD5
- 添加前缀:
wiener:
- 编码:
Base64-encode