任意文件读取

1、Any File Read(任意文件读取)

1.1、描述:

  • 任意文件读取漏洞(Unrestricted File Upload),是一种常见的Web安全漏洞,因Web程序提供的文件查看下载、附件下载等功能存在安全缺陷,导致通过修改文件路径就能够查看和下载任意文件,这些文件包括:源代码文件、系统文件(/etc/passwd、C:/boot.ini等)、配置文件(config.php、/WEB-INF/web.xml、web.config等),造成网站敏感信息泄露,严重危害网站安全。

1.2、审计方法:

  • 全局搜索以下关键词:

    “fileName”,
    “filePath”,
    “getFile”,
    “getWriter”,
    “MultipartFile”,
    “createNewFile”,
    “FileInputStream”

1.3、漏洞示例:

  • 代码在 downloadFile()函数中获取请求参数中的affixalName的值,然后赋值给 FileName 变量,接着在 196 行处通过拼接字符串赋值给downPath 变量,然后在 198 行处调用 download 函数并把 downPath 的值传进函数,download 函数的代码如下:

图1:漏洞代码

  • download 函数把 filePath 处的文件写到 http 响应中,在整个流程中并没有对文件名的合法 性进行检查,存在任意文件下载漏洞,如通过把 affixalName 的值设置 为../../../WEB-INF/web.xml 可以下载网站的 web.xml 文件。

图2:漏洞代码

图3:漏洞代码

1.3、漏洞危害:

  • 任意文件读取是属于文件操作漏洞的一种,一般任意文件读取漏洞可以读取的配置信息甚至系统重要文件。严重的话,就可能导致SSRF,进而漫游至内网。

1.4、修复方案:

  • 指定下载路径以防止用户读取和下载指定目录以外的文件。