在安拉的名义下,至仁至慈。 一切赞颂全归安拉,养育众世界的主。
我决定今天测试一下 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 注入登录,甚至不需要密码。
第四个漏洞: 由于授权检查不当导致个人身份信息泄露。
注意:普通用户的授权令牌同样有效。
我从端点中移除了 /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==