一个简单的401错误如何泄露系统关键信息
有时候,最有趣的漏洞会在你最不经意的时候出现。
在对目标网站进行侦察后,我发现了一个看起来相当普通的端点…那天我并没有做什么特别的事情,只是在探索一个需要登录访问的闪卡式网站。当我进入页面时,弹出了一个小的登录提示:
“您必须登录才能访问此内容。”
没什么大不了的。我没有有效的用户名或密码,所以我打开了Burp Suite来查看后台发生了什么。
奇怪的401未授权错误
当我拦截请求时,响应返回为:
|
|
到目前为止都很正常。但随后有东西引起了我的注意 - 响应体不是空的。
通常,401响应只告诉你未获得授权。但这个错误消息下面有一大段文本。出于好奇,我向下滚动…
💥 就在这时我看到了它
隐藏在401响应中的是你在生产环境中永远不应该看到的一切:
- 明文用户名和密码
- API密钥
- 令牌值
- 摄像头IP
- 根访问凭证
- 甚至内部服务器路径
起初,我以为是我的代理出了问题,但不对 - 服务器确实在每个未授权响应中都转储了内部配置数据。
感觉就像打开了一个标有"请勿打开"的宝藏箱 😅
根本原因
深入挖掘后,我意识到可能发生了什么:
该网站使用了一个自定义错误处理程序,该程序将内部环境变量或调试信息打印到响应中。
当开发人员配置401未授权消息时,他们一定不小心包含了用于调试的敏感服务器数据,并在上线前忘记删除它。
这是一个典型的信息泄露漏洞,由错误的错误处理引起。
影响
这个漏洞暴露了:
- 管理员凭证
- 访问令牌
- 内部服务IP
- 连接到第三方服务的API密钥
如果落入坏人之手,这很容易导致:
- 账户接管
- 完全服务器入侵
- 数据泄露
经验教训
始终清理你的错误消息。
你的401、403或500响应应该只告诉用户他们需要知道的内容 - 仅此而已。
调试数据属于日志,而不是响应。
正如我现在喜欢说的:
“即使是一个错误页面,也可能是你应用程序中最大的漏洞。”
有时候,你不需要高级的侦察工具或模糊测试器来发现漏洞。
只需要好奇心、耐心和检查每个响应的习惯 - 即使是那些看起来无害的响应。