在CTF(Capture The Flag)竞赛中,双写后缀(Double Extension或Duplicate Suffix)是一种绕过文件上传过滤的技术,特别适用于那些基于文件扩展名来确定文件类型的Web应用。这种方法利用了Web服务器或应用程序可能存在的逻辑漏洞,即只检查文件名中的最后一个后缀来决定文件类型。
双写后缀的工作原理:
通常,Web应用会检查上传文件的扩展名,以确保只接受特定类型的文件,如图像(.jpg, .png)。但是,如果应用只是简单地检查文件名中的最后一个后缀,那么上传一个具有双后缀的文件,如shell.php.jpg
,就可能绕过检查。
在这种情况下,服务器可能只看到.jpg
作为文件的扩展名,认为这是一个图像文件,而忽略了前面的.php
部分。然而,实际上,上传的文件包含了PHP代码,当尝试访问shell.php
时,服务器可能会尝试执行它作为PHP脚本,而不是显示为图像。
如何利用双写后缀:
-
创建文件:创建一个包含恶意代码的文件,如PHP shell,并给它一个双后缀的名称,例如
shell.php.jpg
。 -
上传文件:使用Web应用的文件上传功能上传此文件。如果应用的过滤逻辑仅仅基于最后一个后缀,上传将成功。
-
访问文件:通过访问
shell.php
(忽略后面的.jpg
)来执行恶意代码。如果服务器配置允许,这将使PHP代码被执行。