如何把一个无聊的图片下载器变成 IDOR 金矿

30 阅读4分钟

官网:http://securitytech.cc/

如何把一个无聊的图片下载器变成 IDOR 金矿

各位漏洞猎人和安全爱好者,大家好!今天我很兴奋地分享我最近一次漏洞挖掘经历。这起故事发生在一个普通的下午, 打电话给我,让我们一起去挖漏洞。我们组队、侦察目标一个小时后确定了一个不错的目标,然后正式开干。自动化信息收集工具在后台嗡嗡作响,我们打开 Burp Suite 开始测试。大多数接口都很无聊,没有什么亮点。

直到我们发现了一个有意思的功能:一个背景图片去除工具,用户上传的图片会在数据库里保存 30 天

自然,黑客脑子马上开始想: 我们能访问其他用户上传的图片吗?


最初的火花:发现可疑接口

我们研究了正常用户操作过程中的网络请求。发现用户下载处理后的图片时会访问一个接口:

redacted.com/ImageDownlo….jpeg

直接访问这个 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 分数没有拉满,但我们学到了很多。
    
    ---
    
    # **完整截图展示**
    
    请按回车或点击图片查看原图大小:
    
    ![示例图片](attachment://image1)
    
    ---
    
    # **漏洞挖掘经验总结**
    
    漏洞挖掘并不总是 0day 或炫酷链子,有时「无聊」功能才隐藏真正的宝藏。
    
    从这个 IDOR 我们学到:
    
    - **耐心非常重要**
    - **脚本自动化是突破瓶颈的关键**
    - **可预测的标识符永远是开发者的大坑**
    
    
    # 公众号:安全狗的自我修养
    
    # vx:2207344074
    
    # Gitee:gitee.com/haidragon
    
    # GitHub:github.com/haidragon
    
    # Bilibili:haidragonx
    
    ![](https://mmbiz.qpic.cn/sz_mmbiz_png/vBZcZNVQERHYgfyicoHWcBVxH85UOBNaPZeRlpCaIfwnM0IM4vnVugkAyDFJlhe1Rkalbz0a282U9iaVU12iaEiahw/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1&randomid=z84f6pb5&tp=webp)