[极客大挑战 2019]Secret File学习笔记

[极客大挑战 2019]Secret File学习笔记 正文一、查看源代码信息收集二、访问网页查看服务器返回信息三、访问网页代码审计四、php://filter/实现“PHP过滤”绕过五、base64解码获取 Flag正文一、查看源代码信息收集访问首页CtrlU查看页面源代码发现有一个隐藏链接指向Archive_room.php。访问Archive_room.php页面提示我把他们都放在这里了去看看吧并有一个SECRET按钮指向action.php。二、访问网页查看服务器返回信息访问action.php使用brupsuit工具拦截一下把请求包发送到重放器点击发送之后可以看到服务器返回 302 重定向到end.php。但重点在返回的 HTML 源码中有一段 HTML 注释!-- secr3t.php --这暴露了一个隐藏的秘密文件secr3t.php。三、访问网页代码审计访问secr3t.php页面会高亮显示自身源码?php// 语法高亮显示当前PHP源代码方便页面直接查看源码highlight_file(__FILE__);// 关闭所有错误提示屏蔽报错信息增加排查难度error_reporting(0);// 通过GET方式接收URL传参名为file的值赋值给变量$file$file$_GET[file];// 多重黑名单关键词过滤判断// strstr区分大小写查找字符串stristr不区分大小写查找if(strstr($file,../)// 禁止传入 路径跳转符 ../ 防止目录穿越||stristr($file,tp)// 禁止包含含tp字符拦截ThinkPHP框架相关文件||stristr($file,input)// 禁止包含含input字符拦截php://input伪协议||stristr($file,data)// 禁止包含含data字符拦截data://伪协议){// 命中黑名单关键词输出拒绝提示echoOh no!;// 直接终止程序运行不再执行后续代码exit();}// 无黑名单拦截直接引入/加载用户传入的文件核心文件包含漏洞点include($file);// 题目提示flag存储在flag.php文件内//flag放在了flag.php里?这段代码给了三个信息接受GET参数file然后通过include($file)包含该文件 —— 典型的文件包含漏洞但存在四个过滤规则../—— 禁止目录穿越tp不区分大小写—— 防止使用php://等伪协议stristr匹配tpinput—— 禁止php://inputdata—— 禁止data://注释提示flag 在flag.php中四、php://filter/实现“PHP过滤”绕过虽然tp被过滤了但我们需要检查php://filter这个字符串中是否包含tpphp://filter/convert.base64-encode/resourceflag.php逐字符检查p-h-p-:/-/-f-i-l-t-e-r并没有连续的tp子串所以不会被过滤关键原理php://filter是 PHP 的一个流封装协议用于对文件内容进行编码/解码处理convert.base64-encode会将文件内容转为 Base64 编码后输出这样即使flag.php中包含 PHP 代码会被服务器执行也能以编码形式显示出来构造 PayloadGET /secr3t.php?filephp://filter/convert.base64-encode/resourceflag.php五、base64解码获取 Flag服务器返回的响应底部包含一段 Base64 编码的字符串解码后得到flag.php的完整解释从中可以看到flag