0x00 前言

  今天来讨论文件上传漏洞之后缀名绕过。通常在实际生产过程中,并不会有直接可以上传.php等明显的可直接执行的文件,所以在这里我记录下后缀名绕过的原理和方法。

  0x01 绕过方法

  首先准备三个文件后缀名分别为.php .php3 .php30 如图:

  上传.php的情况下发现,有了黑名单检验,不能上传.php结尾的文件,这是大部分实际情况下会遇到的问题。

但是当我们把.php3和.php30上传时发现都能成功上传,但是发现.php30的文件访问时直接将文件内容以字符显示了出来,所以.php30不能用于后缀名绕过.php3可以。




通过菜刀检验发现.php3可以获取后台目录


  0x02 原理

  部分服务仅根据后缀、上传时的信息或Magic Header来判断文件类型,此时可以绕过。以Apache为例 会通过通过后缀名判断使用哪种解析器

在apache的配置文件中有这么一段代码

可以看到如果后缀名是.php .php3 4 5 .pht phtml 等 都是指向php解析器的 可以通过这些后缀名绕过后缀名检验

  0x03 部分语言可选绕过后缀名

   php由于历史原因,部分解释器可能支持符合正则 /ph(p[2-7]?|t(ml)?)/ 的后缀,如 php / php5 / pht / phtml / shtml / pwml / phtm 等 可在禁止上传php文件时测试该类型。

  jsp引擎则可能会解析 jspx / jspf / jspa / jsw / jsv / jtml 等后缀,asp支持 asa / asax / cer / cdx / aspx / ascx / ashx / asmx / asp{80-90} 等后缀。

  除了这些绕过,其他的后缀同样可能带来问题,如 vbs / asis / sh / reg / cgi / exe / dll / com / bat / pl / cfc / cfm / ini 等。

  0x04 防范措施

  使用白名单限制上传文件的类型
  使用更严格的文件类型检查方式

  0x05 END

   以上就是后缀名绕过的知识原理了。

Last modification:November 29th, 2020 at 02:15 pm
如果觉得我的文章对你有用,请随意赞赏