> 文章列表 > CTFHub | 双写后缀

CTFHub | 双写后缀

哎呀,今天在CTFHub上搞了个"双写后缀"的挑战,结果把我绕得头昏眼花!不过搞清楚之后,真是佩服这个绕后技巧,太妙了!

这题主要是让我们上传一个一句话木马,但服务器有个严格的后缀白名单机制。直接上传.php会被清空后缀名,导致文件无法执行。这时候就要祭出我们的"双写绕后"大法!

简单概括,就是我们把文件名写成这样:shell.pcerhp。服务器检查后缀的时候,会先找最长匹配的后缀,把cer部分去掉,结果剩下个.php。这样,原本的恶意后缀就被保留下来了!真是个"巧妙的躲猫猫"。

这个漏洞告诉我们,简单的后缀检查机制并不靠谱。防御方应该要更严谨的处理文件名,比如检查所有可能的后缀组合,或者从文件头判断文件类型。总之,双写绕后,是个既有趣又实用的CTF技巧,下次遇到类似问题,记得试试这个花样!(不过记得要在授权范围内使用哦~)

CTFHub | 双写后缀

 0x00 前言

        CTFHub 专注网络安全、信息安全、白帽子技术的在线学习,实训平台。提供优质的赛事及学习服务,拥有完善的题目环境及配套 writeup ,降低 CTF 学习入门门槛,快速帮助选手成长,跟随主流比赛潮流。

        

        

0x01 题目描述

双写后缀:

        (无)

网页显示内容

        

        

0x02 解题过程

分析网页源代码,可以看到网页会将上传的文件后缀名进行判断,符合白名单条件的会返回为空

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>CTFHub 文件上传——双写绕过</title>
</head><body><h1>CTFHub 文件上传——双写绕过</h1><form action="" method="post" enctype="multipart/form-data"><label for="file">Filename:</label><input type="file" name="file" id="file" /><br /><input type="submit" name="submit" value="Submit" /></form><p></p>
</body></html><!--
$name = basename($_FILES['file']['name']);
$blacklist = array("php", "php5", "php4", "php3", "phtml", "pht", "jsp", "jspa", "jspx", "jsw", "jsv", "jspf", "jtml", "asp", "aspx", "asa", "asax", "ascx", "ashx", "asmx", "cer", "swf", "htaccess", "ini");
$name = str_ireplace($blacklist, "", $name);
-->

        

这里上传一个后缀名为.php的一句话木马文件,提示上传成功

        

使用蚁剑连接测试网站连通性,发现返回值为空

        

那么根据题目的提示,我们可以使用双写后缀名进行文件上传,来达到绕过白名单检测的目的

双写后缀绕过:

例如:正常上传一个 .php 文件后缀的因为在白名单中出现会被网页清空后缀名。这时我们可以写两个后缀名 .pcerhp 网页会检测到 cer 后缀并清空,然而清空之后 .php 并不会消失,因为网页代码并没有对这个条件做判断。只清空了 cer ,那么 .php 后缀名被保留在网页中变达到了双写后缀绕过的目的。

http://xxx.ctfhub.com:10800/upload/shell.    //上传文件名:shell.phphttp://xxx.ctfhub.com:10800/upload/shell.php    //上传文件名:shell.pcerhp

        

使用蚁剑进行连接并测试连通性,可以正常连接 

        

查找网页目录中的文件,发现此题flag

        

        

0x03 参考文献

[1].多学点技术. 利用后缀名双写绕过[EB/OL]. [2023-04-09]. https://blog.csdn.net/weixin_44032232/article/details/109009842.

        

        

0x04 总结

文章内容为学习记录的笔记,由于作者水平有限,文中若有错误与不足欢迎留言,便于及时更正。