CTFShow菜狗杯部分WP

TapTapTap

打开题目,是一个小游戏,通关就可以直接获得Flag

没能通关

那直接Ctrl + U查看源代码,然后查看这个js/habibiScript.jsJS文件

 

 发现这里可疑

 在Console控制台运行,它说flag在/secret_path_you_do_not_know/secretfile.txt里面

 在URL中直接访问拿到Flag 

无一幸免

这个题目涉及到了 PHP 中的数组漏洞,主要关注的是 PHP 对数组的处理方式。让我为你解释一下解题思路:

  1. 页面结构: 代码开始时通过 include "flag.php"; 包含了 flag.php 文件的内容,然后使用 highlight_file(__FILE__); 将代码本身的源代码高亮显示在页面上。

  2. 用户输入处理: 代码中检查是否存在名为 0 的 GET 参数,如果存在,会执行一系列操作。

  3. 数组漏洞利用: 在代码中,首先使用 $arr[$_GET['0']] 这样的方式将值赋给数组,然后在下一行使用 $arr[]=1 给数组追加一个值。在 PHP 中,如果使用空数组下标,PHP 会将下一个索引的值自动递增。所以 $arr[$_GET['0']] 事实上是在将值赋给了下一个索引,而不是 0 这个索引。

  4. 条件判断: 接着代码中使用 if ($arr[]=1),这里又一次给数组追加了一个值并判断追加操作的结果。由于上一步已经将值赋给了下一个索引,这里实际上是判断一个已经存在的索引是否为真。

解题思路:

要解决这个题目,你需要利用 PHP 的数组漏洞,构造一个方式来触发判断中的条件。具体来说,你需要:

  1. 使用 ?0= 作为 GET 参数,以便触发数组赋值操作。

  2. 由于之前的操作已经将值赋给了索引 1,所以接下来你需要将索引 1 的值设置为一个非零值,从而满足条件。

http://example.com/index.php?0=&1=1

这个请求将会在数组中给索引 1 赋值为 1,然后由于条件判断为真,输出 flag

请注意,这个题目涉及了特定的 PHP 行为,实际应用中,不应依赖这种行为来处理逻辑。在代码编写中,应该遵循严格的验证和过滤规则,避免出现漏洞。

 

 

posted @ 2023-05-31 14:54  Fab1an  阅读(42)  评论(0编辑  收藏  举报  来源