滴~ ctf

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 ''.$_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? * */ ?>

ddctf web 滴~
题目链接:http://117.51.150.246/index.php?jpg=TmpZMlF6WXhOamN5UlRaQk56QTJOdz09
看到这题目链接我们发现jpg后是base64编码,将其二次解码后为16进制666C61672E6A7067,后解16进制发现是flag,php也正如页面显示的一样
滴~ ctf_第1张图片
后尝试在jpg后面输入index.php试试,index.php按照解码的反顺序来
16进制->base64->base64。
index.php->TmprMlpUWTBOalUzT0RKbE56QTJPRGN3
后查看源码发现这个是base64编码!!
滴~ ctf_第2张图片
继续解码,发现源码如下:


'.$_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? *http://117.51.150.246/index.php?jpg=TmpZek1UWXhOamMyTXpabU5tVTJOalk1TmpjMk5EWTBOak0zTkRZMk1tVTNNRFk0TnpBPQ== */ ?>

查看源码,发现注释有一个博客,直接访问,发现竟然是一个echo语法的讲解的博客,没用,后看到评论部分,发现这题真的坑,出题人将另一个重要的提示隐藏在他其他的博客里,链接如下:https://blog.csdn.net/fengbanliuyun/article/details/80913909

查看这个博客,发现vim编辑器在异常退出时,第一次产生一个.practice.txt.swp,再次意外退出后,将会产生名为.practice.txt.swo的交换文件;而第三次产生的交换文件则为“.practice.txt.swn”;依此类推。于是我们访问
http://117.51.150.246/practice.txt.swp,发现f1ag!ddctf.php继续访问http://117.51.150.246/f1ag!ddctf.php,访问成功,但没有显示,说明文件存在。
滴~ ctf_第3张图片
这时,我们回到上面源码,上面源码是将文件名进行二次base64后进行16进制。正则将不是字母数字点号的文件去掉,后将config替换为后将文件编码返回出来。
于是我们将f1ag!ddctf.php中的换为config得到flagconfigddctf.php将其进行转码为TmpZek1UWXhOamMyTXpabU5tVTJOalk1TmpjMk5EWTBOak0zTkRZMk1tVTNNRFk0TnpBPQ==
转到链接查看源码:
http://117.51.150.246/index.php?jpg=TmpZek1UWXhOamMyTXpabU5tVTJOalk1TmpjMk5EWTBOak0zTkRZMk1tVTNNRFk0TnpBPQ==
将base64源码解码为:


查看源码发现extract变量覆盖问题;
于是构造http://117.51.150.246/f1ag!ddctf.php?uid=&k=得到flag

你可能感兴趣的:(ctf学习)