官网:http://securitytech.cc/
如何把一个无聊的图片下载器变成 IDOR 金矿
各位漏洞猎人和安全爱好者,大家好!今天我很兴奋地分享我最近一次漏洞挖掘经历。这起故事发生在一个普通的下午, 打电话给我,让我们一起去挖漏洞。我们组队、侦察目标一个小时后确定了一个不错的目标,然后正式开干。自动化信息收集工具在后台嗡嗡作响,我们打开 Burp Suite 开始测试。大多数接口都很无聊,没有什么亮点。
直到我们发现了一个有意思的功能:一个背景图片去除工具,用户上传的图片会在数据库里保存 30 天。
自然,黑客脑子马上开始想: 我们能访问其他用户上传的图片吗?
最初的火花:发现可疑接口
我们研究了正常用户操作过程中的网络请求。发现用户下载处理后的图片时会访问一个接口:
直接访问这个 URL 就能下载图片。
但真正有趣的是:我们把 `filename` 换成别人的文件名后,居然能下载 **对方的图片**!
我们测试方法很简单:
注册第二个账号 → 上传图片 → 拿到文件名 → 放到第一个账号的 URL 里
**Boom!能下载!**
这明显是 **IDOR(不安全的直接对象引用)** 漏洞,可以通过猜测或篡改标识符访问不属于你的资源。
我们马上在 YesWeHack 提交了。
但厂商的审核团队给我们来了个下马威:
> **“请给出攻击者如何获取其他用户文件名的 PoC。”**
确实,文件名不是随便就能拿到的。于是我们开始更深入挖掘。
---
# **破解文件名结构**
我们开始分析文件名,发现它不是随机生成的,而是遵循固定模式:
```
<id><用户名字><时间戳>.jpeg
```
例如:
- **ID**:6 位数字,如 `620239`,每创建一个新账号就 +1
- **用户名**:注册时填写的名字,例如 `Alif`
- **时间戳**:上传图片的 Unix 时间,如 `1760364775`
ID 有序且可预测
时间戳也可预测(根据上传时间)
要写 PoC,我们必须「同时」合理猜中 ID + 时间戳,很难,但并非不可能。
我们开始写脚本逆向推导。
---
# **步骤 1:分析文件名模式**
我们自己上传了几张图片并观察文件名结构。模式一致:
- ID 是递增的
- 时间戳和实际上传时间一致
这说明只要知道某个用户的 **用户名**,就可以推算剩下内容。
---
# **步骤 2:倒序枚举 ID**
我们写了脚本从最新的 ID 开始往回枚举。
因为文件会保存 30 天,所以很多老文件仍然有效。
我们扫描 ID 时,发现某些 ID 对应的文件能成功返回,这证明:
✔ ID **不是随机的**
✔ 是严格按顺序增长
---
# **步骤 3:生成与测试时间戳**
然后我们加入时间戳逻辑:
- 按时间倒序生成一系列 Unix timestamp(比如最近几个小时或几天)
- 把它们和每个 ID 组合成大量候选文件名
脚本对每个 URL 发出轻量请求:
- 404 → 文件不存在
- 403 → 拒绝(但路径有效)
- 200 → 成功!文件泄露!
几分钟内我们就拿到了真实用户的图片。
**这证明即使不知道文件名,也能构造成功的命名并下载他人数据。**
---
# **幕后真实难点**
这不是秒出的结果,我们花了数小时调试:
- 有些文件返回静默 404
- 有些只能在 ID+时间戳完美匹配时成功
- 必须过滤大量误报
- 多次验证服务内部规则
这就像解谜游戏,只要一步错,整体推理就乱掉。
最终我们的 PoC 成功展示了攻击路径,审核方也认可了漏洞。
虽然因为需要一定枚举成本,CVSS 分数没有拉满,但我们学到了很多。
---
# **完整截图展示**
请按回车或点击图片查看原图大小:

---
# **漏洞挖掘经验总结**
漏洞挖掘并不总是 0day 或炫酷链子,有时「无聊」功能才隐藏真正的宝藏。
从这个 IDOR 我们学到:
- **耐心非常重要**
- **脚本自动化是突破瓶颈的关键**
- **可预测的标识符永远是开发者的大坑**
# 公众号:安全狗的自我修养
# vx:2207344074
# Gitee:gitee.com/haidragon
# GitHub:github.com/haidragon
# Bilibili:haidragonx
