跳转至

每日一题 —— [PolarCTF]到底给不给flag呢

题目地址:https://www.polarctf.com/#/page/challenges

打开题目,是一堆的 php 源代码。但是注意到题目要求接受 GET 和 POST 两个方法的参数。

首先第一步:一旦两个传参方法都没有 flag 参数,就会导致程序退出。所以,我们至少需要一个方法中传入 flag 参数。我们接着往下看:

第二步,判断两种方法中,都不允许出现 flag==flag 的情况出现。所以,我们接着往下看他们需要我们干什么。

接下去的两步,先是对 POST 方法中的键值对进行 $$key = $value 的赋值。也就是说,每一个 POST 中的参数名,都会作为一个 php 变量名创建,其值为传入参数的值。然后就是对 GET 方法中的键值对进行 $$key = $$value 的赋值。通俗来讲,就是获取以传入参数的值为变量名的内容,并将其赋值给以传入参数名为变量名的变量。

我们尝试性地给 GET 赋值: ?flag=a ,然后发现回显 "都是假象", 于是往下翻,发现 “被你发现了”,推测这里为回显位。我们继续观察代码,我们目前传入的参数其实是执行了 $flag=$a ,但是我们的 $a 是不存在的。所以一个不存在的变量把 $flag 的值给覆盖了。所以可能什么有用的信息都没有。

由于我们最终需要输出 $flag ,而 $flag 的值是不能有改动的。那么我们需要让 $a 的值就是原来的 $flag 的值。观察 POST 方法的赋值,发现它赋值部分是自定义的,那么我们是无法获得 $flag 的值的。所以我们使用 GET 方法的赋值。只要先让 $a = $flag 就可以。所以最终 payload:

?a=flag&flag=a

文章热度:0次阅读