文件上传绕过的方法

1.直接上传,没有绕过方式

    捕获.JPG

2.绕过前端js过滤进行上传

  •      关闭浏览器中的js,然后进行上传;禁用js或者F12修改即可

      1.JPG

  • 通过burpsuit进行抓包,修改后缀名进行上传

      2.JPG

      3.JPG


3.MIME-TYPE检测绕过;Burp截包,修改Content-Type,然后放行,即可绕过


     捕获.GIF

     捕获1.GIF

     捕获2.GIF

          捕获3.GIF

         捕获4.GIF

4.文件头绕过上传;添加jpg等的二进制头部

   文件头检查

  添加GIF图片的文件头GIF89a,绕过GIF图片检查。


     捕获5.GIF

              捕获8.GIF

               捕获9.GIF

              捕获6.GIF

              捕获11.GIF

             捕获10.GIF

          捕获7.GIF

5.黑名单方式绕过

  •      文件名后缀大小写混合绕过。.php改成.phP然后上传即可。感觉和XSS的一些过滤绕过非常相似。

  •      这种只删除一次php的,即可:双写文件名绕过,文件名改成xx.pphphp

  •      利用Windows系统的文件名特性  文件名最后增加点和空格,写成.php.,上传后保存在Windows系统上的文件名最后的一个.会被去掉,实际上保存的文件名就是.php

  •      Windows文件流特性绕过   文件名改成.php::$DATA,上传成功后保存的文件名其实是.php

  •     上传路径名%00截断绕过  上传的文件名写成11.jpg, save_path改成../upload/11.php%00,最后保存下来的文件就是11.php

      捕获13.GIF

         捕获14.GIF

           4.JPG

           5.JPG

           捕获15.GIF

             要使用截断上传需要在php.ini中将magic_quotes_gpc改为off,并需要确保php版本在5.3以下

            6.JPG

        

6.白名单绕过

  •      渲染函数导致可用图片webshell

             原理:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。具体实现需要自己编写Python程序,人工尝试                         基本是不可能构造出能绕过渲染函数的图片webshell的。

  •     条件竞争

            利用条件竞争删除文件时间差绕过。

         捕获16.GIF


       通过图片马进行绕过上传  

          制作图片马

     捕获18.GIF

  •           通过上传图片马直接执行php文件,需要修改http.conf中的以下文件添加执行的文件后缀名

      捕获17.GIF      

  • 通过文件包含漏洞进行php文件的执行

     7.JPG

     8.JPG

      9.JPG

    文件包含

      10.JPG

图片渲染上传绕过

将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。具体实现需要自己编写Python程序,人工尝试基本是不可能构造出能绕过渲染函数的图片webshell的。


条件竞争

利用条件竞争删除文件时间差绕过。

猜你喜欢

转载自blog.51cto.com/13905896/2287342