【代码审计】任意文件操作简单学习审计和分析

前言

  • 代码审计学习记录

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截断等漏洞
  • -文件上传之什么也没过滤的情况

  • -案例:泛微Eoffice 三处任意文件上传可直接getshell

  • -特点

    • – 常见于路由设备、内部平台等
    • – 可使用扫描器批量发现
  • -文件上传之Mime Type 检查的绕过

  • -案例:建站之星任意文件上传漏洞1

  • -特点:

    • – 上传时检查Mime-Type, 不检查文件后缀
    • – 或用Mime-Type生成文件后缀
    • – 利用:修改数据包中的Mime-Type
    • – 可使用扫描器批量发现

    测试代码(上传文件到当前目录)

    1
    2
    3
    <?php
    var_dump($_FILES);
    move_uploaded_file($_FILES['x']['tmp_name'], './'.$_FILES['x']['name']);

    image-20211017151158386

  • -文件上传没有重命名文件的后果

  • -案例:建站之星任意文件上传漏洞2

  • -特点:

    • – 从POST变量中获取文件名(目录名)
    • – 服务端语言不检查 \0
    • – 不重命名文件,导致\0进入操作系统
    • – 截断文件名,留下xxx.php

我的个人博客

孤桜懶契:http://gylq.gitee.io

本文标题:【代码审计】任意文件操作简单学习审计和分析

文章作者:孤桜懶契

发布时间:2021年10月16日 - 15:10:07

最后更新:2022年05月20日 - 11:47:45

原始链接:https://gylq.gitee.io/posts/174.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------