在Linux系统安全体系中,文件读取类漏洞是一类极具隐蔽性且危害深远的安全隐患。这类漏洞涵盖文件包含、任意文件读取/下载、SSRF(服务器端请求伪造)等多种形态,其核心危害并非仅局限于单个文件的信息泄露,更在于通过读取系统关键文件,构建完整的攻击链路,拓展出内网探测、权限提升、横向移动等一系列额外攻击面。
一、Linux文件读取类漏洞的核心本质与触发逻辑
Linux文件读取类漏洞的本质,是应用程序在处理文件操作时,未对用户输入进行严格的合法性校验与权限控制,导致用户可突破预设限制,读取系统中本不应被访问的文件。不同类型漏洞的触发逻辑虽存在差异,但最终均指向"越权读取系统关键文件"这一核心结果:
-
文件包含漏洞:多出现于PHP、Python等脚本语言开发的应用,因使用动态文件包含函数(如PHP的include、require)时,未过滤用户输入的文件路径,导致攻击者可构造恶意路径包含系统文件(如本地文件包含LFI);若结合远程文件包含(RFI),还可进一步加载恶意脚本,但本地文件包含更易直接触发系统文件读取。
-
任意文件读取/下载漏洞:应用程序提供文件读取/下载功能时,文件路径参数未做严格过滤(如未限制路径遍历字符".../"),攻击者可通过构造路径遍历 payload(如".../.../etc/passwd")读取系统任意文件。
-
SSRF结合file://协议:SSRF漏洞允许攻击者诱导服务器向指定地址发起请求,当服务器支持file://协议时,攻击者可构造"file:///etc/passwd"等请求,让服务器读取本地文件并返回给攻击者,本质是借助SSRF实现跨协议的文件读取。
这类漏洞的共性在于,攻击者无需直接获取系统交互权限,仅通过应用层输入即可绕过访问控制,触达系统内核级别的关键文件,进而借助这些文件中的信息拓展攻击面。
二、Linux文件读取漏洞衍生的额外攻击面
Linux系统的文件系统承载着大量核心配置信息、运行状态数据与权限凭证,攻击者通过文件读取类漏洞获取这些信息后,可突破"单主机应用层"的限制,构建从信息收集到权限提升、横向移动的完整攻击链路。
(一)用户信息类:用户凭证与权限信息泄露
Linux系统中与用户权限相关的文件,是攻击者读取的核心目标之一。通过这类文件,攻击者可获取用户列表、权限等级、密码哈希等关键信息,为后续暴力破解、提权攻击提供基础。
1. /etc/passwd
/etc/passwd是Linux系统的用户信息配置文件,存储着系统中所有用户的基本信息,包括用户名、用户ID(UID)、组ID(GID)、家目录、登录Shell等。该文件默认对所有用户可读,因此成为文件读取类漏洞的高频攻击目标。
攻击者通过漏洞读取/etc/passwd后,可直接获取系统用户列表,例如:
bash
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
test:x:1000:1000:test:/home/test:/bin/bash
从上述内容中,攻击者可筛选出具有高权限的用户(如UID=0的root用户)、应用服务用户(如www-data,通常是Web服务运行用户)。结合后续读取的/etc/shadow文件(存储用户密码哈希,默认仅root可读,若应用以root权限运行则可读取),攻击者可获取密码哈希值,通过彩虹表破解或暴力破解获取明文密码,进而直接登录系统;即使无法读取/etc/shadow,也可针对获取的用户名列表,发起SSH暴力破解等攻击,提升自身权限。
(二)网络信息类:内网环境探测与端口信息收集
攻击者在获取目标主机控制权前,往往需要先掌握内网环境拓扑(如网段、存活主机、开放端口等)。Linux系统中多个核心文件记录着网络相关信息,通过文件读取类漏洞获取这些信息,可实现内网环境的"盲探测",为横向移动奠定基础。
1. /etc/hosts------判断内网网段
/etc/hosts是Linux系统的本地DNS解析配置文件,用于将主机名映射到IP地址,通常包含目标主机自身IP、内网网关、常用内网服务主机等信息。攻击者读取该文件后,可快速定位内网网段与关键服务节点。
例如,读取到的/etc/hosts内容如下:
bash
127.0.0.1 localhost
192.168.1.100 web-server
192.168.1.1 gateway
192.168.1.200 db-server
10.0.0.5 file-server
从上述内容中,攻击者可直接获取两个内网网段(192.168.1.0/24和10.0.0.0/24),同时定位到网关(192.168.1.1)、Web服务器(192.168.1.100)、数据库服务器(192.168.1.200)、文件服务器(10.0.0.5)等关键节点。后续可通过SSRF、反弹Shell等方式,针对这些网段和节点发起进一步探测。
2. /proc/net/tcp------获取端口与关联进程信息
/proc目录是Linux系统的虚拟文件系统,存储着系统运行时的内核信息与进程状态,其中/proc/net/tcp记录着当前主机的TCP连接状态,包括本地IP、本地端口、远程IP、远程端口、连接状态、对应的进程ID(PID)等信息。攻击者读取该文件后,可获取目标主机的开放端口、活跃连接及关联进程,明确攻击突破口。
/proc/net/tcp文件中,本地IP和端口以十六进制形式存储,需转换为十进制。例如,某条记录如下:
bash
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
1: 0100007F:0050 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 12345 1 ffff888012345678 99 0 0 10 -1
2: C0A80164:04D2 0A000005:0050 01 00000000:00000000 00:00000000 00000000 33 0 67890 1 ffff888087654321 99 0 0 10 -1
转换后可知:本地IP 127.0.0.1:80(0100007F对应127.0.0.1,0050对应80)处于LISTEN状态(0A对应LISTEN),UID=0(root权限),关联inode=12345;通过inode可进一步查询对应的进程(如通过ls -l /proc/[PID]/fd | grep 12345获取PID),发现是nginx进程。另一记录显示本地IP 192.168.1.100:1234(C0A80164对应192.168.1.100,04D2对应1234)与10.0.0.5:80建立连接,UID=33(www-data用户),推测是Web服务与文件服务器的通信。
通过这些信息,攻击者可明确目标主机开放的关键端口(如80端口的Web服务、可能的数据库端口等),识别高权限进程,同时发现与内网其他主机的活跃连接,为后续端口扫描、进程注入等攻击提供方向。
3. /proc/net/arp------获取ARP缓存表与内网存活主机
ARP(地址解析协议)用于将IP地址转换为物理地址(MAC地址),/proc/net/arp存储着目标主机的ARP缓存表,记录着近期与目标主机通信的内网主机的IP地址、MAC地址、设备类型等信息。由于ARP缓存表仅包含活跃通信的主机,因此通过读取该文件,攻击者可快速定位内网存活主机,避免盲目扫描带来的暴露风险。
读取到的/proc/net/arp内容示例:
bash
IP address HW type Flags HW address Mask Device
192.168.1.1 0x1 0x2 00:11:22:33:44:55 * eth0
192.168.1.105 0x1 0x2 aa:bb:cc:dd:ee:ff * eth0
10.0.0.5 0x1 0x2 11:22:33:44:55:66 * eth1
从上述内容中,攻击者可直接获取3台内网存活主机的IP地址(192.168.1.1、192.168.1.105、10.0.0.5)及对应的MAC地址,同时通过Device字段(eth0、eth1)可知目标主机存在两个网卡,连接两个不同的内网网段。后续可针对这些存活主机,发起SSH暴力破解、漏洞扫描等横向移动攻击。
(三)进程与内核信息类:助力权限提升与持久化
/proc是Linux内核提供的一种特殊虚拟文件系统,它并非真实存储在磁盘上,而是动态映射系统内核运行时的进程状态、硬件信息、内核参数等核心数据。用户通过读取/proc目录下的文件,无需借助额外工具即可实时获取系统底层运行信息,且该目录下的文件多具有较高的可读性。正因其"动态映射内核数据"的特性,/proc成为攻击者通过文件读取漏洞收集系统核心信息的重要目标。通过读取/proc目录下的相关文件,攻击者可获取更详细的进程与内核信息,为权限提升和持久化攻击提供支持。具体如下:
1. /proc/[PID]/cmdline------获取进程启动命令与敏感参数
攻击者通过漏洞读取目标进程的cmdline文件后,可获取关键信息:一是明确进程的核心功能,例如读取PID为1的/proc/1/cmdline,若内容为"/sbin/init splash",则可知该进程是系统初始化进程;二是捕捉敏感参数,若进程启动命令中包含明文密码(如"./app --user=admin --pass=123456")、密钥路径(如"/usr/bin/ssh-agent -a /root/.ssh/agent.sock")等,可直接复用这些信息登录相关服务或获取高权限凭证。例如,若读取到数据库服务进程的cmdline包含"--skip-grant-tables",则可判断数据库跳过了权限验证,攻击者可直接无密码登录数据库。
/proc目录下以进程ID(PID)命名的子目录,对应系统中正在运行的每个进程,/proc/[PID]/cmdline则是该进程的启动命令行参数文件。该文件会将进程启动时的完整命令(包括可执行文件路径、传入的参数)以字符串形式存储,且参数间以空字符分隔。由于/proc的动态特性,该文件内容会随进程运行状态实时同步,攻击者无需依附进程即可直接读取。
三、结语
Linux文件读取类漏洞的危害远不止于单个文件的信息泄露,其衍生的用户凭证泄露、内网探测、服务配置暴露等攻击面,是攻击者实现"从点到面"完整入侵的关键跳板。深入理解这类漏洞的攻击逻辑与衍生危害,不仅有助于精准识别安全风险,更能为防护策略的制定提供针对性思路。