zoukankan      html  css  js  c++  java
  • 对文件上传的简单总结

    不久前做完了大部分的upload靶场的题目,向对此进行一下稍微的总结,方便以后照着看吧

    (这里只是最简单的进行介绍,都是以upload靶场为基础)

    客户端

    ​1 JS检查

    ​在前端js代码中添加允许条件(如添加 .php使 php文件可上传)或者用相关插件
    ​bp抓包后修改  .jpg文件为 .php文件绕过

    服务端

    检查后缀

    黑名单

    ​1 上传特殊可解析后缀

    ​用 .php3 , .phtml等特殊的文件格式尝试绕过
     
    PS:​过滤<? 和 php后缀,尝试用 <script language='php'>assert($_REQUEST['cmd'])</script>

    ​2 上传 .htaccess

    ​先上传一个 .htaccess 文件(没有文件名)(内容为:SetHandler application/x-httpd-php),再上传图片马(此时文件都会被解析成php)

    ​3 后缀大小写绕过

    ​例如将 .php 文件修改成 .PHP 或者 .PHp 等

    ​4 空格绕过

    ​​①
    在后缀名中加"(空格)"绕过,如 filename = "info.php(空格)"
    ​此时可能会有中特殊情况,用到(点+空格+点)来进行绕过,如 "filename = info.php.(空格)."

    ​5 点绕过

    ​在后缀名中加"."绕过,如 filename = "info.php."

    ​6 ::$DATA绕过

    ​在后缀名中加"::$DATA"绕过,如 filename = "info.php::$DATA"

    ​7 配合解析漏洞

    (暂无)

    ​8 双后缀名绕过

    ​此时文件会把文件后缀替换为空,所以双写绕过,如 filename = "info.pphphp"

    白名单

    ​1 MIME绕过

    ​​bp抓包后修改 content-type绕过

    ​2 %00截断

    ​①
    在路径用 %00 截断,如 save_path = ../upload/info.php%00
    ​当 save_path 通过POST方法传入,与上一样,但要注意同时要在二进制文件当中进行修改(%00 不能再自动解码)

    ​3 0x00截断

    同上

    ​4 0x0a截断

    同上

    检查内容

    ​1 文件头检查

    ​2 突破getimagesize()

    ​​直接上传图片马

    ​​3 突破exif_imagetype()

    ​​直接上传图片马

    ​4 突破move_uploaded_file()

    ​00截断

    ​5 二次渲染

    这个比较难概括,请参考

    ​https://xz.aliyun.com/t/2657#toc-13

    这位师傅的这篇文章

    其他

    ​条件竞争

    ​通过向服务器不断发送(同样的)webshell(让其不能短时间内及时处理)
  • 相关阅读:
    针对wamp的phpmyadmin显示#2003无法连接mysql
    vs2019编译gdal3.1.0报错 (filemanager.obj) : error LNK2001: 无法解析的外部符号 __imp_SHGetFolderPathW
    半透明遮罩层覆盖整个可视区域
    css首字下沉
    仿花瓣标题栏始终在页面顶部(ie6下position:fixed失效解决方法)
    Redis最佳实践及核心原理
    Java对接微信公众号模板消息推送
    XXLJOB任务调度
    MyBatis学习笔记
    SpringBoot集成Redis
  • 原文地址:https://www.cnblogs.com/yanwusheng/p/13347825.html
Copyright © 2011-2022 走看看