一.文件读取漏洞
1.文件读取漏洞是指应用程序在处理文件路径或文件访问时存在安全漏洞,导致攻击者可以通过恶意构造的输入,绕过访问控制机制,读取本应该受限制的文件或目录。这种漏洞通常是由于应用程序未正确验证用户提供的文件路径或未适当限制访问权限而产生的。
2.漏洞危害 :文件读取漏洞可以存在于各种类型的应用程序中,包括Web应用程序、桌面应用程序、移动应用程序等。攻击者利用文件读取漏洞可以读取敏感数据、配置文件、日志文件、源代码等重要文件,甚至可能读取系统文件或其他用户的私密数据。
3.漏洞产生原因
- 不正确的输入验证:应用程序未对用户输入进行充分验证,导致攻击者可以通过构造恶意文件路径来读取未授权的文件。
- 不恰当的访问控制:应用程序未正确实施访问控制机制,或未对文件和目录设置适当的权限,从而允许攻击者访问其不应该访问的文件。
- 目录遍历:应用程序未对用户提供的文件路径进行足够的限制和过滤,使攻击者能够通过使用特殊字符序列或路径跳转技巧,绕过文件系统的
4.文件读取漏洞常用路径
../上一级目录
- /etc 目录
/etc/passwd :linux系统保存用户信息及其工作目录的文件,权限是可读。
/etc/shadow:是linux系统保存用户信息及(可能存在)密码(哈希)的文件,权限是root用户可读写。
/etc/(cron.d/*|crontab) :定时任务文件
- /proc目录
/proc 目录通常存储着进程动态运行的各种信息,本质上是一种虚拟目录。如果查看非当前进程的信息,pid是可以进行暴力破解的,如果查看的是当前进程,只需要/proc/self 代替/proc/[pid] 即可。
对应目录下的cmdline可读出比较敏感的信息,如使用命令行mysql-uxxx -pxxx登陆mysql时,可以读出明文密码。
/proc/[pid]/cmdline ([pid]指向进程对应的终端命令)
当我们无法获取当前应用所在的目录,通过cwd命令可以直接跳转到当前目录: /proc/[pid]/cwd/ ([pid] 指向进行运行目录)
环境变量中可能存在secret_key,这时可以通过environ进行读取: /proc/[pid]/environ ([pid]指向进行运行时的环境变量)
- 其他目录
Nginx配置文件可能存在的其他路径: /usr/local/nginx/conf/*
日志文件: /var/log/*
Apache 默认web根目录: /var/www/html/
二.例题
../../../../../../../../../root/flag目录穿越
直接显示代码,php文件包含类型题目,LFI是local file include
如果存在get传参,内容为file时,运行include函数
文件包含在 php 中,涉及到的危险函数有四个,分别是 include()、include_once()、require()、require_once()。
当利用这四个函数来包含文件时,不管文件是什么类型(图片、txt等等),都会直接作为php文件进行解析
- include:包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。
- include_once:和 include 类似,不同处在于 include_once 会检查这个文件是否已经被导入,如果已导入,下文便不会再导入,直面 once 理解就是只导入一次。
- require:包含并运行指定的文件,包含文件发生错误时,程序直接终止执行。
- require_once:和 require 类似,不同处在于 require_once 只导入一次。
密码文件所在路径,构造playload:?file=/flag即可获得flag
或者?file=../../../../../../flag
2.CTFHubafr-2
打开题目是动图,查看网页源码只有一个图片地址
访问/img/路径
通过这个路径想要找到flag,就要到根目录上
涉及到nginx路径漏洞,nginx错误配置,可以读取任意文件
通过在/img../返回到根目录上,即可得到flag文件,获取flag