OWASP Juice Shop 漏洞挖掘实录:从 SQL 注入到权限提升

4 阅读3分钟

黑客 OWASP Juice Shop:第一部分 - 发现关键漏洞

奉至仁至慈的真主之名。一切赞颂全归真主,养育众世界的主。

我决定今天测试一下 OWASP Juice Shop。我将从测试登录功能开始,记录我遇到的所有漏洞和安全问题。这篇报告是第一篇,我会在标题中注明。

我尝试使用 ' OR 1=1-- 作为邮箱,并输入了一个随机的密码,结果成功登录了管理员账户。

第一个漏洞:登录功能存在 SQL 注入漏洞。

我点击了评论区域,注意到有一些用户留下了评论。我想:“如果我可以通过 SQL 注入以这些用户的身份登录呢?”

我尝试了以下邮箱地址:

然而,我并没有以这些用户的身份登录,而是再次登录了管理员账户。

第二个漏洞:部分用户登录存在 SQL 注入漏洞,但会授予管理员权限,而非目标用户账户。

我创建了一个测试账户:test+1@gmail.com。我注意到系统允许用户使用自己的邮箱作为密码,同时也作为安全问题的答案。出于安全考虑,这不应该被允许。

第三个漏洞:系统允许使用相同的邮箱地址作为用户名和密码,损害了账户安全性。

回到 Burp Suite,我注意到一个指向 /api/Users/ 的 POST 请求。出于好奇,我将它发送到 Repeater,删除了 POST 请求体,将请求方法改为 GET,然后发送。我收到了一个错误响应:

{
  "error": {
    "message": "No Authorization header was found",
    "name": "UnauthorizedError",
    "code": "credentials_required",
    "status": 401,
    "inner": {
      "message": "No Authorization header was found"
    }
  }
}

我检查了站点地图中带有 Authorization 头的请求,找到了一个。我解码后发现这是管理员的授权令牌。我将它添加到请求中,希望能成功,结果确实成功了。我在响应中获取了用户的邮箱和角色。我可以在无需密码的情况下利用 SQL 注入登录。

第四个漏洞:由于授权检查不当导致个人身份信息 (PII) 泄露。

注意:普通用户的授权令牌同样有效。

我从端点中移除 /Users/ 后,向 /api/ 发起了一个请求,这触发了一个堆栈错误。我认为这是一个安全问题。

第五个漏洞:由于错误处理不当导致堆栈跟踪信息泄露。

我注意到一个请求头 GET /rest/products/search?q=,并尝试输入 apple' OR 1=1。这触发了一个错误,泄露了数据库名称和错误位置。

{
  "error": {
    "message": "SQLITE_ERROR: near \"' OR 1=1%'\": syntax error",
    "stack": "Error: SQLITE_ERROR: near \"' OR 1=1%'\": syntax error",
    "errno": 1,
    "code": "SQLITE_ERROR",
    "sql": "SELECT * FROM Products WHERE ((name LIKE '%apple' OR 1=1%' OR description LIKE '%apple' OR 1=1%') AND deletedAt IS NULL) ORDER BY name"
  }
}

第六个漏洞:由于 SQL 错误处理不当导致信息泄露。

我通过 /api/BasketItems/ 端点输入了它未预期的值(例如 -1),触发了另一个错误。这泄露了更多关于数据库的信息。

第七个漏洞:由于用户输入验证不当导致信息泄露。

我注意到普通用户无法查看点赞某个特定产品的用户。通过将授权头替换为管理员的授权头,我成功获取了点赞该产品的用户邮箱。

第八个漏洞:权限提升,允许未经授权访问用户邮箱。

目前就这些。感谢阅读!别忘了点赞。你可以订阅以便将下一篇报告直接发送到你的收件箱。

如有任何建议或更正,请随时联系我: Twitter — callgh0st CSD0tFqvECLokhw9aBeRqopJDR93OU7WxHE+knUD6TOhHbcUe1LgS00eirihpKWvLQI3V8BPv89shQKQLzLf5XMoh2F4XrVLS44j3K4ihNydg3etI+FiRX5l8tHj8npOLM0boW+BSsr2kVZw44tprg==