一、信息泄露的原因
开发人员把敏感信息硬编码在前端 JavaScript 里——API key、内网地址、测试账号密码、JWT secret,直接写死在 js 文件中扔进生产环境。
版本控制系统(Git/SVN/CVS/DS_Store)暴露在 Web 目录下——开发人员把整个项目拷到服务器上部署,.git 文件夹没删,攻击者拿到 /.git/HEAD 就能把整个仓库拖下来,源码、配置文件、历史 commit 里的敏感信息全暴露。
备份文件和临时文件未清理——编辑器自动保存的 .swp / .swo / .bak / .old / .tmp 文件,开发人员调试时扔在服务器上就不管了。config.php.bak 被直接访问,里面可能有数据库密码和 SMTP 凭据。
Web 服务器配置不当导致目录列表开启——nginx 的 autoindex on 或者 Apache 的 Indexes 选项,攻击者访问没有 index 文件的目录,服务器直接列出所有文件和子文件夹。
错误信息/调试信息直接返回给前端——SQL 报错带数据库表名和字段名、堆栈追踪带服务器绝对路径和框架版本、自定义错误页暴露内网 IP。
API 接口返回了超出前端需要的字段——/api/user/123 返回了 password_hash、salt、手机号、身份证号,其实前端只需要昵称和头像。GraphQL introspection 开了以后可以查完整 schema。
未授权访问和越权(IDOR)——敏感端点没做认证校验,把 user_id=123 改成 user_id=124 就能拿到别人数据。
搜索引擎缓存和快照——Google dork(site:target.com filetype:pdf “confidential”)能翻出被抓到的敏感文档。
第三方服务/平台的信息暴露——代码托管在公开仓库(GitHub、GitLab、Gitee),敏感配置没进 .gitignore。
HTTP 响应头和元数据泄露——Server 头带版本号、X-Powered-By 带框架版本、X-AspNet-Version 带 .NET 版本。
业务逻辑导致的信息泄露——注册时提示"用户名已存在"就是用户名枚举。密码找回接口返回不同错误信息可做账户枚举。
文件和日志暴露——error.log、debug.log、app.log 没做访问控制,里面可能记录了 session token、请求参数。phpinfo() 页面没删。
Swagger/OpenAPI 文档暴露——/swagger-ui.html、/api-docs 暴露了完整的 API 端点、参数、认证方式。
Spring Boot Actuator 暴露——/actuator/env 返回环境变量、/actuator/mappings 返回所有路由、/actuator/heapdump 返回内存 dump 含 session token。
依赖清单暴露——composer.json/lock、package.json、requirements.txt、pom.xml 等暴露所有依赖的精确版本,攻击者直接按版本匹配已知 CVE。
二、信息泄露漏洞集合
Git/SVN/CVS 泄露——/.git/HEAD、/.git/config、/.svn/entries、/CVS/Entries 直接拖源码。
源码文件直接访问——.php.bak、.php~、.php.swp、.php.old 被当成纯文本回传。
目录遍历(Directory Listing)——/uploads/、/backup/、/logs/ 目录下文件一览无余。
敏感文件未授权访问——.env 暴露数据库密码和 JWT key、.DS_Store 暴露目录结构、robots.txt 暴露不想被爬的目录。
API 敏感信息过度返回——用户接口返回 password_hash 和 salt、订单接口返回真实姓名和手机号。
GraphQL Introspection 泄露——查询 schema 和 type 拿到整个 API 结构。
IDOR——修改 URL 中的对象 ID 访问他人数据。
SQL 报错信息泄露——注入时数据库直接返回表结构、字段名、数据示例。
堆栈追踪泄露——框架报错页暴露服务器绝对路径、框架版本号、内部类名和方法调用链。
HTTP 响应头信息泄露——Server、X-Powered-By、X-AspNet-Version 告诉攻击者版本。
业务逻辑枚举——登录接口区分"用户不存在"和"密码错误"、注册接口判断用户名唯一性。
搜索引擎信息泄露——Google/Bing/Shodan 抓到的内部文档、测试页面、后台地址。
CORS 配置不当——Access-Control-Allow-Origin: * 配合 credentials: true,任意源带 Cookie 发请求。
JSONP 劫持——老接口 JSONP 跨域未校验 Referer,跨站读取敏感数据。
WebSocket 泄露——ws:// 连接无认证,直接推送敏感消息。
XXE 文件读取——通过 XML 外部实体注入读取 /etc/passwd、配置文件、源码。
SSRF 打内网——访问内网配置管理页面、云元数据接口(169.254.169.254)。
Spring Boot Actuator 泄露——/actuator/env、/actuator/mappings、/actuator/heapdump。
Swagger/OpenAPI 文档泄露——/swagger-ui.html、/api-docs、/v2/api-docs。
Debug 模式信息泄露——Django DEBUG=True 暴露配置、Laravel debug 暴露 .env、Flask debug 可执行代码。
依赖清单泄露——composer.lock、package-lock.json、Gemfile.lock 暴露精确版本号。
CI/CD 配置泄露——Jenkinsfile、.gitlab-ci.yml、.github/ 暴露构建脚本、内部服务地址、密钥变量名。
Docker 配置泄露——Dockerfile、docker-compose.yml 暴露内部端口映射、环境变量、服务依赖拓扑。
部署脚本泄露——setup.sh、deploy.sh、install.sh、entrypoint.sh 经常含数据库密码和 API key。
Composer 依赖清单——vendor/composer/installed.json 暴露所有 PHP 包的名称和精确版本。
时序攻击/响应时间差异——通过响应时间判断用户名是否有效。
三、信息泄露关键文件清单
环境与配置类
/.env——Laravel/Symfony 环境变量文件,含 APP_KEY、DB_PASSWORD、JWT_SECRET、MAIL_PASSWORD、AWS_SECRET。
/.env.backup / .env.example / .env.production——同上的备份或不同环境。
/config.php / config.php.bak / config.php~——PHP 项目的数据库配置、SMTP 配置、加密密钥。
/wp-config.php——WordPress 配置文件,数据库账号密码、认证盐值(AUTH_KEY、SECURE_AUTH_KEY)。
/application/config/database.php——CodeIgniter 数据库配置。
/settings.py / /local_settings.py——Django 配置,SECRET_KEY、数据库配置。
/appsettings.json / appsettings.Development.json——.NET Core 配置,连接字符串、JWT key。
/application.properties / application.yml——Spring Boot 配置,数据库连接、Redis 密码。
/WEB-INF/web.xml——Java Web 部署描述符,servlet 映射、安全约束。
版本控制类
/.git/config——Git 仓库配置,可能含仓库 URL 和认证信息。
/.git/HEAD / /.git/logs/HEAD / /.git/index——拖整个源码仓库的起点。
/.git/ORIG_HEAD / /.git/FETCH_HEAD——分支合并和 fetch 历史。
/.svn/entries / /.svn/wc.db——SVN 版本信息。
/.DS_Store——macOS 目录元数据,推断目录内的文件和文件夹。
备份与临时文件
/database.sql / dump.sql / backup.sql——数据库完整备份,可能含所有用户数据。
/backup/ / /db_backup/ / /sql/——备份目录,含多个时间点的数据库备份。
.bak / .back / .old / .orig / *.save——任意源码文件的备份。
.swp / .swo——Vim 交换文件,含正在编辑的文件内容。
~ / ..un~——编辑器自动保存的临时文件。
/## / .#——Emacs 的自动保存和锁定文件。
日志与调试类
/error.log / debug.log / access.log——Apache/nginx 日志,含请求路径、参数、cookie。
/storage/logs/laravel.log——Laravel 日志,可能含 session token、SQL 语句。
/runtime/logs/——ThinkPHP 运行日志,含配置信息和 SQL 语句。
/phpinfo.php / info.php / test.php——phpinfo() 页,暴露系统环境、扩展、真实路径。
/console / /admin-console / /debug——管理控制台未做访问控制。
识别与元数据类
/robots.txt——第一个要看的东西,Disallow 的目录就是敏感目录。
/sitemap.xml——网站结构地图,暴露所有页面 URL。
/crossdomain.xml——Flash 跨域策略,allow-access-from domain=“*” 存在跨域漏洞。
/security.txt——安全联系信息,可能暴露内部安全团队邮箱。
/humans.txt——网站团队信息,偶尔含目录结构。
API 与认证类
/api-docs / swagger.json / /v2/api-docs / /v3/api-docs——Swagger/OpenAPI 文档,全部 API 接口。
/graphql——GraphQL 端点,配合 introspection 查询完整 schema。
/wp-json/wp/v2/users——WordPress REST API,暴露所有用户名和 ID。
/api/auth/token / /api/login——认证端点暴露认证方式。
/api/health / /api/status / /api/version——健康检查和版本接口,返回服务器信息。
云平台与基础设施
/latest/meta-data/ / /latest/user-data——AWS 元数据端点(169.254.169.254),含 IAM 凭证。
/metadata/instance——Azure 元数据端点。
/computeMetadata/v1/instance/——GCP 元数据端点。
/.well-known/——RFC 标准端点,含 security.txt、openid-configuration 等。
依赖与构建配置
/vendor/composer/installed.json——Composer 依赖清单,暴露所有 PHP 包名和版本。
/package.json / /yarn.lock——Node.js 依赖和脚本,暴露 npm 包版本。
/package-lock.json——npm 依赖树和版本锁定信息。
/Dockerfile / /docker-compose.yml——容器构建配置,暴露端口映射、环境变量。
/Jenkinsfile / /.gitlab-ci.yml / /.github/——CI/CD 配置,暴露构建流程、内部地址、密钥变量名。
/pom.xml / /build.gradle——Java/Kotlin 项目配置,暴露内部依赖和仓库地址。
/requirements.txt / /Pipfile / /Pipfile.lock / /pyproject.toml——Python 依赖和锁定版本。
/Gemfile / /Gemfile.lock——Ruby 项目依赖,含 gem 版本和源位置。
/Cargo.toml / /Cargo.lock——Rust 项目依赖和特性开关。
/go.mod / /go.sum——Go module 依赖和校验信息。
/composer.json / /composer.lock——PHP 依赖树和版本,配合已知 CVE 打。
/Makefile / /GNUmakefile——编译和部署命令,暴露内部路径和部署目标。
/README.md / /CHANGELOG.md / /CONTRIBUTING.md——项目文档,可能含内网地址、部署指引。
/setup.sh / /install.sh / /deploy.sh / /init.sh——部署脚本,经常含数据库密码、API key。
/docker-entrypoint.sh / /entrypoint.sh——容器启动脚本,含初始化 root 密码。
信息泄露 — 渗透测试笔记
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法