文件操作漏洞

代码审计-任意文件读取及删除 - 图1

任意文件读取

通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感信息文件,正常读取的文件没有经过校验或者不严格,用户可以控制这个变量读取任意文件

文件读取-漏洞危害

任意文件读取漏洞,是web安全里高危的漏洞,它可以泄露源码、数据库配置文件等等,导致网站处于极度不安全状态。

文件读取-挖掘经验

• fopen()
• file_get_contents()
• fread
• fgets
• fgetss
• file
• fpassthru
• parse_ini_file
• readfile

allow_url_fopen选项激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象例如文件。默认的封装协议提供用ftp 和 http 协议来访问远程文件,一些扩展库例如 zlib 可能会注册更多的封装协议

文件读取-代码案例

漏洞之所以会发生是因为攻击者可以将路径遍历序列放入文件名内,从当前位置向上回溯,从而浏览整个浏览器的的任何文件

实例

readfile

image.png
image.png
image.png

fread

image.png
image.png
image.png

file_get_contents

image.png
image.png

任意文件删除

攻击者从寻找上删除的功能,正常删除功能的文件没有经过校验或者不严格,攻击者控制这个可操作的变量配合目录遍历进行删除其他文件

文件删除-代码案例

unlink()函数

实例

image.png
判断文件是否存在,文件存在,删除文件
image.png
文件不存在,删除失败
image.png

修复方案

  • 正则严格判断用户输入参数的格式
  • 检查使用者输入的文件名是否有“..”的目录阶层字符
  • 在php.ini文件中设置open_basedir来限定文件访问的范围