天天看点

文件下载文件读取

一些网站提供文件查看或文件下载功能,若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就造成了文件查看与下载漏洞。

任意文件读取是属于文件操作漏洞的一种,一般任意文件读取漏洞可以读取配置信息甚至系统重要文件。严重的话,就可能导致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。