白帽小哥(debu8er)喜欢分享自己的漏洞发现过程,前不久白帽小哥开始在一个VDP(漏洞披露计划)中对 20 个漏洞报告进行分类,在这个过程中,他观看了很多教程视频,其中一个由Sean(zseano)制作的视频“全神贯注:12 个月的漏洞赏金”给了他很大的启发。与其关注子域名,倒不如集中精力在主域名。
1、尝试将值更改为https://www.redacted.com/login?redirectTo=https://evil.com 然后登录,没有任何效果
2、然后尝试https://www.redacted.com/login?redirectTo=//evil.com 依然没有任何效果
3、最后,尝试 https://www.redacted.com/login?redirectTo=/%0d/evil.com ,成功重定向至 evil.com
小哥立即报告了该漏洞,但它被标记为重复漏洞,原始漏洞报告于一天前被其它白帽子提交
在某个 应用程序注册时,无需电子邮件验证。但是,在创建账户并登录后,需要进行电子邮件验证以添加电话号码、更改密码或更新电子邮件。应用程序会将 6 位代码 (XXXXXX) 发送到电子邮箱。
POST /api/v1/users/[email protected] HTTP/2
Host: www.redacted.com
Cookie: cookie
Content-Length: 30
应用程序将 2FA 代码发送到电子邮箱,用户确认代码后,就可以更改密码、电话号码等。当尝试更改电话号码时,应用程序会向该电话号码发送 2FA 代码,与上面的POST请求类似。
POST /api/v1/users/two_factor_auth?phone=12405456545 HTTP/2
Host: www.redacted.com
Cookie: cookie
Content-Length: 30
白帽小哥注意到该应用程序使用了相同的 API 来验证 2FA 代码,验证请求如下:
POST /api/v1/users/verify_two_factor_auth HTTP/2
Host: www.redacted.com
Cookie: cookie
Content-Length: 24
Content-Type: application/json{"otp_attempt":"116293"}
假设启动电话 2FA 后,是否可以使用电子邮件的 2FA 代码来确认电话号码?
1、启动邮箱验证生成新代码
2、使用Burp Suite拦截请求,捕获新邮箱验证码
3、开始电话验证过程
4、修改拦截请求,将新邮箱验证码提交为电话验证代码
5、系统接受邮箱验证码完成电话验证
小哥立即报告该漏洞,获得300 美元赏金奖励。
在子域上,白帽小哥发现登录响应在2FA(双因素认证)之前泄露了账户信息,包括用户名、令牌、电话等。
1、首先访问 https://few.redacted.com/login 登录页面
2、输入有效的电子邮件和密码
3、在发送输入 2FA 代码请求前,观察服务器的 HTTP 响应,包含了大量的敏感信息
该漏洞同样获得了300 美元的赏金奖励。
用户完成 2FA 过程后,应用程序会设置会话 cookie _sc_session。
此会话 Cookie 用于对用户进行敏感操作(例如更改电子邮件、密码或电话号码)进行身份验证。
但是此会话 Cookie 可以在不同账户之间重复使用,从而允许攻击者在获得一次授权后绕过 2FA 检查。
1、创建两个帐户,帐户 A 和帐户 B
2、登录账户 A 并启动需要 2FA 的敏感操作
3、完成 2FA 过程并捕获服务器设置的 _sc_session cookie
4、使用此 _sc_session cookie 对账户 B 执行敏感操作,发现无需2FA即可完成相关操作
小哥立即报告了该漏洞,但该漏洞同样被标记为重复。
小哥并没有气馁,迅速检查了 Android APP,在另一个 API 中发现了同样的漏洞。最终收获 1000 美元赏金奖励。
以上内容由骨哥翻译并整理。