前言
Catf1agCTF 是一个面向所有CTF(Capture The Flag)爱好者的综合训练平台,尤其适合新手学习和提升技能 。该平台由catf1ag团队打造,拥有超过200个原创题目,题目设计注重知识点的掌握,旨在帮助新手掌握CTF相关的各种技能 。除了新手题目,平台也包含难度不一的题目,适合不同水平的CTF参与者 。
平台上的题目类型多样,包括WEB、MISC、CRYPTO、LINUX、PWN/ATTACK、REVERSE等,题目分数制度从60分到100分不等,难度从1星到5星 。题目提交时需要包含完整的题目环境、flag以及writeup,以确保题目的完整性和可解性 。
此外,Catf1agCTF平台还提供了一些辅助工具和资源,如在线工具箱、SRC资料和HW资料等,以帮助用户更好地进行学习和实战演练 。平台的网址为 https://catf1ag.cn/,有意向的用户可以通过官方邮箱[email protected]进行联系 。对于想要加入交流的用户,平台还提供了官方QQ群和频道,方便用户之间的互动和交流 。
需要注意的是,平台上的部分题目可能需要特定的环境配置,例如WEB题目会包含dockerfile,而PWN/ATTACK题目则必须包含dockerfile以确保题目环境的完整性 。对于题目的flag格式,平台有统一的要求,即flag需要以"catf1ag{}"的格式呈现 。
总的来说,Catf1agCTF是一个资源丰富、适合各个水平CTF爱好者的训练平台,无论是新手还是有经验的参与者,都能在这里找到适合自己的学习和提升机会。
一、easy_flask_1
打开靶场
页面如下
这题看题目考察的是 flask 的 SSTI 模板注入,描述里给出了提示,那么直接查看 config 配置信息
二、easy_flask_2
打开靶场
这里先测试下 cmd 能不能用
再次查看 config 配置信息发现给出了 flag 提示
先查看当前位置下的所有文件
lipsum.__globals__
: 访问全局变量
lipsum
可能是一个 Jinja2 模板上下文中的变量。在 Python 中,所有对象都有一个__globals__
属性,这个属性是指向该对象所在模块的全局命名空间的字典。- 通过
lipsum.__globals__
,可以访问该变量所在模块中的所有全局变量。
os.popen()
: 执行系统命令
- 在 Python 的
os
模块中,popen()
是一个用来执行系统命令的方法。 os.popen('ls')
会在系统的 shell 中执行ls
命令,该命令用于返回当前用户的用户名。read()
方法则用于读取popen
执行命令后的输出
构造 payload
http://subject.catf1ag.cn:40540/?cmd={
{lipsum.__globals__.__builtins__.__import__(%22os%22).popen(%22ls%22).read()}}
再访问 flag
三、又双叒叕不能相等
打开靶场
给出了源代码
分析源代码得出:
1.num 不为空
2.num 的长度比 init 短
3.num 的值比 init 大
<?php
include('flag.php');
error_reporting(0);
show_source('index.php');
$init_num = '999999999999';
$user_num = $_GET['num'];
if(isset($user_num)){
if($user_num != $init_num){
if(strlen($user_num) < strlen($init_num)){
if($user_num > $init_num){
echo 'get glag:'.$flag;
}else{
echo '你输入的数字小于初始值~';
}
}else{
echo '不能大于初始值~';
}
}else{
echo '不能相等~';
}
}else{
echo '请输入内容~';
}
?>
可以传入数组绕过 strlen 函数的检查
flag 藏在响应头中
四、哦豁~还有一半呢?
打开靶场
在源代码中看到
结合上一题查看网络请求得到另一半
将两段结合起来得到 flag