文件上传漏洞常见方法

文件上传漏洞


常见漏洞

  • 前端校验

    前端校验=没有校验

  • MIME校验

    (MIME大全)https://www.runoob.com/http/mime-types.html
  • 黑名单

    • 上传黑名单里面不存在的后缀

      • PHP除了.php后缀还能解析哪些后缀呢?

        php3、php4、php5、phtml等,当然这个是可以修改的。

        在apache配置文件中有如下配置:

        AddHandler application/x-httpd-php .php .php3 .php4 .php5 .phtml

    • .htaccess绕过

      • .htaccess 文件是Apache服务器中的一个配置文件,用于实现:网页301重定向、自定义404错误页面、
        改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
        .htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩
        展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index
        文件等一些功能。
      • 准备一个.htaccess文件,内容为:

        AddType application/x-httpd-php .png
        或者
        <FilesMatch "文件名">
        SetHandler application/x-httpd-php
        </FilesMatch>
      • 上传这个文件后,后续所有上传的png后缀文件都会被解析成php文件

    • 大小写绕过

      • 未做大小写处理

    • 后缀加空格

      • 仅支持服务器为windows,Windows特性后缀写入空格会自动去除

    • 后缀加点‘.’

      • 仅支持服务器为windows,Windows特性后缀写入点.会自动去除

    • 后缀加::$DATA

      • 仅支持服务器为windows,在windows的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名。

        例如:"phpinfo.php::$DATA" Windows会自动去掉末尾的::$DATA变成"phpinfo.php"

    • 后缀加点空格点

      • 仅支持服务器为windows,Windows特性后缀写入空格、点.会自动去除

    • 双写

      • 如果后缀被直接替换为空的情况下使用。

    • GET-%00截断

      • 00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符号。因此,我们可以通过修改数据包,插入\0字符的方式,达到字符串截断的目的。00截断通常用来绕过web软waf的白名单限制。
      • 条件

        • php版本小于5.3.29

          magic_quotes_gpc = Off

    • POST-%00截断

      • 和get一致,传参的地方不同而已

    • move_uploaded_file()函数

      • 此函数有一个特点,会忽略文件末尾的./

      • 直接上传php文件,抓包修改.php/.绕过黑名单

  • 白名单

    • 检测了图片内容文件头信息

      • 将一句话木马写入图片末尾

        例如把一个1701915609361.jpg文件和一个text.php(一句话木马文件)结合并命名未shell.php
        
        在cmd中执行
        copy D:\1701915609361.jpg /b + D\:text.php D:shell.jpg
      • 上传后在文件包含漏洞处访问图片

    • 对上传文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的

      • 将一句话木马写入图片末尾,上传后在文件包含漏洞处访问图片

    • 目标后端采用exif_imagetype()

      • 先确定是否开启php_exif模块

      • 本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER['HTTP_ACCEPT'] 结合使用来检查浏览器是否可以显示某个指定的图像。

      • 将一句话木马写入图片末尾,上传后在文件包含漏洞处访问图片

    • 检测上传的文件后缀,上传后对名字进行修改。

      • 将一句话木马写入图片末尾,上传后在文件包含漏洞处访问图片

  • 二次渲染

    • imagecreatefromjpeg($target_path);
      • 后端采用了此函数,将上传的图片进行二次编码,写入的一句话就失效了

      • 上传图片,再下载图片,比较查看未被修改的地方,把一句话木马放入这个地方

      • 下载HxD Hex Editor进行比较HxD - Freeware Hex Editor and Disk Editor | mh-nexus

      • jpg图片易损毁,尝试用gif图片

  • 条件竞争

    • 若后端代码是在上传之后才检测图片是否正确,不正确才删除,可以在上传上去在检测删除之前就访问图片。后端就无法删除或者二次渲染图片

    • 上传一个php文件,利用burp抓包 跑一个null payloads,发包立即用另一个浏览器访问文件地址。

  • 数组型绕过

    • 若是后端用了数组切割传入的文件,可以考虑在传入参数时就先定义数组

    • 一般数组都是俩个,[文件,后缀],一般都是获取最后一个数组count(array)-1

    • 直接设置array[0],array[2],这样在检测array[1]时就可以无值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值