敏感文件泄露

一、漏洞原理

敏感文件泄露是指 Web 应用由于配置不当、权限错误或运维疏忽,将本应保密的文件暴露在公网,攻击者可以直接访问或下载这些文件,从而获取敏感信息。

核心成因

  • 目录索引功能开启(Directory Listing),攻击者可浏览文件列表
  • 备份文件、临时文件未删除
  • 版本控制目录(.git、.svn)暴露
  • 配置文件未被保护
  • Web 服务器解析规则不当,导致源码直接输出而非执行
  • 运维管理后台(phpinfo、phpMyAdmin 等)对外暴露
  • 日志文件放置在 Web 目录下

与文件读取/文件包含的区别

  • 文件读取:需要利用路径穿越或伪协议主动读取文件
  • 文件包含:将文件作为代码执行
  • 敏感文件泄露:文件因配置问题直接被暴露,无需绕过,直接访问即可下载

CTF 中的常见目标

  • 源码泄露 → 代码审计发现漏洞
  • 配置文件泄露 → 获取数据库密码、密钥
  • .git 泄露 → 还原完整源码和历史提交
  • 备份文件 → 获取源码或数据库
  • 日志文件 → 发现敏感操作或注入点

二、常见的敏感文件泄露类型

2.1 目录浏览(Directory Listing)

Web 服务器(Apache、Nginx、IIS)在未配置默认首页且开启了目录索引时,访问目录会直接显示文件列表。

常见情况

  • 上传目录:/uploads//images//files/
  • 备份目录:/backup//bak//old/
  • 管理目录:/admin//manage/
  • 日志目录:/logs/
  • 临时目录:/tmp//temp/

利用方式:直接浏览目录,发现敏感文件并下载。

2.2 源码文件泄露

由于配置不当或解析漏洞,.php.jsp.asp 等脚本文件没有被解析执行,而是以源码形式直接输出。

常见原因

  • Apache 未加载 PHP 模块,直接返回 PHP 源码
  • Nginx 配置错误,某些路径下脚本不解析
  • 文件扩展名被修改(如 index.php.bak
  • 测试文件残留

CTF 中常见的源码泄露场景

  • /index.php.bak
  • /index.php~(vim 临时文件)
  • /index.php.swp(vim 交换文件)
  • /index.php.old
  • /.index.php.swp(隐藏交换文件)
2.3 备份文件泄露

开发人员或运维人员创建备份时,常使用特定后缀,如果这些文件留在 Web 目录下,会被直接下载。

常见备份文件后缀

后缀 来源
.bak 通用备份文件
.back 通用备份
.old 旧版本文件
.orig 原始文件
.save 保存的副本
.txt 将代码另存为文本
~ vim 自动备份
.swp vim 交换文件(正在编辑时)
.swo vim 交换文件
.zip / .tar.gz 压缩备份整个站点
.sql / .dump 数据库备份
.7z / .rar 压缩备份

生成规则:文件名后直接加后缀,或替换扩展名:

复制代码
index.php.bak
index.php~
index.php.old
index.bak
web.zip
wwwroot.tar.gz
2.4 版本控制文件泄露(.git / .svn / .DS_Store)

(1).git 泄露

开发者将整个 .git 目录部署到生产环境,攻击者可以下载完整的 Git 仓库,还原所有历史版本的源码。

常见访问路径

复制代码
/.git/HEAD
/.git/config
/.git/index
/.git/logs/HEAD
/.git/refs/heads/master
/.git/objects/...

利用工具

  • GitHacker:下载并还原 Git 仓库

    bash 复制代码
    python GitHacker.py --url http://target.com/.git/ --output-folder result
  • GitHack

    bash 复制代码
    python GitHack.py http://target.com/.git/
  • git-dumper

    bash 复制代码
    ./git-dumper.py http://target.com/.git/ ./output

还原后可以

  • 查看完整源码
  • 查看提交历史,发现曾经存在的漏洞或敏感信息
  • 对比历史版本,发现已删除的敏感配置

(2).svn 泄露

SVN 版本控制系统的 .svn 目录泄露,可以还原源代码。

常见访问路径

复制代码
/.svn/entries
/.svn/text-base/
/.svn/wc.db

利用工具

  • svnExploitSeay SVN 漏洞利用工具
  • dvcs-ripperrip-svn.pl -u http://target.com/.svn/

(3).DS_Store 泄露

Mac 系统在目录下自动生成的隐藏文件,包含目录结构信息。

常见路径

复制代码
/.DS_Store
/uploads/.DS_Store
/images/.DS_Store

利用工具ds_store_exp

bash 复制代码
python ds_store_exp.py http://target.com/.DS_Store
2.5 配置文件泄露

Web 应用或框架的配置文件包含数据库密码、密钥、API Token 等敏感信息,如果不限制访问,会造成严重危害。

常见泄露文件

文件 说明
.env Laravel、Symfony 等框架环境配置,含数据库密码
config.php / config.inc.php PHP 配置文件
web.config ASP.NET 配置文件
application.properties Spring Boot 配置
settings.py Django 配置文件
wp-config.php WordPress 配置
database.yml Ruby on Rails 数据库配置
redis.conf Redis 配置
my.cnf MySQL 配置
.htaccess Apache 目录配置(可能泄露规则)
.bash_history Shell 历史命令
.mysql_history MySQL 客户端历史
id_rsa / id_rsa.pub SSH 私钥/公钥
known_hosts SSH 已知主机列表
2.6 日志文件泄露

Web 服务器、应用或系统的日志文件如果放在 Web 目录下,可能被直接访问。

常见日志文件

复制代码
/access.log
/error.log
/logs/access.log
/logs/error.log
/log/app.log
/runtime/logs/
/storage/logs/laravel.log
2.7 运维管理后台泄露

常见敏感页面

  • phpinfo.php --- PHP 环境信息(路径、配置、版本等)
  • phpmyadmin/ --- 数据库管理工具
  • adminer.php --- 单文件数据库管理
  • actuator --- Spring Boot 监控端点
  • /_debugbar/ --- Laravel Debugbar
  • /swagger-ui.html --- API 文档
  • /druid/ --- 阿里 Druid 监控
  • /server-status --- Apache 服务器状态
  • /nginx_status --- Nginx 服务器状态
2.8 其他常见敏感文件
文件 说明
robots.txt 可能泄露不想被爬取的敏感路径
sitemap.xml 站点地图,可能泄露后台路径
crossdomain.xml Flash 跨域策略,可能配置不当
clientaccesspolicy.xml Silverlight 跨域策略
.travis.yml CI/CD 配置,可能含密钥
Dockerfile Docker 构建文件
docker-compose.yml Docker Compose 配置
composer.json PHP 依赖信息
package.json Node.js 项目信息
Gemfile Ruby 依赖信息
CHANGELOG.md 版本变更记录
README.md 项目说明文档

三、CTF 中常见的敏感文件发现方式

3.1 目录扫描(DirBuster / Dirsearch / ffuf)

使用工具批量扫描目录和文件:

bash 复制代码
# dirsearch
python dirsearch.py -u http://target.com/ -e php,bak,txt,zip,old,swp,~,git,env

# ffuf
ffuf -u http://target.com/FUZZ -w wordlist.txt

# gobuster
gobuster dir -u http://target.com/ -w wordlist.txt -x php,txt,bak,zip

CTF 常用字典

  • common.txt
  • directory-list-2.3-medium.txt
  • 包含备份后缀的专项字典
  • 包含 .git.svn 的版本控制字典
3.2 手工探测常见路径

针对性地尝试常见备份文件:

复制代码
index.php.bak
index.php~
index.php.swp
index.php.old
index.php.save
index.bak
.zip
.tar.gz
.sql

尝试版本控制目录:

复制代码
/.git/
/.svn/
/.DS_Store

尝试配置文件:

复制代码
/.env
/config.php.bak
/application.properties
/wp-config.php.bak
3.3 robots.txt / sitemap.xml 分析

有时题目在 robots.txt 中故意留下线索:

复制代码
User-agent: *
Disallow: /admin/
Disallow: /backup/
Disallow: /flag.txt

直接访问这些路径可能会有发现。


四、CTF 实战示例

4.1 场景一:备份文件泄露

题目描述:一个简单的 PHP 网站,只有首页。目标是获取 Flag。

步骤

  1. 信息收集

    访问首页,查看源代码无异常。尝试访问常见备份文件。

  2. 探测备份文件

    复制代码
    /index.php.bak → 404
    /index.php~ → 200,下载到 vim 备份文件
  3. 查看备份源码

    index.php~ 中包含数据库连接代码和 Flag 验证逻辑:

    php 复制代码
    <?php
    $flag = 'flag{backup_file_leak}';
    // 或者从数据库中查询
    $db_pass = 'admin123';
    ?>
  4. 拿到 Flag :直接提交 flag{backup_file_leak}

4.2 场景二:.git 泄露

题目描述:一个网站,页面简单。给出提示"开发者可能忘记了一些事情"。

步骤

  1. 探测 .git 目录

    访问 /.git/HEAD,返回 ref: refs/heads/master,确认存在 .git 泄露。

  2. 使用工具下载还原

    bash 复制代码
    python GitHack.py http://target.com/.git/

    得到完整源码。

  3. 分析源码

    查看 index.php,发现有一段被注释掉的代码:

    php 复制代码
    // TODO: 删除测试代码
    // $flag = 'flag{g1t_l3ak_1s_d4ng3r0us}';
  4. 查看 Git 提交历史

    bash 复制代码
    git log
    git show <commit-id>

    在某次历史提交中发现 Flag。

4.3 场景三:.env 泄露

题目描述:Laravel 框架的网站,页面 500 错误。

步骤

  1. 探测配置文件

    访问 /.env,返回环境配置文件内容:

    复制代码
    APP_KEY=base64:xxx
    DB_PASSWORD=supersecret
    FLAG=flag{env_l3ak_c0nfig}
  2. 直接获得 Flag

4.4 场景四:源码泄露 + 代码审计

题目描述 :网站存在文件上传功能但做了过滤。目标:Getshell 读取 /flag

步骤

  1. 发现源码泄露

    访问 /index.php.bak,下载源码。

  2. 审计上传逻辑

    php 复制代码
    $blacklist = ['php', 'phtml', 'pht'];
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    if (in_array($ext, $blacklist)) {
        die('不允许');
    }

    发现黑名单不包含 .phar.shtml

  3. 绕过上传

    上传 shell.phar(内容为 <?php system('cat /flag');?>),成功。

  4. 访问上传文件

    http://target.com/uploads/shell.phar,代码执行,获得 Flag。


五、敏感文件泄露的防御措施

  • 关闭目录索引 :Apache 中 Options -Indexes,Nginx 中移除 autoindex on

  • 删除备份和临时文件 :部署后清理 .bak~.swp.old 等文件,建立清理脚本。

  • 不部署版本控制目录.git.svn 不应出现在 Web 目录,可通过 .htaccess 或 Nginx 规则禁止访问:

    复制代码
    # Apache
    RewriteRule ^(.*/)?\.git/ - [F,L]
    
    # Nginx
    location ~ /\.git {
        deny all;
    }
  • 配置文件保护

    • .env 文件放置于 Web 目录之外
    • 使用 .htaccess 禁止访问 .* 文件
    • Nginx 禁止访问隐藏文件:location ~ /\. { deny all; }
  • 运维页面限制 IP 访问phpinfo.phpphpmyadmin 等只允许内网访问。

  • 日志文件放在 Web 目录之外,或设置正确的权限。

  • 最小权限原则:敏感文件的文件权限应设为 Web 用户不可读(如果不需要)。

  • 部署检查清单:上线前检查是否遗留在开发过程中的临时文件。


六、总结

  • 敏感文件泄露本质是运维疏忽和配置不当,而非代码漏洞,但危害同样严重。
  • CTF 中考察的是信息收集能力对常见泄露场景的熟悉程度
  • 核心套路:目录扫描 → 备份文件探测 → 版本控制还原 → 配置文件读取 → 源码审计 → 漏洞利用。
  • .git 泄露和 .env 泄露是 CTF 中最常见的高危泄露场景。
  • 防御措施简单但容易被忽视,属于"低级错误"类型。
相关推荐
网渡科技3 小时前
GEO搜索优化:大模型引用率提升的六大实战策略
人工智能·搜索引擎·chatgpt
lupai3 小时前
手机归属地查询 API 新手接入指南
大数据·智能手机·api接口
数据皮皮侠AI3 小时前
上市公司数字供应链金融指数(2010-2024)
大数据·人工智能·算法
ACP广源盛139246256734 小时前
DeepSeek‑V4‑Flash 公测@ACP#昇腾 950 国产算力组合落地,国产 PCIe 交换芯片 IX9104 有哪些硬件机会
大数据·数据库·人工智能·分布式·单片机·嵌入式硬件·microsoft
2601_949499945 小时前
芯瑞科技400G VR4 QSFP-DD光模块:低功耗高密短距互联方案,赋能AI智算中心算力网络升级
大数据·运维·网络·人工智能·科技·光模块
Raas1006 小时前
MAIGateway,魔芋企业级AI网关的FinAPI成本归因设计
大数据·人工智能·网关·api网关·finapi
Pokerhead6 小时前
一个 Codex,能装下所有 AI 模型?
大数据·人工智能·ai·大模型·ai编程·codex
RD_daoyi7 小时前
Google核心算法不再通知!全年持续滚动更新
大数据·服务器·前端·网络·搜索引擎·.net
2601_962966647 小时前
会计岗位进阶指南:8 张国家认可证书阶梯解析
大数据·数据分析
科技绘图7 小时前
特种工业场景安全升级:UWB定位设备关键选型指标与供给侧格局解析
大数据·安全