2020小迪培训(第21天 WEB 漏洞-文件上传之后端黑白名单绕过)

WEB 漏洞-文件上传之后端黑白名单绕过

前言

3139a6041f23d50d18a1fb1bc558e63d-1

文件上传常见验证

后缀名,类型,文件头等

后缀名:黑名单,白名单

黑名单:明确不允许上传的格式后缀

asp php jsp cgi war…

缺陷:在定义不完整的时候,可以使用其他格式达到绕过效果

白名单:明确可以上传的格式后缀

jpg png zip rar gif

相对于黑名单,验证会更安全一些

文件类型:MIME 信息(检测类型,不严谨,可以进行伪造)

Content-Type为MIME信息,通过这个信息来猜测你的文件是什么格式的,什么后缀(验证方式之一)

有时候我们可以通过改变其值,实现欺骗操作,从而成功绕过。

image-20210830102307454

文件头:内容头信息(检测内容,不严谨,可以进行伪造)

对应详解:https://blog.csdn.net/chinabinlang/article/details/11797587?utm_source=blogxgwz3

image-20210830102719547

简要上传表单代码分析解释

image-20210830110455643

$_FILES函数详解:https://www.cnblogs.com/laijinquan/p/8682282.html

演示案例(基于代码分析)

uploadlabs 关卡分析
Pass-01(白名单)
方式一
  • 尝试上传php文件发现上传不了,对代码进行分析,发现验证代码时用前端js编写的

    image-20210830205257770
  • 这时候我们上传一个图片格式(内有后门代码),直接打开bp进行抓包操作,修改filename后缀,发现成功上传!

    image-20210830205630518

方式二
  • 通过f12将网页代码复制下来发现验证代码时用前端js编写的

    image-20210829231834831

  • 这时候我们在自己本地新建一个文件(存放我们的第一关,防止误删其他重要代码),在代码中我们将验证部分删掉,同时加上对应的提交位置

    image-20210829233400467

    image-20210829233614684

    image-20210829233315295

  • 进行上传操作,在对应文件看到php文件,成功上传!

    image-20210829233802030

Pass-02(MIME 信息验证)(白名单)
  • 我们先上传PHP文件,发现提示:文件类型不正确,请重新上传!

    image-20210830215642237

  • 通过分析代码,我们知道验证的地方是Content-Type这个地方,进行修改后成功将文件上传!

    image-20210830220341319

    image-20210830220152389

Pass-03(黑名单)(特殊解析后缀)
  • 我们先上传PHP文件,发现提示:不允许上传.asp,.aspx,.php,.jsp后缀文件!

  • 基础:trim函数详解

    strrchr() 函数详解

    image-20210830220732932

  • 通过分析代码,我们知道过滤方式为截图这些,我们首先要把代码读懂,发现这里限制条件并没有包括过滤php5后缀(Apache能够解析php5,但前提是apache的httpd.conf中有如下配置代码, AddType application/x-httpd-php .php .phtml .phps .php5 .pht .php3 .txt)

    image-20210830225729123

  • 尝试修改下后缀名为php5,上传成功!

    image-20210830225442903

Pass-04(黑名单)(.htaccess解析
  • 查看代码,我们对其进行分析,发现其过滤的文件后缀更多,但是没有过滤 .htaccess

  • 创建并上传.htaccess文件,文件内容为下面,然后上传带有shana的文件名(自定义),就会被解析成php

    <FilesMatch "shana">
      SetHandler application/x-httpd-php
    </FilesMatch>
    
    • 成功上传.htaccess文件和xshana.jpg文件
    image-20210830231107506
    • 成功访问,解析php代码成功!

    image-20210830231528429

Pass-05(黑名单)(大小写绕过)
  • 查看代码,我们对其进行分析,相对于前面少了这行代码

      $file_ext = strtolower($file_ext); //转换为小写
    
  • 过滤很充分,也过滤了.htaccess和.ini,但是没有将文件后缀名转换为小写,故大写绕过即可

    image-20210830231913360

Pass-06(黑名单)(空格绕过)
  • 查看代码,我们对其进行分析,相对于前面少了这行代码

    $file_ext = trim($file_ext); //收尾去空
    
  • 我们可以在文件名后缀最后面加上空格,来绕过黑名单的过滤。到服务器后,会强制将空格去除,从而在服务器上是正常的文件!
    image-20210830233010182
    image-20210830233111137

Pass-07(黑名单)(点绕过)
  • 查看代码,我们对其进行分析,相对于前面少了这行代码

    $file_name = deldot($file_name);//删除文件名末尾的点
    
  • 少了对点的过滤,因此直接在文件名后缀后面加上.即可实现上次

    image-20210830233505961

  • 上传到对应网站后,系统会强制将点去掉,所以在那边我们看到的文件是正常的格式(最后没有一个点)

Pass-08(白名单)(::DATA 绕过)
  • ::DATA

    php在 windows中如果文件名 + " : : D A T A " 之 后 的 数 据 当 成 文 件 流 处 理 , 不 会 检 测 后 缀 名 , 且 保 持 " : : DATA"之后的数据当成文件流处理,不会检测后缀名,且保持" : : DATA",,"::DATA"之前的文件名,它的目的就是不检查后缀名(Windows文件流特性)

  • 查看代码,我们对其进行分析,相对于前面少了这行代码

  $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
  • 我们直接上传a.php,然后抓包进行修改(如下图),实现绕过!
    image-20210830234527832
Pass-09(黑名单)
  • 基础知识

    deldot函数

  • 查看代码,我们发现和之前的没有太大区别,这时候我们从代码进行入手,对代码进行分析

    获取对应文件名->设立黑名单数组->首位去空->删除末尾的点->截取.后面的字符(包括点)->转换成小写->去除字符串::$DATA->首位去空

    image-20210831095647355

  • 主要思路:我们可以通过在末尾加点、空格来实现上传脚本的操作!在这里我们使用bp进行抓包,对其进行修改。

    image-20210906141027452

    变化过程:

    1234.php.空格 . ——>1234.php.空格. ——>1234.php.空格——>1234.php.——>1234.php(window特性)

Pass-10(黑名单)
  • 查看代码,我们发现其中有句语句是将黑名单中后缀改成空格的语句,但这里只执行一次,我们以此为突破口

image-20210906142146741

  • 主要思路:上传php文件,使用bp进行抓包,对其进行修改。将后缀改成pphphp即可

image-20210906145006941

Pass-11(白名单)(%00截断)
  • 基础知识

    substr

    strrpos

  • %00和0x00的区别

    前者用于地址方面的(get和post提交数据的位置进行修改)(修改位置有所不同,详情看第11和12关),后者是用于文件命名(在filename位置进行修改)

  • 查看代码,进行对应分析
    image-20210906150553620

  • 使用bp进行抓包发现这两个地方好像有点关联,我们尝试在后面加上x,1.jpg都不行,我们尝试使用截断 …/upload/1.jpg%00 (get会自动解码),发现能够成功上传!
    image-20210906145938991

    • 分析
      image-20210906151058682
Pass-12(白名单)
  • 跟Pass-11的方法类似,不过这个是post提交,POST不会像GET那样对%00进行自动解码,post内容修改为下面画框的位置。因此,我们需要在burp中选中%00右击->url ->urldecode->go 即可。
    image-20210906152245274
     

最后感谢小迪师傅的视频!!

笔记来源视频:点击这里

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值