文件读取漏洞专题(三)

任意文件读取漏洞非常基础而又常见,攻击者可以由此收集到大量敏感信息

该专题将对文件读取漏洞的知识进行一些汇总,偶尔会有相关例题解析

中间件/服务器的文件读取漏洞

Nginx

Nginx配置中的alias可以用来指定请求资源的真实路径,但是当配置错误时,比如

1
2
3
location /static {
alias /home/myapp/static/;
}

location后没有加“/”,此时可以通过在路径后拼接../来造成目录穿越

数据库

MySQL的load_file()函数在有权限以及相关配置合适的情况下可以读取文件

如果能执行非基本SQL语句,也可以通过load data infile来读取文件

软链接

ln命令可以为某一个文件在另外一个位置建立一个同不的链接,常用ln -s命令来创建软链接

1
2
3
4
5
6
7
8
9
10
11
  -f : 链结时先将与 dist 同档名的档案删除
  -d : 允许系统管理者硬链结自己的目录
  -i : 在删除与 dist 同档名的档案时先进行询问
  -n : 在进行软连结时,将 dist 视为一般的档案
  -s : 进行软链结(symbolic link)
  -v : 在连结之前显示其档名
  -b : 将在链结时会被覆写或删除的档案进行备份
  -S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
  -V METHOD : 指定备份的方式
  --help : 显示辅助说明
  --version : 显示版本

Docker-API

Docker-API可通过UNIX Socket或http通信,当SSRF可以进行UNIX Socket通信时,可以通过操控Docker-API把本地文件载入Docker新容器来读取

客户端的文件读取漏洞

大多是基于XSS来读取本地文件,不再赘述