[BJDCTF2020]ZJCTF,不过如此

[BJDCTF2020]ZJCTF,不过如此_第1张图片

伪协议读取next.php源码

[BJDCTF2020]ZJCTF,不过如此_第2张图片

 [BJDCTF2020]ZJCTF,不过如此_第3张图片

preg_replace() /e代码执行漏洞_preg_replace /e-CSDN博客

查找资料我们发现,在php5.6及以下版本中,/e使得preg_replace的第二个参数可以被当作php代码执行,第二个参数中\\1指的是正则匹配到的第一组文本,是定死的,所以我们可以考虑第一个参数使用.*匹配任意文本,第三个参数${getFlag()},从而让第二个参数的值取得${getFlag()}并执行getFlag()函数

通过下面的foreach循环,re为get变量的键,str为get变量的值,故可构造

.*=${getFlag()}  

从而实现执行getFlag中的一句话木马 

但是“.”不能作为首字符,故改用/S匹配任意非空白字符

这里${}的作用是变量替换,实现先执行表达式并将其作为变量的值的效果

[BJDCTF2020]ZJCTF,不过如此_第4张图片

你可能感兴趣的:(ctf,web)