每日一题 —— [PolarCTF]到底给不给flag呢¶
打开题目,是一堆的 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:
文章热度:0次阅读