• 注册
  • 手游发布 手游发布 关注:4 内容:98

    文件上传漏洞原理和绕过方式

  • 查看作者
  • 打赏作者
    • 5
    • 手游发布
    • LV.1 初学乍练

      一.文件上传漏洞原理

      网站Web应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型,此时攻击者就可以上传一个webshell到一个Web可访问的目录上,并将恶意文件传递给如PHP解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。还有一部分是攻击者通过Web服务器的解析漏洞来突破Web应用程序的防护。

      二.文件上传绕过方式

      1.客户端JavaScript检查

      客户端检测一般只是在JavaScript代码中加入了对扩展名的黑白名单检查,这种方式只能防止一些普通用户上传错误,只要用Burpsuite在文件上传时进行截断改文件后缀名就可绕过。

      2.服务端检测

      A.MIME类型的检查

      就是检查Content-Type的值,MIME类型决定了某种扩展名用什么应用程序打开,GIF的MIME值为image/gif。

      B.文件扩展名检查

      与前端js后缀名检测类似,只不过是在后端进行检查,有时候还可以配合解析漏洞结合目录路径攻击,例如test.asp/test.jpg。后端后缀名检查也分两种,黑名单与白名单。

      黑名单检查绕过:

      文件名大小写绕过,例代码中有php规则,那么可以使用PHP或pHP绕过。

      黑名单列表绕过,对黑名单列表中没有的扩展名进行攻击,比如asa、cer等。

      利用windows和Linux系统的特性进行特殊文件名绕过,a.asp. a.asp_等。

      htaccess 文件攻击。

      配合解析漏洞(IIS、Apache等)。

      白名单绕过:

      截断攻击,比如a.asp%00.gif等。

      配合解析漏洞。

      C.目录路径的检查

      对目录路径可进行0x00截断绕过;以及可以控制目录地址,上传文件夹的参数可控)

      D.检测文件内容是否包含恶意代码

      这种方式主要检查图片文件的幻数,比如GIF的值为GIF89a,后端代码会检测改值判断是否为GIF图片文件,想要绕过只要在幻数后面加上一句话木马就行。

      F.解析漏洞

      F-1 IIS解析漏洞

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

      当建立*.asa、*.asp格式的文件夹时,其目录下的任意文件都将被IIS服务器当作asp文件来解析。

      在IIS6.0下,分号后面的扩展名不会被解析,也就是说当文件名为 *.asp;.jpg时,IIS6.0同样会以ASP脚本来执行。

      F-2 Apache解析漏洞

      在Apache 1.x和Apache 2.x中存在解析漏洞,但他们与IIS解析漏洞不同。

      Apache在解析文件时有一个规则:当碰到不认识的扩展名时,将会从后向前解析,直到碰到认识的扩展名位置,如果都不认识,则会暴露其源码,比如文件名为php.rar.xx.aa时Apache首先会解析aa扩展名,如果不认识则接着解析xx扩展名,这样一直遍历到认识的扩展名为止,然后再将其进行解析。

      F-3 PHP CGI解析漏洞

      在PHP的配置文件中有一个关键的选项:cgi.fi: x_pathinfo,这个选项在某些版本是默认开启的,在开启时访问url,比如:xxx.com/x.txt/x.php,其中x.php是不存在的文件,所以php将会向前递归解析,于是就造成了解析漏洞。由于这种漏洞常见于IIS7.0、IIS7.5、Nginx等Web服务器,所以经常会被误认为是这些Web服务器的解析漏洞。

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

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

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

      F-5 其他

      在Windows环境下,xx.jpg[空格]或xx.jpg.这两类文件都是不允许存在的,若这样命名Windows会默认除去空格或点,攻击者可以通过抓包在文件名后加一个空格或者点绕过黑名单。若上传成功,空格和点都会被Windows自动消除,这样也可以getshell。

      如果在Apache中配置文件.htaccess可被执行且可被上传,那可以尝试在.htaccess中写入:SetHandlerapplication/x-httpd-php,然后再上传名称为shell.jpg的webshell,这样shell.jpg就可解析为php文件。

      LV.6 渐入佳境

      你端坐在那里,我才知道我有多么浅薄,我曾忘情于两汉的歌赋,我曾惊讶于唐宋诗词,也曾流连于宋元的曲牌。如今而你才是人世间真正的圣人。

      回复
      LV.10 功行圆满

      复制粘贴来的好棒

      回复
      LV.10 功行圆满
      666
      回复
      LV.10 功行圆满
      SVIP3 Plus

      回复

      回复
      LV.9 已臻大成
      你端坐在那里,我才知道我有多么浅薄,我曾忘情于两汉的歌赋,我曾惊讶于唐宋诗词,也曾流连于宋元的曲牌。如今而你才是人世间真正的圣人。
      回复

      请登录之后再进行评论

      登录
    • 任务
    • 动态
    • 到底部
    • 帖子间隔 侧栏位置: