进去就三个链接。
第三个连接有源码
程序流程就是。
1。json_decode(POST的数据),第二个参数True表示返回数组
2。进入is_valid检验黑名单字符串。并且POST的数据中要有page参数
3。取page参数。通过file_get_contents读取。返回结果为$contents
4。is_valid判断返回结果是否有黑名单中的字符串。
5。最后输出结果
首先。既然第一步要json_decode。那么我们就要POST一个json格式的数据{"xxx":"xxx"}
第3步中。要求json数据中。要有page参数。{"page":"xxx"}
接下来就是绕过is_valid。这里is_valid匹配了两次。一次是POST数据。第二次是返回结果
json_decode支持unicode编码。可以用unicode编码绕过第一次匹配。
并且file_get_contents支持伪协议。可以用php://filter绕过第二个判断
payload如下:
\u0070\u0068\u0070==php
\u0066\u006c\u0061\u0067==flag
{"page" : "\u0070\u0068\u0070://filter/read=convert.base64-encode/resource=/\u0066\u006c\u0061\u0067"}