Catf1ag CTF Web(一)

前言

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爱好者的训练平台,无论是新手还是有经验的参与者,都能在这里找到适合自己的学习和提升机会。

一、Web 签到

打开靶场

右键查看源码

搜索关键字找到 flag,提交时要反转一下 

二、flag在哪呢?

打开靶场

一样的启动实例查看网页源代码拿到 flag

三、intval

打开靶场

给出了源码,现在来审计 

intval() 函数用于获取变量的整数值 

汇总一下intval()函数漏洞的绕过思路:

1)当某个数字被过滤时,可以使用它的 8进制/16进制来绕过;比如过滤10,就用012(八进制)或0xA(十六进制)。
2)对于弱比较(a==b),可以给a、b两个参数传入空数组,使弱比较为true。
3)当某个数字被过滤时,可以给它增加小数位来绕过;比如过滤3,就用3.1。
4)当某个数字被过滤时,可以给它拼接字符串来绕过;比如过滤3,就用3ab。(GET请求的参数会自动拼接单引号)
5)当某个数字被过滤时,可以两次取反来绕过;比如过滤10,就用~~10。
6)当某个数字被过滤时,可以使用算数运算符绕过;比如过滤10,就用 5+5 或 2*5。

先输入 /index.php 

<?php
# 禁止显示所有错误信息
error_reporting(0);

# 设置响应头,指定内容类型为 HTML 文本,并使用 UTF-8 编码
header("Content-Type:text/html;charset=utf-8");

# 包含外部文件 flag.php
include('flag.php');

# 展示当前文件的源代码
show_source('./index.php');

# 获取用户通过 GET 请求传入的 num 参数,并将其赋值给 $num 变量
$num = $_GET['num'];

# 将 $num 转换为整数,并将结果赋值给 $num2 变量。intval() 函数会将非数字的部分截断,并返回转换后的整数
$num2 = intval($num);

# 首先检查 $num 是否被设置(即用户是否提供了 num 参数),并且 $num 的值不等于字符串 '123'
if(isset($num) && $num != '123'){
    
    # 检查 $num 是否等于整数 123
    if($num == 123){
        echo $flag;
    }else{
        echo 'flag{this_flag_is_False}';
    }
}else{
    echo '你输入点东西行不行...';
}

?> 你输入点东西行不行...

再绕过 intval 函数 

http://subject.catf1ag.cn:44079/index.php?num=123ab

拿到 flag 

四、easy_unser_1

打开靶场

同样也是代码审计 

反序列化漏洞

<?php
//error_reporting(0);

show_source('./index.php');

class flag_in_there{
  public $name;
  public $age;

  public function __construct($name,$age){
    $this->name = $name;
    $this->age = $age;
  }

  public function get_flag(){
    echo "hello,i'm '$this->name',now '$this->age' years";
  }
}

# 通过 new flag_in_there('vfree','19') 创建一个 flag_in_there 类的实例 $flag,并传入 'vfree' 作为 $name,'19' 作为 $age
$flag = new flag_in_there('vfree','19');

# serialize($flag) 将 $flag 对象序列化为字符串 $ser
$ser = serialize($flag);

# 通过 $_GET['str'] 获取用户通过 URL 参数 str 传入的字符串,并将其赋值给 $un
$un = $_GET['str'];

if($ser == $un){
  include('flag.php');
  echo $flag;
}else{
  echo "你真棒~";
}
?>

我们可以输出一下 $ser 的值

class flag_in_there{
  public $name;
  public $age;

  public function __construct($name,$age){
    $this->name = $name;
    $this->age = $age;
  }
  public function get_flag(){
    echo "hello,i'm '$this->name',now '$this->age' years";
  }
}
$flag = new flag_in_there('vfree','19');
$ser = serialize($flag);
echo $ser

输出 

O:13:"flag_in_there":2:{s:4:"name";s:5:"vfree";s:3:"age";s:2:"19";}

然后构造url:

http://subject.catf1ag.cn:49640/index.php?str=O:13:“flag_in_there”:2:{s:4:“name”;s:5:“vfree”;s:3:“age”;s:2:“19”;}

显示flag:catf1ag{eauigjs4pmfc1d2wq3xkvl0h7b5rony89zt6}

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suc2es2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值