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
以上就是后缀名绕过的知识原理了。