任意文件读取&下载

任意文件读取&下载

原理

由于业务需求,很多网站往往需要提供文件(附件)下载的功能块,但是如果对下载的文件没有做限制,直接通过下载器绝对路径对其文件进行下载,那么,恶意用户就可以利用这种方式下载服务器的敏感文件,对服务器进行进一步的威胁和攻击。

  • 有读取文件的函数
  • 读物文件的路径用户可控,且没有经过校验,或者校验不严格
  • 输出文件内容
  • 一个正常的网站,存在一个下载文件的功能,同时还会从浏览器接收文件名字

危害

通过任意文件下载,可以下载服务器的任意文件,web业务的代码,服务器和系统的具体配置信息,也可以下载数据库的配置信息,以及对内网的信息探测等等。

可用得到的代码进一步代码审计,得到更多可利用漏洞

防御

  • 配置文件:在配置文件中限制访问的文件目录,比如PHP中php.ini配置open_basedir

  • 特殊字符过滤:检查用户输入,过滤或转义含有“../”、“..\”、“%00”,“..”,“./”,“#”等跳转目录或字符终止符、截断字符的输入

  • 合法性判断:严格过滤用户输入字符的合法性,比如文件类型、文件地址、文件内容等

  • 白名单:白名单限定访问文件的路径、名称及后缀名

存在方式

从链接上看,类似这些,有可能就存在任意下载漏洞

download.php?path=
download.php?file=
down.php?file=
data.php?file=
readfile.php?file=
read.php?filename=

敏感信息

Windows:

C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini //Mysql配置信息

Linux:

/root/.ssh/authorized_keys //如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进去
/root/.ssh/id_rsa //ssh私钥,ssh公钥是id_rsa.pub
/root/.ssh/id_ras.keystore //记录每个访问计算机用户的公钥
/root/.ssh/known_hosts
//ssh会把每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.cnf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数

参考

https://xz.aliyun.com/t/6594

https://www.1rql.com/3721.html

https://bealright.github.io/2019/10/24/任意文件下载漏洞/

posted @ 2022-05-02 16:41  阿力先生  阅读(401)  评论(0)    收藏  举报