
接收 POST 提交的 url 参数,连续四层校验,全部通过后,由服务器后端主动访问该 url;服务器读取 url 返回内容等于pentest,就输出 flag。
第 1 层:判断是否传入 POST 参数 url
第 2 层:校验 URL 整体格式合法性
第 3 层:解析 URL,校验 Host 主
parse_url($url):PHP 内置函数,拆分 URL 字符串,提取 scheme 协议、host 主机、user 用户名、port 端口、path 路径等信息,存入数组$rprint_r($r):打印拆分后的数组,也就是页面上看到的Array([scheme] => http, [host]=>getflag.com...),属于调试输出,用来让我们看到解析结果。preg_match('/getflag\.com$/', $r['host'])正则匹配\.转义字符,代表普通小数点.$:正则锚点,代表字符串末尾- 含义:
parse_url提取出来的 host,结尾必须是 getflag.com
第 4 层:服务器发起请求,校验返回内容(拿到 flag 的最终关卡)
Payload: url=data://getflag.com/plain,pentest 原理:
- parse_url 解析该 url,host 为
getflag.com,满足/getflag\.com$/正则; - PHP 中
data://伪协议,file_get_contents会以第一个逗号分割,逗号后的内容作为返回文本; - 读取结果为
pentest,满足file_get_contents($url)=='pentest',拿到 flag。
用hackbar做

