今天遇到了一件挺有意思的事。
我在 LINUX DO 上看到一个帖子,里面有个我想下载的 txt 附件:
se图生成提示词大全.txt
点进去之后发现,附件下载需要登录。
正常情况下,到这里无非两个选择:登录,或者算了。
但我突然想试试看,AI 能不能自己把这个文件找出来。
于是我分别把这个问题交给了 GPT5.6 sol high 和 DeepSeek v4 flash max。
结果有点出乎意料:
DeepSeek v4 flash max 没找到。GPT5.6 sol high 找到了。
而且它不是通过什么“黑进后台”的方式,而是沿着网站本身公开暴露的信息,一层一层把真正的附件地址推了出来。
第一层:网站给出的其实是一个 short-url
原帖里的附件链接类似这样:
https://linux.do/uploads/short-url/j52KTqKW9UUwXS7jiq0iktYUrVS.txt
一开始我以为后面那一长串:
j52KTqKW9UUwXS7jiq0iktYUrVS
就是一个普通随机 ID。
但 GPT5.6 sol high 注意到了一个关键点:
LINUX DO 使用的是 Discourse。
而 /uploads/short-url/ 正好是 Discourse 的附件短链接机制。
这意味着这串字符很可能不是随机生成的。
第二层:short-url 里面其实藏着 SHA-1
GPT5.6 sol high 接着去看了 Discourse 对上传文件的处理机制。
结果发现,Discourse 会给上传文件计算 SHA-1,然后把这个 SHA-1 对应的整数用 Base62 压缩,生成一个更短的 URL。
也就是说:
SHA-1
↓
Base62 编码
↓
short-url
反过来当然也成立:
short-url
↓
Base62 解码
↓
SHA-1
于是那串:
j52KTqKW9UUwXS7jiq0iktYUrVS
被还原为了一个标准的 40 位 SHA-1。
到这里,我就已经觉得挺有意思了。
因为这意味着所谓的 short-url,本质上只是把文件哈希换了一种更短的表达形式。
第三层:知道 SHA-1 还不够
但事情还没结束。
有 SHA-1 并不代表就知道文件放在哪里。
接下来还需要知道 LINUX DO 的附件实际存储路径是什么。
这一步 GPT5.6 sol high 并没有傻乎乎地去猜:
1X?
2X?
3X?
4X?
然后一个一个试。
而是去观察 LINUX DO 自己公开页面里已经存在的附件地址。
很快就发现了大量类似这样的结构:
cdn3.ldstatic.com/original/4X/...
于是可以确定:
LINUX DO 当前使用的是 Discourse 的 4X 附件目录结构。
这里有一个很漂亮的规则。
假设 SHA-1 是:
abcdef123456...
那么 4X 结构会把 SHA-1 的前三位拆开:
a / b / c
然后形成类似:
/original/4X/a/b/c/abcdef123456...
也就是说:
SHA-1 前三位拿来分目录,后面再放完整 SHA-1。
LINUX DO 自己公开的附件地址里,可以看到大量这种结构。
第四层:把几块拼起来
到这里,所有信息其实都齐了:
原帖公开的 short-url
↓
识别出 Discourse
↓
Base62 解码
↓
得到 SHA-1
↓
观察 LINUX DO 的公开附件地址
↓
确认使用 /original/4X/
↓
SHA-1 前三位作为三级目录
↓
拼出真实 CDN 地址
最终,GPT5.6 sol high 给出了这个附件实际位于 cdn3.ldstatic.com 上的地址。
我复制到浏览器里。
直接下载成功。
整个过程中没有登录 LINUX DO。
所以,这算“黑进后台”了吗?
不算。
实际上整个过程中都没有发生这些事情:
- 没有拿管理员账号;
- 没有盗 Cookie;
- 没有拿 Token;
- 没有访问数据库;
- 没有执行服务器代码;
- 没有进入管理后台。
它做的事情更接近:
从网站公开暴露的信息中识别系统实现,再根据公开规则推导资源的真实地址。
网站的下载入口要求登录,不代表底层 CDN 本身一定实施了同样的访问控制。
在这个案例里,真正的文件地址仍然可以被直接访问。
所以严格来说,与其说是“破解登录”,不如说是:
绕开了要求登录的下载入口。
那为什么我还是觉得这件事挺惊艳?
因为真正让我感兴趣的并不是“下载到了一个 txt”。
那个文件本身一点都不重要。
真正有意思的是 GPT5.6 sol high 完成这件事时体现出来的一整条推理链:
识别网站框架
→ 识别 URL 机制
→ 查实现规律
→ 进行编码还原
→ 观察真实网站样本
→ 推断目录规则
→ 构造目标地址
→ 实际验证
这已经不是简单的:
“我知道一个知识点,所以我回答你。”
而更像:
“我现在不知道答案,但我知道应该去哪里找线索,并且可以把多个线索组合起来。”
这两种能力的差别其实非常大。
DeepSeek v4 flash max 为什么失败了?
这里我倒不想简单得出:
GPT5.6 sol high > DeepSeek v4 flash max。
因为一次测试显然说明不了模型整体能力。
但至少在我这一次实际使用中,两边给我的体验差距很明显。
DeepSeek v4 flash max 更像是在回答:
“这个链接为什么打不开?”
而 GPT5.6 sol high 开始研究的是:
“这个链接是怎么生成出来的?”
这两个问题看起来只差一点点,最后得到的结果却完全不同。
前者的终点很可能是:
需要登录,所以无法下载。
后者则会继续问:
short-url 是什么? Discourse 怎么生成它? 能不能反推原始文件标识? LINUX DO 实际用什么 CDN? CDN 的目录结构是什么?
然后答案就自己浮出来了。
我觉得这才是 AI Agent 真正有意思的地方
现在大家讨论 AI,经常集中在:
- 谁 benchmark 高两分;
- 谁写代码更快;
- 谁模型参数更多;
- 谁上下文更长。
但实际用下来,我越来越觉得另外一个能力可能更重要:
遇到一个没有现成答案的问题时,它会不会主动拆问题、找线索、验证假设。
因为现实世界的问题往往不会长成一道标准考试题。
现实更像这样:
“这个东西为什么下载不了?”
你甚至不知道真正的问题是什么。
一个好的 AI 不只是回答这个表面问题。
它可能会继续追:
为什么需要登录?
↓
下载入口和实际文件是一回事吗?
↓
这个系统是什么框架?
↓
框架是怎么存附件的?
↓
URL 里面有什么信息?
↓
真实资源在哪里?
直到把问题重新定义。
这次 GPT5.6 sol high 给我的最大感受,其实就是这一点。
最后
所以我最后还是用了一个稍微标题党一点的标题:
GPT5.6 sol high 帮我绕过了网站的下载登录限制,而 DeepSeek v4 flash max 失败了。
但准确地说,它并没有“黑进”任何东西。
它只是做了一件 AI 特别擅长、同时又特别容易被低估的事:
观察信息,识别规则,然后把看似毫无关系的几个线索串起来。
至于那个附件……
反而成了整件事里最不重要的东西。