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
)。 - 泄露风险: 致命。如果私钥可读,攻击者可以用它登录到其他服务器。
- 内容: SSH客户端配置、私钥(
~/.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全局文件信息泄露/