news 2026/5/17 10:08:13

ctf show web入门90

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ctf show web入门90

这是一个经典的 PHP 弱类型与函数特性绕过的 CTF 题目。我们的目标是让代码执行到 echo $flag;,也就是需要同时满足两个条件。
下面为你梳理详细的解题思路:
我们需要分析接收参数 $num 后的逻辑控制流:

if($num==="4476"){
die("no no no!");
}

含义:使用强等于 === 校验。如果传入的 $num 严格等于字符串 "4476",程序直接终止。
策略:我们传入的值绝对不能是普通的 "4476"。

if(intval($num, 0)===4476){
echo $flag;
}

含义:使用 intval($num, 0) 处理后,其整数值必须严格等于整数 4476。
关键点:注意 intval 的第二个参数是 0。当 base 为 0 时,PHP 会根据字符串的前缀来自动检测并转换进制:
如果字符串以 0x 或 0X 开头,视为十六进制。
如果字符串以 0 开头,视为八进制。
如果字符串是正常的数字,视为十进制。
2. 解题思路(绕过方法)
要同时满足**“不等于字符串 '4476'”但“整数转换后等于 4476”**,有以下几种常见的绕过技巧:
方法一:八进制绕过(推荐)
将十进制的 4476 转换为八进制。因为 intval($num, 0) 中基数为 0,当我们传入以 0 开头的八进制字符串时,它会将其自动转为十进制的 4476。
Payload 1:?num=010574


方法二:十六进制绕过
将十进制的 4476 转换为十六进制。
4476 的十六进制是 117c。
在 PHP 中,以 0x 开头会被识别为十六进制。
Payload 2:?num=0x117c


方法三:数字+字符串绕过(PHP 弱类型特性)
intval() 函数在转换非标准数字字符串时,会从左往右读取,直到遇到非数字字符为止。
例如,intval("4476a") 的结果就是 4476。
由于 "4476a" === "4476" 为 false,可以完美绕过第一个 if。
Payload 3:?num=4476a 或 ?num=4476.5


方法四:正负号或空格绕过
添加正号:" +4476" 强等于校验不通过,但 intval() 转换后依然是 4476。
Payload 4:?num=+4476 或 ?num= 4476%20

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/17 10:07:27

免费Windows内存管家:Mem Reduct快速解决电脑卡顿问题

免费Windows内存管家:Mem Reduct快速解决电脑卡顿问题 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 电…

作者头像 李华
网站建设 2026/5/17 9:59:39

AI技能链上合约化:构建去中心化AI服务市场的架构与实践

1. 项目概述:当AI技能遇上链上合约最近在探索AI Agent和智能合约的交叉领域时,我遇到了一个非常有意思的项目:saralobo/skill-ai-execution-contract。这个项目标题乍一看有点复杂,但拆解开来,核心是“技能”、“AI执行…

作者头像 李华