• 《Web安全基础》04. 文件操作安全



    本系列侧重方法论,各工具只是实现目标的载体。
    命令与工具只做简单介绍,其使用另见《安全工具录》。

    靶场参考:upload-labs,pikachu。

    1:文件操作安全

    在这里插入图片描述

    文件操作,包含以下四个方面:

    • 文件上传
    • 文件包含
    • 文件下载
    • 文件读取

    文件被解析,则是文件包含漏洞。
    显示源代码,则是文件读取漏洞。
    提示文件下载,则是文件下载漏洞。

    2:文件上传漏洞

    在这里插入图片描述

    2.1:简介

    文件上传漏洞,指程序对文件的上传未作全面限制,导致用户可以上传一些超越用户权限的文件。可以是木马,shell 脚本,病毒等。

    上传文件和文件执行是两个东西。

    文件上传漏洞查找及判断

    • 黑盒测试:使用工具扫描网站,测试会员中心、后台等。
    • 白盒测试:直接分析源代码。

    上传参数名解析

    • Content-Disposition:一般可更改
    • name:表单参数值,不能更改
    • filename:文件名,可以更改
    • Content-Type:文件 MIME,视情况更改

    漏洞分类

    • 解析漏洞
    • CMS 漏洞
    • 编辑器漏洞
    • CVE 漏洞

    安全修复方案

    • 后端验证:采用服务端验证模式
    • 后缀检测:基于黑名单,白名单过滤
    • MIME 检测
    • 内容检测:文件头,完整性检测
    • 自定义函数过滤
    • WAF 防护产品

    2.2:防护与绕过

    文件上传常见检测

    • 检测后缀名,MIME 信息,文件头内容等
    • 黑名单
    • 白名单

    常见检测绕过

    • 文件头伪造
    • 图片马
    • 二次渲染绕过
    • 条件竞争
    • 文件使用目录命名方式(但操作系统实际保存时仍为文件)
    • 系统漏洞
    • 数组接受(传递数据时,一次性写入多个相同的参数,但参数内容不同)
    • 截断绕过
    • 大小写绕过
    • 空格绕过

    2.3:WAF 绕过

    WAF 常见绕过方法

    • 数据溢出
    • 符号变异
    • 数据截断
    • 重复数据

    以下是一些 WAF 绕过的例子:

    2.3.1:数据溢出

    数据溢出,添加垃圾数据以致防火墙数据溢出:

    在这里插入图片描述

    2.3.2:符号变异

    符号变异,破坏数据包原本符号对:

    在这里插入图片描述

    符号变异,破坏数据包原本符号对:

    在这里插入图片描述

    符号变异,文件名混淆:

    在这里插入图片描述

    符号变异,文件名混淆:

    在这里插入图片描述

    2.3.3:数据截断

    数据截断,文件名换行。

    在这里插入图片描述

    2.3.4:重复数据

    重复数据,传递多个同名数据:

    在这里插入图片描述

    重复数据,将一个 HTTP 头重复写入文件名:

    在这里插入图片描述

    重复数据,将一个 HTTP 头重复写入文件名:

    在这里插入图片描述

    3:文件包含漏洞

    在这里插入图片描述

    文件包含允许程序在执行过程中动态引入其他文件的内容,可提高代码的可维护性、可复用性和组织性。

    文件包含漏洞,如果不正确处理文件包含,攻击者可能会利用它来包含恶意文件并执行恶意代码。

    文件包含漏洞成因

    • 可控变量
    • 文件包含函数

    分类

    • 本地文件包含(Local File Inclusion,LFI)
    • 远程文件包含(Remote File Inclusion,RFI)

    参考资料:

    4:文件下载漏洞

    在这里插入图片描述

    文件下载漏洞允许攻击者下载未经授权的文件。

    凡是存在文件下载的地方都可能存在文件下载漏洞。

    敏感文件下载

    • 配置文件
    • 接口、密匙信息文件

    5:文件读取漏洞

    在这里插入图片描述

    文件读取漏洞允许攻击者访问或读取未经授权的文件或数据。

    参考资料:


    半世浮萍随逝水,一宵冷雨葬名花。

    ——《山花子》(清)纳兰性德

  • 相关阅读:
    nohup 命令的简单理解
    iOS调试技巧——使用Python 自定义LLDB
    单链表oj (上),详细的过程分析,每道题有多种解题思路,一定会有所收获
    344. Reverse String
    Redis-cluster集群详细部署配置--有手就行
    民商法领域的论文选题求推荐?
    2.9每日一题(定积分的奇偶性以及比较大小)
    JAVA- Acwing -求 1+2+...+n
    用于云应用程序的ADSelfService Plus多重身份验证
    让两个电脑通信的方法(TCP连接,UDP连接,C/S架构)
  • 原文地址:https://blog.csdn.net/KeepPromise/article/details/132711477