一些网站提供文件查看或文件下载功能,若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就造成了文件查看与下载漏洞。
任意文件读取是属于文件操作漏洞的一种,一般任意文件读取漏洞可以读取配置信息甚至系统重要文件。严重的话,就可能导致ssrf,进而漫游至内网。
有存读取文件的函数
读取文件的路径用户可控,且未校验或校验不严
输出了文件内容
file_get_contents()
使用file_get_contents()函数能在编译器编译后能显示出文件源代码,而在浏览器中打开时不能显示源代码。
readfile()
使用readfile()函数能在编译器编译后能显示出文件源代码,而在浏览器中打开时不能显示源代码。
highlight_file()
使用highlight()函数能在编译器编译后能显示出文件源代码,并且在浏览器中打开时也能显示源代码。
fopen()
对文件进行数据存取的第一步操作就是要打开文件。在php中使用fopen()函数打开文件,fopen()函数的语法为:
filename:必选。打开包含路径的文件名,路径可是相对路径,也可是绝对路径。无前缀则表示打开的是本地文件。 mode:必选。打开文件的方式(文件/流的访问类型)。
include_path:可选。该参数在配置文件php.ini中指定一个路径,若需要在 include_path 中检索文件的话,可以将该参数设为 1 或 true。
context:文件句柄的环境。
mode参数的可取值:
使用实例:
对文件的操作结束后记得要关闭该文件,以免引起错误。关闭文件可用fclose()函数。
有读取文件的函数
读取文件的路径用户可控,且没有经过校验,或者校验不严格
输出文件内容
网站存在下载文件的功能,还会从浏览器接收文件名字
直接下载:
增加header头
信息收集信息、猜路径、下载配置文件/代码文件、利用服务器软件漏洞、shell、提权
首先收集系统信息,包括系统版本,中间件,cms版本,服务器用途,服务器使用者信息,端口,web路径等,然后根据收集到的信息,下载配置文件,如weblogic,ftp,ssh、mysql等, 根据下载到的配置文件进行渗透。
从链接上看,形如:
从参数名看,形如:
界面显示
点击任意图片,出现下载,查看下载地址:
尝试下载execdownload.php文件,
报错,说明可能路劲不对,../上一级测试
可下载
打开查看源码
默认图片存放在download目录下
尝试下载敏感文件
通过目录扫描得到配置文件config.inc.php
pikachu/vul/unsafedownload/download/xxx.xxx
与vul相差3个父目录,所以加3个…/
完整url:
可得到数据库用户名及密码
点击help,出现一串字符
是文件无法找到的异常信息。
通过观察url,猜测是文件下载
此题是javaweb,可以联想到web-inf/web.xml泄露问题。
web-inf是java的web应用的安全目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。web-inf主要包含一下文件或目录:
/web-inf/web.xml:web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
/web-inf/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/web-inf/lib/:存放web应用需要的各种jar文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/web-inf/src/:源码目录,按照包名结构放置各个java文件。
/web-inf/database.properties:数据库配置文件
找一下web-inf/web.xml,post传值
下载查看文件
找到flag信息
servlet-class里面的.代表的是路径/
然后下载flagcontroller.class
发现一串base64,解码
得到flag。