技术领域: Web应用安全 / 信息泄露 / 代码审计
分析目标: 常见开发/运维环境下的敏感文件残留利用
一、 核心技术背景
在Web安全领域,信息泄露(Information Disclosure)往往是攻击链条的第一步。开发人员或运维人员在进行代码迭代、系统调试或使用特定操作系统/编辑器时,常会不经意间在Web根目录下留下备份文件或临时缓存。攻击者通过这些文件获取后端逻辑,从而为进一步的渗透(如弱类型绕过、SQL注入等)提供情报。
二、 典型漏洞场景与复现分析
- 网站源码压缩包泄露
- 技术原理: 运维人员将整个网站源码打包(如 www.zip)进行迁移或备份,但完成后未及时删除。
- 复现过程:
- 通过目录扫描工具或手动构造请求访问 /www.zip。
- 下载并解压缩,获取其内部文件结构(包含 index.php 及相关文本文件)。
- 核心发现: 在本地解压后的目录中发现名为 flag_2322625750.txt 的文件。
- 利用: 意识到源码只是结构备份,真正的 Flag 位于远程服务器。直接访问 URL:http://target/flag_2322625750.txt 成功获取目标字符串。
- 单文件备份泄露 (.bak)
- 技术原理: 开发人员在修改核心脚本(如 index.php)前,手动将其复制为 index.php.bak。由于 Web 服务器(如 Nginx/Apache)默认不解析 .bak 后缀,该文件会以纯文本形式被下载。
- 复现过程:
- 访问 http://target/index.php.bak。
- 获取源码后进行阅读,直接在 PHP 代码的注释行中(// FLAG: …)提取到隐藏的信息。
- 编辑器缓存残留 (.swp)
- 技术原理: 在 Linux 环境下使用 Vim 编辑器时,若操作异常中断(如 SSH 断开),会生成一个以点开头、以 .swp 结尾的二进制隐藏文件。
- 复现过程:
- 构造隐藏文件路径访问:/.index.php.swp。
- 下载得到二进制文件。虽然记事本打开显示大量乱码,但可以通过关键字搜索定位关键信息。
- 高级利用: 在 Linux 环境下使用 vim -r index.php.swp 命令可直接恢复完整的原始 PHP 源码。
- 操作系统属性文件泄露 (.DS_Store)
- 技术原理: macOS 系统会自动在每个文件夹下生成 .DS_Store,其中记录了该文件夹下的所有文件名。
- 复现过程:
- 访问下载 /.DS_Store。
- 情报提取: 在文件的二进制流中搜索,识别出一个长随机字符命名的 txt 文件名(如 91ef58…de4.txt)。
- 精准打击: 直接请求该隐藏路径,获取最终数据。
三、 综合进阶:后端逻辑漏洞与弱类型绕过
案例:[ACTF2020 新生赛] BackupFile
在获取备份文件(index.php.bak)后,通过对源码的审计发现如下关键代码:
include_once “flag.php”;
if(isset(_GET[‘key’])){key =
𝐺𝐸𝑇[′𝑘𝑒𝑦′];//关卡1:𝑘𝑒𝑦不能是纯数字𝑖𝑓(!𝑖𝑠𝑛𝑢𝑚𝑒𝑟𝑖𝑐(key)){
// 关卡2:key要等于预设的复杂字符串
if(
key == “123ffwsfwef…”){
echoflag;
}
}
}
技术点分析:
弱类型比较 (Loose Comparison): PHP 的 == 操作符在处理数字与字符串比较时,如果字符串以数字开头,会将其转换为对应的数字。
绕过思路: 字符串 “123ffwsf…” 在进行 == 运算时会被 PHP 隐式转换为整数 123。
最终 Payload: ?key=123。此输入能同时满足逻辑判断并成功触发 Flag 输出。
四、 防御修复方案与最佳实践上线清理标准:
- 建立 CI/CD 流程,在自动化部署环节加入敏感后缀(.zip, .bak, .swp, .sql, .DS_Store)的检测与强制删除机制。
服务器安全加固:
- Nginx 示例配置: 禁止访问所有隐藏文件(以点开头的文件)及特定敏感后缀。
location ~* /.(?!well-known) { deny all; }
location ~* .(bak|swp|zip|tar.gz|rar|sql)$ { deny all; }
- Nginx 示例配置: 禁止访问所有隐藏文件(以点开头的文件)及特定敏感后缀。
开发环境隔离:
- 禁止在生产环境直接进行代码编辑。
- 规范使用版本控制系统(Git/SVN),并正确配置 .gitignore,防止将系统冗余文件推送到远程仓库。
这份报告将多个分散的知识点串联成了一个完整的逻辑体系。如果你想继续研究,我们可以聊聊 Git 泄露的 index 文件重构原理,或者开始接触 PHP 序列化与反序列化 漏洞。