DDCTF2019web----滴~

题目链接
题目界面:
DDCTF2019web----滴~_第1张图片

首先,观察!!
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参数,得到:
DDCTF2019web----滴~_第2张图片
显然,想尝试把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,又跟了一个日期,按照提示,找到对应博文,如下:
DDCTF2019web----滴~_第3张图片
接着读index.php,发现确实验证了之前的猜测(还是需要一定的观察力的,一定要把已知内容进行联系)

最后提示,Can you find the flag file?说明到现在还没有找到flag文件,想一下已知线索,觉得应该去那篇博文里找

博文讲的是swp文件泄露(又一个考点),那到底应该去找哪一个swp文件呢?第一反应是搜索题目的url目录,用dirsearch也好,wwwscan也好都只能找到三个状态为200的文件(也许有更好的搜索方法,有待探索),看了wp发现,其实就是博文里反复提到的practice.txt.swp(远在天边近在眼前。。。)

查看该文件,得到:
DDCTF2019web----滴~_第4张图片
看样子应该是flag的入口文件了,显然,还是想知道这个文件里的内容,故技重施,发现不太对。原因是由于正则表达式的存在,!被过滤了,但是,另一条str_replace语句提示,config和!之间有替换关系,所以最终构造的应该是f1agconfigddctf.php的三次编码后的值,最后传入jpg参数,得到:
DDCTF2019web----滴~_第5张图片
和之前类似,可以得到f1ag!ddctf.php的内容:


到了这里,官方题解给的是,把k的值设为vsp地址,uid设为2333(这个值应该是因人而异),我百度了半天也不晓得vsp是什么,但是我尝试将uid设为各种值,发现都没用,最后一气之下,直接uid=就回车(也就是没设值)就得到flag了,后来想想其实也是,hello也不是一个文件,读取内容应该就是空,不过也是凑巧了,正确方法还有待学习

总结
1、一定要多观察、联想,所有的条件都会有一个合理的解释(虽然需要经验积累)
2、swp文件泄露、本地文件泄露算是再次巩固了
3、学海无涯,苦作方舟
-完结-

你可能感兴趣的:(DDCTF2019)