编辑
2026-09-05
默认
00

目录

我当了一天攻击者,把自己门户站摸了一遍(脱敏版)

我当了一天攻击者,把自己门户站摸了一遍(脱敏版)

9月3号,我给自己的门户站做了一次黑盒渗透测试。规则很干净:把自己当成一个纯路人——不登录、不碰服务器、不看代码,只带一个浏览器从公网进门,看能摸到什么。

当天测完,当天修完。这篇是脱敏版复盘:域名全部隐去,管理面板的产品名、代码符号、修复记录都抹掉了,留下的是发现、根因和当时的决策。

一、最大的洞,是我亲手递出去的地图

测试第一站,门户的聚合接口。这是首页用来渲染导航的接口,匿名访问,正常返回。

问题是我多看了一眼完整响应:里面躺着全部九个内部子服务的域名清单——办公的、存储的、AI 的、内部管理的,一个不少,还附赠访客白名单。

攻击者视角翻译一下:我不用扫描、不用猜,敲一个公开接口,整栋楼的房间号直接递到我手上。剩下的只是挨个敲门。

这事最别扭的地方在于,它不是被打穿的,是我自己交出去的。

二、根因是一行缺省值

回去翻配置,发现每个服务都有个「可见性」字段,而它的缺省逻辑是:你没显式说「隐藏」,我就当你要公开。

九个服务里,只有两个标了公开,剩下七个全是「没填」——于是全放了。

这是典型的缺省值哲学问题:安全这件事上,缺省值决定下限。「默认放行、例外隐藏」意味着每一次忘记配置,都是一次事故;「默认隐藏、例外放行」意味着每一次忘记配置,只是少一个入口。前者把错误当成公开,后者把错误当成保守。显然该选后者。

修复因此很简单:反转缺省值,不标的一律隐藏,只有显式标了 public 的才出门户。补了一条回归测试专门盯这个行为,全量 138 项测试跑绿。再到线上用匿名身份复测,九个域名零残留,访客能看到的导航一个没少。

没有火 plaster,没有紧急回滚——因为当天下午就发现了,损失半径为零。但如果没有这次测试呢?这份内网地图会在公网上挂到什么时候,我不敢想。

三、有两个门,是我故意留的

扫描报告里最扎眼的一条:两个内部管理面板,知识库面板和 agent 网关面板,匿名用户可以直接打开登录页。

听起来很吓人,但这是我自己拍板留的。这两个面板挂在访客白名单里,属于「主动暴露」策略:数据面全部有密钥把守,控制面故意摆在那儿,方便我在任何一台设备上直达。

暴露出去的是什么?登录 UI、密钥的存放位置提示、网关接入端点、几条运维命令的提示。都是脚手架,不是钥匙。真正的门禁在密钥那层,而密钥不在公网上。

所以处置是「不修」。这条也提醒了未来的安全审计:这两个面板出现在报告里属于既定策略,别当新发现重复报警。

四、门锁本身,出乎意料地结实

暴露面看完,我开始真正地下手撬门。结果令人愉快:

登录跳转的回跳逻辑,喂它外部域名、主域拼后缀、路径穿越的变体,全部被拒,返回 401。恶意参数进不来,fail-closed,干净。

登录页喂了一段恶意 SVG,不执行、不回显;连输错密码的提示都是固定文案,想靠报错差异枚举用户名,没戏。

注册页用无效邀请码试探,服务端直接 400,页面上红字加提示双保险,而且全程没有产生任何脏数据。

敏感路径全家桶——配置文件、环境变量、调试端点——匿名访问全是 404 或 401;管理接口、密钥接口、用户信息接口,没有凭证一律拒之门外。

安全响应头一个不缺,CSP、HSTS 连子域一起罩住,页面禁缓存,HTTP 强制跳 HTTPS,CORS 不反射外来来源。这套配置是照着清单一项项打的,打得很齐。

五、三个小尾巴

当然不是满分,留下三个尾巴:

博客系统会给匿名访客渲染每篇文章的「编辑」按钮。点了会被博客自己的登录墙拦住,没有越权,但后台路径和系统指纹等于公示了。这是博客系统模板层的毛病,门户代码管不到,先记着。

首页和登录页不认 HEAD 请求,返回 405。浏览器用户无感,但监控器和链接检查器会看见一排 405,不优雅,SPA 路由补上就行。

最遗憾的一条:内网服务被拦截跳登录时,登录链接里带着回跳参数。因为没有测试账号,我没法验证这个参数指向外域时登录后会不会放行——也就是经典的「登录后开放重定向」。挂起,等一个测试账号。

六、复盘

三个带走的教训:

第一,安全下限藏在缺省值里。这次唯一的洞,不是哪个功能写错了,而是「没配置就公开」这一行缺省逻辑。功能写错会有测试兜着,缺省值写错,是给未来的每一次疏忽都预留了通道。

第二,最好的修复是让问题无法发生,而不是防住问题。反转缺省值之后,我不需要记住「新服务要标隐藏」,因为不标就是隐藏。好的安全设计和好的工具设计是一回事:不依赖人的记性。(这条和前几天拆任务队列时的感悟一模一样,看来是通用的。)

第三,自己打自己,性价比意外地高。全程匿名 GET 若干次、两次失败登录探针、一次无效邀请码,没爆破、没写数据、没留负担,却换来一次内网地图的紧急回收和一整套修复。

现在,那九个后门的房间号,地图上找不到了。

(脱敏说明:主域与全部子域名、两个管理面板的产品指纹、代码符号、修复 commit、证据路径均已隐去;发现类型、根因模式、修复思路与处置状态完整保留。)

本文作者:丘丘

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!