一:文件读取漏洞常见读取路径
Linux系统
1.flag名称(相对路径)比赛过程中,有时fuzz一下flag名称便可以得到答案。
2.服务器信息(绝对路径)
(1) /etc目录
/etc目录下多是各种应用或系统配置文件,所以其下的文件是进行文件读取的首要目标。
(2) /etc/passwd
/etc/passwd文件是Linux系统保存用户信息及其工作目录的文件,权限是所有用户/组可读,一般被用作Linux系统下文件读取漏洞存在性判断的基准。读到这个文件我们就可以知道系统存在哪些用户、他们所属的组是什么、工作目录是什么。
(3)/etc/shadow
/etc/shadow是Linux系统保存用户信息及(可能存在)密码(hash)的文件,权限是root用户可读写、shadow组可读。所以一般情况下,这个文件是不可读的。
(4)/etc/apache2/*
/etc/apache2/*是Apache配置文件,可以获知Web目录、服务端口等信息。CTF有些题目需要参赛者确认Web路径。
(5)/etc/nginx/*
/etc/nginx/*是Nginx配置文件(Ubuntu等系统),可以获知Web目录、服务端口等信息。
(6)/etc/apparmor(.d)/*
/etc/apparmor(.d)/*是Apparmor配置文件,可以获知各应用系统调用的白名单、黑名单。例如,通过读配置文件查看MySQL是否禁止了系统调用,从而确定是否可以使用UDF(User Defined Functions)执行系统命令。
(7)/etc/(cron.d/|crontab)
/etc/(cron.d/|crontab)是定时任务文件。有些CTF题目会设置一些定时任务,读取这些配置文件就可以发现隐藏的目录或其他文件。
(8)/etc/environment
/etc/environment是环境变量配置文件之一。环境变量可能存在大量目录信息的泄露,甚至可能出现secret key泄露的情况。
(9)/etc/hostname/etc/hostname表示主机名。
/etc/hostname表示主机名。
(10)/etc/hosts
/etc/hosts是主机名查询静态表,包含指定域名解析IP的成对信息。通过这个文件,参赛者可以探测网卡信息和内网IP/域名。
(11)/etc/issue
/etc/issue指明系统版本。
(12)/etc/mysql/*
/etc/mysql/*是MySQL配置文件。
(13)/etc/php/*
/etc/php/*是PHP配置文件。
(14)/proc目录
/proc目录通常存储着进程动态运行的各种信息,本质上是一种虚拟目录。注意:如果查看非当前进程的信息,pid是可以进行暴力破解的,如果要查看当前进程,只需/proc/self/代替/proc/[pid]/即可。
对应目录下的cmdline可读出比较敏感的信息,如使用mysql-uxxx-pxxxx登录MySQL,会在cmdline中显示明文密码:
/proc/[pid]/cmdline
有时我们无法获取当前应用所在的目录,通过cwd命令可以直接跳转到当前目录:
/proc/[pid]/cmd/
环境变量中可能存在secret_key,这时也可以通过environ进行读取:
/proc/[pid]/environ
(14)其他目录
Nginx配置文件可能存在其他路径:
/usr/local/nginx/conf/*
日志文件:
/var.log/*
Apache默认Web根目录:
/var/www/html
PHP session目录:
/var/lib/php(5)/session/
用户目录:
[pid]指向进程所对应的可执行文件。有时我们想读取当前应用的可执行文件再进行分析,但在实际利用时可能存在一些安全措施阻止我们去读可执行文件,这时可以尝试读取/proc/self/exe。例如: