前言
- 代码审计学习记录
PHP文件操作函数汇总
-文件包含
- – include/require/include_once/require_once/spl_autoload
-文件读取
- – file_get_contents/fread/readfile/file/highlight_file/show_source
-文件写入
- – file_put_contents/fwrite/mkdir/fputs
-文件删除
- – unlink/rmdir
-文件上传
- – move_uploaded_file/copy/rename
文件上传漏洞
-文件上传流程
- – 检查文件大小、后缀、类型
- – 检查文件内容(如图片头等)
- – 提取文件后缀
- – 生成新文件名
- – 将上传临时文件拷贝到新文件名位置
-文件上传逻辑常见错误
- – 只检查文件类型不检查文件后缀
- – 文件后缀黑名单导致遗漏
- – 使用原始文件名,导致\0截断等漏洞
-文件上传之什么也没过滤的情况
-特点:
- – 常见于路由设备、内部平台等
- – 可使用扫描器批量发现
-文件上传之Mime Type 检查的绕过
-案例:建站之星任意文件上传漏洞1
-特点:
- – 上传时检查Mime-Type, 不检查文件后缀
- – 或用Mime-Type生成文件后缀
- – 利用:修改数据包中的Mime-Type
- – 可使用扫描器批量发现
测试代码(上传文件到当前目录)
1
2
3
var_dump($_FILES);
move_uploaded_file($_FILES['x']['tmp_name'], './'.$_FILES['x']['name']);-文件上传没有重命名文件的后果
-案例:建站之星任意文件上传漏洞2
-特点:
- – 从POST变量中获取文件名(目录名)
- – 服务端语言不检查 \0
- – 不重命名文件,导致\0进入操作系统
- – 截断文件名,留下xxx.php
我的个人博客
孤桜懶契:http://gylq.gitee.io