[红日安全]Web安全Day11 - 敏感信息泄露实战
字数 2127 2025-08-18 11:39:19

Web安全实战:敏感信息泄露漏洞详解与防护

1. 漏洞简介

敏感信息泄露是指由于后台人员的疏忽或不当设计,导致本不该被前端用户访问的数据被轻易获取的安全漏洞。敏感数据包括但不限于:

  • 认证凭据:口令、密钥、证书、会话标识
  • 授权信息:License、授权凭据
  • 个人数据:姓名、住址、电话等隐私数据
  • 系统信息:操作系统、中间件、开发语言版本

这些信息可能存在于:

  • 程序文件
  • 配置文件
  • 日志文件
  • 备份文件
  • 数据库

2. 漏洞分类

2.1 版本管理软件导致的泄露

  • Git泄露:.git/config文件暴露
  • SVN泄露:.svn/entries文件暴露
  • CVS泄露:CVS/Entries文件暴露

2.2 文件包含导致的泄露

  • 编辑器备份文件:.swp, .bak, .old
  • 源码备份文件:www.rar, sitename.tar.gz, web.zip
  • 测试文件:test.php, phpinfo.php, info.php

2.3 配置错误导致的泄露

  • 目录列表未禁用
  • 错误页面暴露敏感信息
  • 管理后台地址暴露
  • HTTP认证信息泄露

3. 漏洞危害

敏感信息泄露虽然常被评为低危漏洞,但会为攻击者提供重要信息,可能导致:

  1. 内网渗透

    • 扫描内网开放服务
    • 攻击内网Web应用(SQL注入、XSS等)
    • 利用file/gopher/dict协议读取文件、执行命令
  2. 直接攻击

    • DOS攻击(通过请求大文件或保持连接)
    • 向内部主机任意端口发送payload
  3. 信息利用

    • 社工攻击(利用泄露的邮箱、分机号等)
    • 生成针对性字典进行暴力破解

4. 测试方法

4.1 自动化测试

  1. 工具扫描

    • weakfilescan:敏感文件扫描
    • BBScan:敏感信息扫描
    • whatweb:Web应用指纹识别
    • dnsenum:DNS信息枚举
  2. 扫描目标

    • 常见敏感文件路径
    • 备份文件后缀(.bak, .swp等)
    • 版本控制目录(.git, .svn等)
    • 管理后台地址(admin.php, login.php等)

4.2 手工测试

  1. Web容器检查

    • 检查HTTP响应头
    • 分析404等错误页面
    • 查看robots.txt文件
  2. 源码审计

    • 检查HTML/CSS/JS中的敏感信息
    • 查找硬编码的凭证和内网接口
  3. 错误触发

    • 输入错误参数观察报错信息
    • 测试非常规文件路径
  4. 第三方平台

    • GitHub搜索敏感信息(如"smtp 163 password")
    • 检查网盘、QQ群等可能泄露的渠道

5. 常见泄露场景

5.1 系统信息泄露

  • 通过nmap扫描获取操作系统版本
  • 从HTTP头或错误页面获取中间件类型和版本
  • phpinfo()页面暴露配置信息

5.2 Web应用信息泄露

  • CMS类型及版本信息
  • 管理后台地址(/admin, /login等)
  • 测试账号密码在源码中硬编码

5.3 网络信息泄露

  • DNS域传送漏洞
  • 运维监控系统弱口令(如zabbix)
  • 网络拓扑图暴露

6. 漏洞修复方案

6.1 数据存储安全

  1. 禁止在代码中存储敏感数据

    • 数据库连接字符串、密钥等不应硬编码
    • 必须存储时应加密处理
  2. 安全存储凭证

    • 密钥和口令必须加密后存储
    • 配置文件权限设置为仅属主可读写

6.2 传输与显示安全

  1. 传输安全

    • 敏感信息不应使用GET方式提交
    • Cookie中存储敏感信息必须先加密
  2. 显示安全

    • 禁止在隐藏域中存放明文敏感数据
    • 用户密码必须加密显示(如使用*号替代)

6.3 日志与错误处理

  1. 日志安全

    • 禁止在日志中记录明文敏感信息
    • 会话标识(jsessionid)等应脱敏
  2. 错误处理

    • 自定义错误页面,避免系统信息泄露
    • 生产环境关闭详细错误提示

6.4 技术实现要求

  1. 加密算法

    • 禁止使用自研加密算法
    • 优先选择不对称加密算法
    • 禁止使用BASE64等编码替代加密
  2. 缓存控制

    • 带有敏感数据的页面应禁止缓存
    • 设置适当的Cache-Control头

6.5 管理措施

  1. 敏感信息定义

    • 根据业务特点明确系统敏感信息范围
    • 建立敏感信息分级保护机制
  2. 开发规范

    • 在SDL中纳入敏感信息处理要求
    • 代码审计时重点关注敏感信息处理

7. 实战案例

案例1:内网hosts文件泄露

  • 漏洞URL:https://game.gtimg.cn/hosts
  • 问题:腾讯内网hosts文件暴露在公网
  • 风险:暴露内网拓扑结构,为内网渗透提供信息

案例2:源码中硬编码凭证

  • 发现方式:查看网页源代码
  • 问题:测试账号密码明文存储在JS文件中
  • 结果:攻击者可直接使用这些凭证登录系统

案例3:错误信息泄露

  • 测试方法:输入错误参数触发异常
  • 问题:错误页面显示数据库表结构、SQL语句等
  • 风险:为SQL注入攻击提供重要信息

8. 总结

敏感信息泄露漏洞虽然看似简单,但往往成为攻击链中的重要环节。防护要点包括:

  1. 最小化原则:只收集、存储必要的敏感信息
  2. 纵深防御:从存储、传输到显示各环节实施保护
  3. 自动化检测:将敏感信息扫描纳入CI/CD流程
  4. 安全意识:加强开发人员的安全培训

通过系统化的防护措施,可以有效降低敏感信息泄露风险,提高整体系统安全性。

Web安全实战:敏感信息泄露漏洞详解与防护 1. 漏洞简介 敏感信息泄露是指由于后台人员的疏忽或不当设计,导致本不该被前端用户访问的数据被轻易获取的安全漏洞。敏感数据包括但不限于: 认证凭据:口令、密钥、证书、会话标识 授权信息:License、授权凭据 个人数据:姓名、住址、电话等隐私数据 系统信息:操作系统、中间件、开发语言版本 这些信息可能存在于: 程序文件 配置文件 日志文件 备份文件 数据库 2. 漏洞分类 2.1 版本管理软件导致的泄露 Git泄露: .git/config 文件暴露 SVN泄露: .svn/entries 文件暴露 CVS泄露: CVS/Entries 文件暴露 2.2 文件包含导致的泄露 编辑器备份文件: .swp , .bak , .old 等 源码备份文件: www.rar , sitename.tar.gz , web.zip 等 测试文件: test.php , phpinfo.php , info.php 等 2.3 配置错误导致的泄露 目录列表未禁用 错误页面暴露敏感信息 管理后台地址暴露 HTTP认证信息泄露 3. 漏洞危害 敏感信息泄露虽然常被评为低危漏洞,但会为攻击者提供重要信息,可能导致: 内网渗透 : 扫描内网开放服务 攻击内网Web应用(SQL注入、XSS等) 利用file/gopher/dict协议读取文件、执行命令 直接攻击 : DOS攻击(通过请求大文件或保持连接) 向内部主机任意端口发送payload 信息利用 : 社工攻击(利用泄露的邮箱、分机号等) 生成针对性字典进行暴力破解 4. 测试方法 4.1 自动化测试 工具扫描 : weakfilescan :敏感文件扫描 BBScan :敏感信息扫描 whatweb:Web应用指纹识别 dnsenum:DNS信息枚举 扫描目标 : 常见敏感文件路径 备份文件后缀(.bak, .swp等) 版本控制目录(.git, .svn等) 管理后台地址(admin.php, login.php等) 4.2 手工测试 Web容器检查 : 检查HTTP响应头 分析404等错误页面 查看robots.txt文件 源码审计 : 检查HTML/CSS/JS中的敏感信息 查找硬编码的凭证和内网接口 错误触发 : 输入错误参数观察报错信息 测试非常规文件路径 第三方平台 : GitHub搜索敏感信息(如"smtp 163 password") 检查网盘、QQ群等可能泄露的渠道 5. 常见泄露场景 5.1 系统信息泄露 通过nmap扫描获取操作系统版本 从HTTP头或错误页面获取中间件类型和版本 phpinfo()页面暴露配置信息 5.2 Web应用信息泄露 CMS类型及版本信息 管理后台地址(/admin, /login等) 测试账号密码在源码中硬编码 5.3 网络信息泄露 DNS域传送漏洞 运维监控系统弱口令(如zabbix) 网络拓扑图暴露 6. 漏洞修复方案 6.1 数据存储安全 禁止在代码中存储敏感数据 : 数据库连接字符串、密钥等不应硬编码 必须存储时应加密处理 安全存储凭证 : 密钥和口令必须加密后存储 配置文件权限设置为仅属主可读写 6.2 传输与显示安全 传输安全 : 敏感信息不应使用GET方式提交 Cookie中存储敏感信息必须先加密 显示安全 : 禁止在隐藏域中存放明文敏感数据 用户密码必须加密显示(如使用* 号替代) 6.3 日志与错误处理 日志安全 : 禁止在日志中记录明文敏感信息 会话标识(jsessionid)等应脱敏 错误处理 : 自定义错误页面,避免系统信息泄露 生产环境关闭详细错误提示 6.4 技术实现要求 加密算法 : 禁止使用自研加密算法 优先选择不对称加密算法 禁止使用BASE64等编码替代加密 缓存控制 : 带有敏感数据的页面应禁止缓存 设置适当的Cache-Control头 6.5 管理措施 敏感信息定义 : 根据业务特点明确系统敏感信息范围 建立敏感信息分级保护机制 开发规范 : 在SDL中纳入敏感信息处理要求 代码审计时重点关注敏感信息处理 7. 实战案例 案例1:内网hosts文件泄露 漏洞URL: https://game.gtimg.cn/hosts 问题:腾讯内网hosts文件暴露在公网 风险:暴露内网拓扑结构,为内网渗透提供信息 案例2:源码中硬编码凭证 发现方式:查看网页源代码 问题:测试账号密码明文存储在JS文件中 结果:攻击者可直接使用这些凭证登录系统 案例3:错误信息泄露 测试方法:输入错误参数触发异常 问题:错误页面显示数据库表结构、SQL语句等 风险:为SQL注入攻击提供重要信息 8. 总结 敏感信息泄露漏洞虽然看似简单,但往往成为攻击链中的重要环节。防护要点包括: 最小化原则 :只收集、存储必要的敏感信息 纵深防御 :从存储、传输到显示各环节实施保护 自动化检测 :将敏感信息扫描纳入CI/CD流程 安全意识 :加强开发人员的安全培训 通过系统化的防护措施,可以有效降低敏感信息泄露风险,提高整体系统安全性。