“百度杯”CTF比赛 九月场------code

=============================

个人收获:

1.phpstorm创建的文件会自动穿件idea,里面的workspace.xml会保存目录结构

2.URL文件包含要多注意

 

=============================

 

题目:

“百度杯”CTF比赛 九月场------code_第1张图片

 

刚开始以为是隐写,保存到本地打开看没有什么奇怪的地方,打开源码也很正常

但是URL的连接引起我的注意,我尝试打开flag.php,然后发现不存在

就扫下目录出现

直接打开config.php发现是空白,用jpg=config.php也是什么都没有

“百度杯”CTF比赛 九月场------code_第2张图片

我就直接包含下index.php,看看首页的源代码

“百度杯”CTF比赛 九月场------code_第3张图片

我们把内容拿去解密

“百度杯”CTF比赛 九月场------code_第4张图片

 

file:'.$file.'';
$file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);
$file = str_replace("config","_", $file);
$txt = base64_encode(file_get_contents($file));

echo "";

/*
 * Can you find the flag file?
 *
 */

?>

 

代码主要是读取参数jpg的值然后得到对应的文件内容并进行编码输出,这里面有2段过滤代码

第一段主要是将除了数字字母以外的字符删除     正则各种符号解释

第二段主要是将参数里面的config替换成_

 

然后最关键的点就是 Created by PhpStorm.这段文章, 因为由phpstorm创建的文件目录下面自动生成一个workspace.xml 里面包含了网站文件的结构各种信息 “百度杯”CTF比赛 九月场------code_第5张图片

 

 

我们访问下 http://919887305be54514900b420bce7e6886ad709a68346740a5.game.ichunqiu.com/.idea/workspace.xml

“百度杯”CTF比赛 九月场------code_第6张图片

 

这个应该就是flag所在的文件了,我们访问下

http://919887305be54514900b420bce7e6886ad709a68346740a5.game.ichunqiu.com/index.php?jpg=fl3g_ichuqiu.php

“百度杯”CTF比赛 九月场------code_第7张图片

发现什么都没有

 

因为index.php里面的这段

$file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);

会把_这个过滤掉就变成了fl3gichuqiu.php

但是下一行里面会把config变成_

$file = str_replace("config","_", $file);

所有我们要把_用config替换

“百度杯”CTF比赛 九月场------code_第8张图片

 

然后我们拿去解密下

“百度杯”CTF比赛 九月场------code_第9张图片

 

下面代码的审计摘自:https://blog.csdn.net/qq_40980391/article/details/81479999

 

1)将用户的cookie,和变量key传入decrypt这个函数,看一下这个函数的作用 
将传入的文本进行base64解码,赋给变量txt 
将base64编码后的文本的前4位赋给变量rnd 
将变量4位以后的内容赋给变量txt 
将得到的变量rnd和传入的变量key进行md5加密,然后赋值给变量key 
令变量s的值为0 
对新txt的内容进行如下操作: 
将内容以32个字节为度进行划分 
txt内容与key相应位置进行异或运算,然后拼接,最终赋值给变量tmp 
将tmp变量的每个字节转化为ascii,-10,再转为字符然后拼接,赋值给变量tmp1 
最终返回tmp1 
2)将传回的值赋值给变量username 
3)如果变量username=system,则输出flag 
4)否则,先将guest和变量key传入encrypt这个函数,看一下这个函数的作用 
首先将传入的文本内容转为ascii然后+10,再转为字符,将加密后的文本赋值给tmp变量 
将变量tmp的值赋给变量txt 
变量rnd=随机输出的4个数 
将得到的变量rnd和传入的变量key进行md5加密,然后赋值给变量key 
令变量s的值为0 
对新txt的内容进行如下操作: 
将内容以32个字节为度进行划分 
txt内容与key相应位置进行异或运算,然后拼接,最终赋值给变量ttmp 
最后把rnd和ttmp拼接,返回base64加密后的内容

所以说,我们现在是需要得到变量key和变量rnd,如何得到呢,可以通过guest得到 

 

我们根据他的加密方式 写出php来进行爆破

";
    }  
?>

里面的cookie_guest填自己的“百度杯”CTF比赛 九月场------code_第10张图片

 

“百度杯”CTF比赛 九月场------code_第11张图片

 

一个个爆破“百度杯”CTF比赛 九月场------code_第12张图片

 

 

你可能感兴趣的:(CTF以及各类靶机)