DDCTF2019web----滴~

题目链接
题目界面:
题目

首先,观察!!
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解密,得到:

<?php
/*
 * https://blog.csdn.net/FengBanLiuYun/article/details/80616607
 * Date: July 4,2018
 */
error_reporting(E_ALL || ~E_NOTICE);


header('content-type:text/html;charset=utf-8');
if(! isset($_GET['jpg']))
    header('Refresh:0;url=./index.php?jpg=TmpZMlF6WXhOamN5UlRaQk56QTJOdz09');
$file = hex2bin(base64_decode(base64_decode($_GET['jpg'])));
echo '<title>'.$_GET['jpg'].'</title>';
$file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);
echo $file.'</br>';
$file = str_replace("config","!", $file);
echo $file.'</br>';
$txt = base64_encode(file_get_contents($file));

echo "<img src='data:image/gif;base64,".$txt."'></img>";
/*
 * 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的内容:

<?php
include('config.php');
$k = 'hello';
extract($_GET);
if(isset($uid))
{
    $content=trim(file_get_contents($k));
    if($uid==$content)
	{
		echo $flag;
	}
	else
	{
		echo'hello';
	}
}

?>

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值