[ZJCTF 2019]NiZhuanSiWei
打开就是源码,进行分析有三层要进行绕过的地方
先分析第一层
isset() 函数可以检测变量是否存在
file_get_contents() (可以把整个文件读入到一个字符串中)
那么只要把$text这个变量通过data伪协议写入就行
这个用法有俩
data://text/plain,
data://text/plain;base64,
payload:
?text=data://data://text/plain,welcome to the zjctf
这样第一层就过了
下面第二层
正则过滤掉flag include($file); //useless.php
然后就是访问这个文件 可以用php://filter协议来读取useless.php
讲一下php://协议
php://filter用于读取源码,
php://filter/read=convert.base64-encode/resource=[文件名]读取文件源码(针对php文件需要base64编码))
php://input用于执行php代码
php://input + [POST DATA]执行php代码 这个是用post传的
那么构造payload:file=php://filter/read=convert.base64-encode/resource=useless.php
一看就知道是base64加密
接下来就是第三层了
进行反序列化
file_get_contents()就会读取flag.php了
查看源代码就可以发现flag,这里就可以跳过第二步了