首先,观察!!
1、titile和get传送的数据jpg的内容是一样的,而且很像是加密过的字符串
2、img函数提供的参数有提到base64,猜测其后的内容是base64加密的内容
然后,尝试:
1、将jpg后面的内容用base64解密,得到NjY2QzYxNjcyRTZBNzA2Nw==
2、看起来还是像base64加密的内容,再次解密,得到666C61672E6A7067
3、这次得到的不是base64加密的内容了,像什么呢?注意到,这串字符由数字和字母组成,而且字母不超过E,疑似十六进制数,用十六进制解密试试,得到flag.jpg
(这一步也是看了题解才知道,凡是给出的条件没有哪个是多余的,一定要探索到最后,找出明确意义)
4、再联想:get传入的jpg的内容和题目中看到的内容,文字部分是一样的,图片部分,应该也是由传入的参数决定的
5、那么,考点来了:通过修改jpg参数的内容来获取想要的内容(本地文件泄露)
想看的自然是index.php了,所以将index.php经过一次十六进制加密,再经过两次base64加密,之后传入jpg参数,得到:
显然,想尝试把img中scr里的意思有用内容用base63解密,得到:
'.$_GET['jpg'].'';
$file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);
echo $file.'';
$file = str_replace("config","!", $file);
echo $file.'';
$txt = base64_encode(file_get_contents($file));
echo "";
/*
* Can you find the flag file?
*
*/
?>
这样就得到了inde.php里的内容。
首先读注释,发现是一个博客的url,又跟了一个日期,按照提示,找到对应博文,如下:
接着读index.php,发现确实验证了之前的猜测(还是需要一定的观察力的,一定要把已知内容进行联系)
最后提示,Can you find the flag file?说明到现在还没有找到flag文件,想一下已知线索,觉得应该去那篇博文里找
博文讲的是swp文件泄露(又一个考点),那到底应该去找哪一个swp文件呢?第一反应是搜索题目的url目录,用dirsearch也好,wwwscan也好都只能找到三个状态为200的文件(也许有更好的搜索方法,有待探索),看了wp发现,其实就是博文里反复提到的practice.txt.swp
(远在天边近在眼前。。。)
查看该文件,得到:
看样子应该是flag的入口文件了,显然,还是想知道这个文件里的内容,故技重施,发现不太对。原因是由于正则表达式的存在,!被过滤了,但是,另一条str_replace语句提示,config和!之间有替换关系,所以最终构造的应该是f1agconfigddctf.php的三次编码后的值,最后传入jpg参数,得到:
和之前类似,可以得到f1ag!ddctf.php的内容:
到了这里,官方题解给的是,把k的值设为vsp地址,uid设为2333(这个值应该是因人而异),我百度了半天也不晓得vsp是什么,但是我尝试将uid设为各种值,发现都没用,最后一气之下,直接uid=就回车(也就是没设值)就得到flag了,后来想想其实也是,hello也不是一个文件,读取内容应该就是空,不过也是凑巧了,正确方法还有待学习
总结
1、一定要多观察、联想,所有的条件都会有一个合理的解释(虽然需要经验积累)
2、swp文件泄露、本地文件泄露算是再次巩固了
3、学海无涯,苦作方舟
-完结-