攻防世界WEB(新手模式)18-easyphp

打开题目,直接开始代码审计

  • 条件1 :$a 必须存在,且 intval($a) 必须大于 6000000,同时 strlen($a) 必须小于等于 3。

    • 这意味着 $a 必须是一个字符串,且它的整数值大于 6000000,但字符串长度不能超过 3。这看起来是不可能的,因为一个长度不超过3的字符串,其整数值不可能大于6000000。

    • 这里可能存在一个漏洞:intval() 函数在处理字符串时,会从字符串的开头解析数字,直到遇到非数字字符为止。因此,我们可以利用科学计数法来绕过这个限制。例如,$a = "1e9",它的整数值是1,但 intval("1e9") 会返回1,而 strlen("1e9") 是3。

  • 条件2 :$b 必须存在,且 md5($b) 的最后6个字符必须是 8b184b。

    • 我们需要找到一个字符串 $b,使得 md5($b) 的最后6个字符是 8b184b。这可以通过暴力破解或使用彩虹表来实现。

  • 条件1 :$c 必须是一个数组,且 $c["m"] 必须存在,不能是数字,且必须大于2022。

    • 这里的关键是 !is_numeric(@$c["m"]) 和 $c["m"] > 2022。我们需要一个非数字的值,但它仍然可以比较大小。PHP中的字符串比较是按字典序进行的,因此我们可以使用一个字符串,比如 "2023a",它大于 2022,但不是数字。
  • 条件2 :$c["n"] 必须是一个数组,且长度为2,且第一个元素也是一个数组。

    • 我们需要构造一个数组 $c["n"],其中包含两个元素,第一个元素是一个数组。
  • 条件3 :array_search("DGGJ", $c["n"]) 必须返回一个非 false 的值,但在遍历 $c["n"] 时,不能有任何元素等于 "DGGJ"。

    • 这里的关键是 array_search 返回的是键名,而不是值。因此,我们可以构造一个数组,其中 "DGGJ" 是键名而不是值。例如:
  1. 设置 $a 为 "1e9",使得 intval($a) 大于6000000且 strlen($a) 小于等于3。

  2. 找到一个字符串 $b,使得 md5($b) 的最后6个字符是 8b184b。

  3. 设置 $c 为一个JSON字符串,解码后满足以下条件:

    • $c["m"] 是一个非数字的字符串,且大于2022。

    • $c["n"] 是一个包含两个元素的数组,第一个元素是一个数组,且 "DGGJ" 是第一个元素的键名。

最终的GET请求可能类似于:

复制代码
?a=1e9&b=53724&c={"m":"2023C","n":[[],0]}

得到flag

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
云水一下3 天前
零基础玩转bWAPP靶场(七十一):Slow HTTP DoS(慢速HTTP拒绝服务)
web安全·bwapp·slowhttptest
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
龙亘川3 天前
一网统管AI平台民生业务实践:基于城市数字底座赋能公积金业务服务升级
大数据·安全·智慧城市·开源软件·数据可视化·政务
kybs19913 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net