文件读取漏洞

1、漏洞简介

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

  • 代码执行,文件读取,命令执行的函数都有哪些

代码执行:eval,pregreplace+/e,assert,calluserfunc,calluserfuncarray,create_function

命令执行:

system(), exec(), shellexec(), passthru() ,pcntlexec(), popen(),proc_open()

文件读取:

filegetcontents(),highlightfile(),fopen(),read file(),fread(),fgetss(), fgets(),parseinifile(),showsource(),file()等

2、漏洞成因

  • 存在读取文件的函数。如:readfile()、file_get_contents()、fopen()、fread()、fgets()、fpassthru()

  • 读取文件的路径用户可控,且未校验或校验不严。如:…/…/…/字符

  • 输出了文件内容

例如服务端文件读取代码如下:

<?php
$filename=$_GET['f'];
echo file_get_contents($filename);
?>

我们在前端使用../../../拼凑读取文件的绝对路径,读取/etc/passwd文件

3、漏洞利用

任意文件读取漏洞挖掘:

任意文件读取利用总结:

任意文件读取常见参数名:

任意文件读取常用敏感文件路径:

4、漏洞修复

  • 净化数据:对用户传过来的文件名参数进行统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。

  • 过滤 . 点,使用户在url中不能回溯上级目录

  • 正则严格判断用户输入的参数

  • php.ini配置open_basedir限定文件访问范围

Last updated

Was this helpful?