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

相关推荐
EasyGBS2 分钟前
从接入到稳定播放:无插件直播H5视频流媒体播放器EasyPlayer.js如何撑起Web端流媒体
开发语言·前端·javascript
不可能片场4 分钟前
nohup 之后进程还是死了:GUI 子进程的存活陷阱
前端·electron
名为沙丁鱼的猫72910 分钟前
React/JSX 编码规范
前端·javascript·react.js
是吕先森13 分钟前
【python】selenium实现web自动化测试
前端·python·selenium
Highcharts.js21 分钟前
甘特图纵向任务、横向时间显示图表可视化开发|Highcharts甘特图示例
开发语言·前端·javascript·可视化·甘特图·数据可视化·highcharts
聚铭网络29 分钟前
【一周安全资讯】两项数据资产分类与登记国家标准9月1日实施;索尼、华纳联合起诉Anthropic,指控盗用版权音乐训练Claude模型
人工智能·安全·分类
yume_sibai32 分钟前
Element Plus 导航与反馈组件完全指南(15个核心组件)
前端·elementui·交互
今日热点1 小时前
Windows 系统 C 盘深度清理教程:安全释放存储空间,避开误删风险
windows·安全
其实防守也摸鱼1 小时前
教育信息技术应用创新---基础软件信息赛(题库)
大数据·运维·人工智能·web安全·自动化
可乐鸡翅yeah_1 小时前
hls.js 多实例并发踩坑,多视频页面播放器内存与冲突问题解决
开发语言·前端·javascript·音视频·hls·m3u8·m3u8在线播放