攻防世界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"],其中包含两个元素,第一个元素是一个数组。
  • 条件3array_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

相关推荐
sean28 分钟前
开发一个自己的 claude code
前端·后端·ai编程
用户214118326360232 分钟前
dify案例分享-用 Dify 一键生成教学动画 HTML!AI 助力,3 分钟搞定专业级课件
前端
数据库安全2 小时前
《金融电子化》:构建金融韧性运行安全体系:从灾备管理到主动防御新范式
大数据·安全·金融
太过平凡的小蚂蚁2 小时前
Kotlin 协程中常见的异步返回与控制方式(速览)
开发语言·前端·kotlin
咖啡の猫3 小时前
Vue初始化脚手架
前端·javascript·vue.js
晨枫阳3 小时前
uniapp兼容问题处理总结
前端·vue.js·uni-app
会开花的二叉树5 小时前
应用层网络协议深度解析:设计、实战与安全
网络·网络协议·安全
liusheng5 小时前
腾讯地图 SDK 接入到 uniapp 的多端解决方案
前端·uni-app
拉不动的猪5 小时前
如何处理管理系统中(Vue PC + uni-app 移动端):业务逻辑复用基本方案
前端·javascript·架构
witkey_ak98965 小时前
网安面试题收集(4)
网络安全