You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP类型混淆(Type-juggling):CTF中如何绕过数组弱比较验证?

绕过PHP弱比较及后续验证的Payload构造

先拆解代码中的核心验证逻辑:

  1. $_GET["usr"] == $user:$user是array("user" => "admin"),PHP的==对数组的比较规则是键值对完全匹配(顺序不影响)。
  2. !strcmp($_GET["pwd"], $secret):strcmp函数若接收非字符串参数(比如数组)会返回NULL,!NULL等价于true。

Payload构造细节:

  • usr参数:需传递一个包含user=>admin键值对的数组,GET请求中格式为usr[user]=admin,这样$_GET["usr"]会被PHP解析为和$user一致的数组,弱比较直接成立。
  • pwd参数:传递任意数组即可绕过strcmp验证,比如pwd[]=xxx,此时strcmp返回NULL,取反后条件成立。
  • path参数:指定要扫描的目录,比如path[1]=/(根目录)或者path[1]=./(当前目录)。

完整URL Payload示例:

?usr[user]=admin&pwd[]=123&path[1]=/

逻辑验证:

  • $_GET["usr"]被解析为array("user" => "admin"),和$user用==比较时键值对完全匹配,第一个条件通过。
  • $_GET["pwd"]是数组类型,strcmp对比数组与字符串$secret返回NULL,!NULL为true,第二个条件通过。
  • 最终执行scandir并输出指定目录的文件列表。

内容的提问来源于stack exchange,提问作者pittgi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:32:43