攻防世界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

相关推荐
xixixi7777716 分钟前
了解一下Sentry(一个开源的实时错误监控平台)
前端·安全·开源·安全威胁分析·监控·sentry
Keely402851 小时前
学习编写chrome插件:Hello World 扩展
前端·chrome
hhcccchh1 小时前
学习vue第三天 Vue 前端项目结构的说明
前端·vue.js·学习
源力祁老师2 小时前
Odoo 19 制造与会计集成深度解析
前端·javascript·制造
不爱学习的YY酱2 小时前
告别局域网束缚!Excalidraw结合cpolar随时随地画流程图
安全·流程图·cpolar
iFlow_AI2 小时前
iFlow CLI Hooks 「从入门到实战」应用指南
开发语言·前端·javascript·人工智能·ai·iflow·iflow cli
漂流瓶jz2 小时前
SourceMap数据生成核心原理:简化字段与Base64VLQ编码
前端·javascript·算法
桜吹雪3 小时前
手搓一个简易Agent
前端·人工智能·后端
诸葛老刘3 小时前
前端 css中的函数
前端·css
谢尔登3 小时前
通用会话控制方案
前端·网络协议·tcp/ip·react.js·gitlab