Linux全局文件信息泄露

在Linux系统(包括Docker容器)中,即使以低权限用户(如nobody)运行,也有大量全局可读的文件可能成为信息泄露的来源。攻击者或安全研究人员会系统地检查这些文件,以了解系统配置、寻找凭证、发现代码漏洞或获取下一步攻击的线索。

以下是这些可能泄露信息的文件和目录的全面总结,按位置和重要性分类:

1. /proc - 进程和内核信息系统

/proc是一个虚拟文件系统,它实时反映了内核和进程的状态。这是获取动态信息的金矿,几乎所有文件都是全局可读的。

  • /proc/self/environ
    • 内容: 当前进程的环境变量,以 KEY=VALUE 的形式,用空字节(\x00)分隔。
    • 泄露风险: 极高。可能包含数据库连接字符串、API密钥、密码、第三方服务的访问令牌、应用密钥(Secret Key)等。
    • 示例: DATABASE_URL=postgres://user:password@host:port/db
  • /proc/self/cmdline
    • 内容: 启动当前进程的完整命令,参数同样以空字节分隔。
    • 泄露风险: 。启动参数中可能硬编码了密码、配置文件路径或敏感的配置信息。
    • 示例: python app.py --secret-token=abcdef123456
  • /proc/self/cwd
    • 内容: 一个指向当前进程工作目录的符号链接。
    • 泄露风险: 低。但可以确认应用程序的根目录位置,帮助攻击者构造其他文件的相对路径。
  • /proc/self/mountinfo/proc/mounts
    • 内容: 当前容器的文件系统挂载信息。
    • 泄露风险: 中。可以揭示容器使用了哪种文件系统(如OverlayFS),有时会泄露Docker在宿主机上存储层的部分路径结构,为更高级的攻击提供信息。
  • /proc/version
    • 内容: Linux内核的版本信息。
    • 泄露风险: 低。但可用于查找特定版本的内核漏洞,进行权限提升。
  • /proc/net/tcp, /proc/net/udp
    • 内容: 当前的网络连接状态。
    • 泄露风险: 中。可以发现应用正在监听哪些端口,或正在与哪些内部/外部IP地址通信,帮助绘制网络拓扑。

2. /etc - 系统配置文件

存放系统级软件的配置文件,大部分是全局可读的。

  • /etc/passwd:
    • 内容: 系统所有用户的列表,以及他们的用户ID(UID)、组ID(GID)、家目录等信息。
    • 泄露风险: 低。虽然不包含密码,但提供了可用的用户名列表。
  • /etc/crontab/etc/cron.d/ 目录下的文件
    • 内容: 系统定时任务的配置。
    • 泄露风险: 。定时任务可能会以高权限运行,脚本中可能包含硬编码的密码或不安全的文件操作,是权限提升和发现漏洞的重要途径。
  • /etc/hosts
    • 内容: 主机名到IP地址的静态映射。
    • 泄露风险: 中。可能会暴露内部服务的域名和IP地址,例如 10.0.0.5 database-internal
  • /etc/resolv.conf
    • 内容: DNS服务器的配置。
    • 泄露风险: 低。可以了解网络环境的DNS配置。
  • /etc/os-release/etc/issue
    • 内容: 操作系统的发行版和版本信息。
    • 泄露风险: 低。帮助攻击者确定操作系统类型,以便使用特定的漏洞。

3. Web应用和源代码相关文件

这是最直接的信息泄露来源,通常位于 /app, /var/www/html, /usr/src/app 等目录。

  • 源代码文件 (.py, .js, .php, .rb, config.json 等)
    • 内容: 应用的业务逻辑和配置。
    • 泄露风险: 致命。直接暴露所有秘密、逻辑漏洞、API端点和数据库结构。
  • .env文件
    • 内容: 专门用于存储环境变量的文件,通常包含顶级机密。
    • 泄露风险: 致命。包含数据库密码、API密钥、调试模式开关等。
  • 版本控制目录 (.git)
    • 内容: Git仓库的元数据。
    • 泄露风险: 致命。攻击者可以通过读取 .git/ 目录下的文件(如.git/logs/HEAD, .git/index)来重构整个项目的源代码,包括历史版本中的秘密信息。
  • 临时文件和备份文件 (.bak, .swp, .old, ~ 结尾的文件)
    • 内容: 开发者无意中留下的代码或配置备份。
    • 泄露风险: 。可能包含旧版本的、含有敏感信息的代码。
  • 依赖列表 (requirements.txt, package.json, pom.xml)
    • 内容: 项目的所有依赖库及其版本。
    • 泄露风险: 中。攻击者可以根据此列表查找存在已知漏洞(CVE)的依赖库版本,进行攻击。

4. 用户home目录

即使是root或其他用户的家目录,也可能因权限配置不当而被读取。

  • ~/.bash_history~/.ash_history
    • 内容: 用户的shell命令历史记录。
    • 泄露风险: 极高。开发者可能在命令行中输入过密码、curl命令中包含过API密钥、或执行过包含敏感信息的文件操作。
  • ~/.ssh/ 目录
    • 内容: SSH客户端配置、私钥(id_rsa)、公钥(id_rsa.pub)、已知主机(known_hosts)。
    • 泄露风险: 致命。如果私钥可读,攻击者可以用它登录到其他服务器。
  • ~/.aws/credentials, ~/.docker/config.json, ~/.gcloud/
    • 内容: 各种命令行工具保存的凭证。
    • 泄露风险: 致命。直接泄露云服务、容器仓库等平台的访问权限。

5. 日志文件 (/var/log)

  • 应用日志 (/var/log/app.log 或其他自定义位置)
    • 内容: 应用程序运行时产生的日志。
    • 泄露风险: 。开发人员为了调试方便,可能会记录下请求参数、完整的SQL查询、用户个人信息甚至异常堆栈中的敏感数据。
  • Web服务器日志 (/var/log/nginx/access.log, /var/log/apache2/error.log)
    • 内容: Web服务器的访问和错误日志。
    • 泄露风险: 中。可以泄露内部路径、客户端IP、用户行为模式等。错误日志可能泄露配置问题或后端错误信息。

Linux全局文件信息泄露
http://candyb0x.github.io/2025/08/21/Linux全局文件信息泄露/
作者
Candy
发布于
2025年8月21日
更新于
2025年8月21日
许可协议