黑客攻防 OWASP Juice Shop:第一部分——发现关键漏洞
奉至仁至慈的安拉之名。
一切赞颂全归安拉,养育众世界的主。
callgh0st
阅读时长:4 分钟 · 2024年7月27日
--
我决定今天来测试 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==