ctfshow 年ctf

news2024/11/24 20:36:41

文章目录

    • 除夕
    • 初一
    • 初二
    • 初三
    • 初四
    • 初五
    • 初六
    • 官方wp

除夕

include "flag.php";

$year = $_GET['year'];

if($year==2022 && $year+1!==2023){
    echo $flag;
}else{
    highlight_file(__FILE__);
}

弱比较和强比较的问题 2023那里是强比较,还是很容易的

/?year=2022.0

科学计数法也可

初一

2023是兔年,密码也是。聪明的小伙伴们,你能破解出下面的密码吗?

密文是:

U2FsdGVkX1+M7duRffUvQgJlESPf+OTV2i4TJpc9YybgZ9ONmPk/RJje

2023是兔年很对应rabbit加密,密钥正是2023

image-20230210051128409

初二

老g师傅最近发现了一个有趣的ctf工具,你能找出flag吗?

image-20230210051155960

py文件呢是一个工具

image-20230210051814760

flag.ws是一个附件,可能就是这个工具来跑一下这个附件

image-20230210051848793

其实还是跑一下这个py文件 拿到flag

image-20230210051949697

初三

<?php 
extract($_GET);
include "flag.php";
highlight_file(__FILE__);


$_=function($__,$___){
    return $__==$___?$___:$__;
};
$$__($_($_GET{
    $___
}[$____]{
    $_____
}(),$flag));

extract($_GET)存在变量覆盖

不过下划线混淆代码看着属实难受

$_=function($__,$___){
    return $__==$___?$___:$__;
};

这个函数$_()通过三目运算符比较传入的两个参数,返回一个值

$_($_GET{
    $___
}[$____]{
    $_____
}(),$flag)

$_()函数 传入的第一个参数是$_GET{$___}[$____]{$_____}() 第二个参数是$flag

这两个参数相等即可 return f l a g ,是不回显的 , 所以前面还有 ‘ flag,是不回显的,所以前面还有` flag,是不回显的,所以前面还有$__() 可以构造var_dump()`

配合extract变量覆盖就是 /?__=a&a=var_dump

现在如何让$_GET{$___}[$____]{$_____}()弱等于$flag呢?

还有个(),所以是个无参函数, 有个trick是 phpinfo()=='任意字符串'

<?php
var_dump(phpinfo() == 'abc');
//bool(true)

0也弱等于字符串, 0 == ‘字符串’

json_last_error() 函数是 int(0)

所以这里构造phpinfojson_last_error都行

($_GET{$___}[$____]{$_____}等价于$_GET[$___][$____][$_____]

相当于一个三维数组

构造/?___=x&____=b&_____=c&x[b][c]=phpinfo&就相当于构造传入了phpinfo

payload:

/?__=a&a=var_dump&___=x&____=b&_____=c&x[b][c]=phpinfo

image-20230210030652464

初四

在某次赛博hvv过程中,发现了异常流量
你能分析得到flag吗?

image-20230210052957456

sql盲注的流量

拿师傅的脚本

import pyshark, re
from z3 import Ints, Solver, sat
from urllib.parse import unquote

t1 = pyshark.FileCapture(r'misc.pcapng', display_filter='http')
cacheCharControl = {}
searchChar = re.compile("1' and (ascii|ord)\(substr\(\(\(select concat_ws\(char\([0-9]+\), hackerHasNoFlag\) from flagInHere limit 0,1\)\), [0-9]+, 1\)\)<[0-9]+;--", re.RegexFlag.IGNORECASE)
for first in t1:
    if hasattr(first, 'http'):
        if hasattr(first.http, 'response_for_uri'):
            requestURI = unquote(str(first.http.response_for_uri))
            if searchChar.search(requestURI) is not None:
                locationID = int(requestURI.split('limit 0,1)), ')[1].split(',')[0]) - 1
                biggerNum = int(requestURI.split(', 1))<')[1].split(';--')[0])
                if locationID not in cacheCharControl:
                    cacheCharControl[locationID] = []
                if 'Hacker' in str(first.http.file_data):
                    cacheCharControl[locationID].append((biggerNum, False))
                else:
                    cacheCharControl[locationID].append((biggerNum, True))
t1.close()
x = Ints('x')[0]
flag = Solver()
for startID in range(len(cacheCharControl)):
    flag.push()
    for unit in cacheCharControl[startID]:
        if unit[1]:
            flag.add(x < unit[0])
        else:
            flag.add(x >= unit[0])
    if flag.check() == sat:
        print(chr(int(str(flag.model()[x]))), end='')
    flag.pop()

然后维吉尼亚解密一下

image-20230210055743217

初五

神秘人送来了半个世纪前的无线电信号,但是只能分别出以下的密文:
YDHML_QKA_PDK_HVD_NAHI_OQ_K_GR
据说上面的无线电信号代表的是中文,由红岸基地发往半人马星系
半个世纪过去了,你能破解它的涵义吗?

还是积累吧,搜了很久电波外星人啥的

中文对应 仓颉编码

ctfshow{新春快乐兔年大吉}

初六

<?php
include "flag.php";

class happy2year{

    private $secret;
    private $key;

    function __wakeup(){
        $this->secret="";
    }
    
    function __call($method,$argv){
        
        return call_user_func($this->key, array($method,$argv));
    }


    function getSecret($key){
        $key=$key?$key:$this->key;
        return $this->createSecret($key);    
    }


    function createSecret($key){
        return base64_encode($this->key.$this->secret);
    }

    function __get($arg){
        global $flag;
        $arg="get".$arg;
        $this->$arg = $flag;
        return $this->secret;
    }

    function __set($arg,$argv){
        $this->secret=base64_encode($arg.$argv);
        
    }

    function __invoke(){
        
        return $this->$secret;
    }
    

    function __toString(){
    
        return base64_encode($this->secret().$this->secret);
    }

    
    function __destruct(){
        
        $this->secret = "";
    }
    


}

highlight_file(__FILE__);
error_reporting(0);
$data=$_POST['data'];
$key = $_POST['key'];
$obj = unserialize($data);
if($obj){
    $secret = $obj->getSecret($key);
    print("你提交的key是".$key."\n生成的secret是".$secret);
}

可以看到就一个happy2year类,与构造pop链时很多类不同,这题挺有意思

类外的逻辑,就是成功反序列化后打印 k e y 和 key和 keysecret。

 $secret = $obj->getSecret($key);

反序列化后先调用了getSecret($key) 然后调用createSecret($key) 然后字符拼接调用 __toString()

里面调用不存在的函数secret()所以调用了__call($method,$argv),call里面可以控制$this->key回调函数,调用了

__invoke(),里面的return $this->$secret;调用了私有变量,所以进入 __get($arg)

链子大致如此可以走通。

function __get($arg){
        global $flag;
        $arg="get".$arg;
        $this->$arg = $flag;
        return $this->secret;
    }

    function __set($arg,$argv){
        $this->secret=base64_encode($arg.$argv);
        
    }

__get($arg)里的参数$arg 就是__invoke()中调用的私有属性名secret

然后通过 $arg="get".$arg; 使得现在$arg=‘getsecret’

然后$this->$arg = $flag;触发了__set()

https://www.php.cn/php-weizijiaocheng-426360.html 了解一下__set()方法以及其参数的作用

__set( $property, $value )来设置私有属性,给一个未定义的属性赋值时,触发__set(),传递的参数是被设置的属性名和值.所以, $this->$arg = $flag; 触发了__set()

image-20230210043647450

这里不太好理解,所以本地搞了个demo去debug了一下

进入__set($arg,$argv) a r g 是 g e t s e c r e t , arg是getsecret , arggetsecretargv是$flag的内容

(不过不知道为啥最后拿到flag显示前面的$arg仅是get)

拼接后base64然后赋值给了$this->sercet

所以只需要让逻辑走通,打印出$sercet即可拿到flag

经过上面所述,其实我们唯一控制的点就是__call()里面的$this->key,为happy2year类

exp:

<?php
class happy2year{
    private $secret;
    private $key;

    function __construct(){
        $this->key=$this;
    }
}
$s = new happy2year();
echo urlencode(serialize($s));

虽然exp比较简单,但是里面的逻辑挺值得学习的

image-20230210045951412

官方wp

https://ctf-show.feishu.cn/docx/O5nUduzAMobhEtxeuZpcS78AnOb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/336948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CHI协议定义的NOC组件

请求结点RN 可以向NOC发送读/写等请求事务&#xff0c;有以下几种类型的RN&#xff1a; RN-F 一般是处理器核或者核簇结点&#xff0c;包含了局部cache和一致性部件snoopee。与NOC上的一致性部件一起&#xff0c;维护“可缓存”数据的一致性&#xff08;这种可缓存数据…

实验名称:基于C/S的命名管道通信

实验名称&#xff1a;基于C/S的命名管道通信 相关知识 无名管道 无名管道&#xff08;匿名管道&#xff09;用于具有亲缘关系进程间的通信&#xff0c;其特点有 管道是半双工的&#xff0c;数据单向流动&#xff08;双方通信需建立两个通道&#xff09;管道只能用于父子进程…

2023年房地产投资-租金和IRR研究报告

第一章 概况 房地产投资租赁是指置业投资者在购买到物业后&#xff0c;首先对该物业进行适当整饰与装修&#xff0c;之后以出租人的身份&#xff0c;以口头协议或签订合同的形式&#xff0c;将房屋交付承租人占有、使用与收益&#xff0c;由承租人向出租人交付租金的行为。通过…

第一章 企业管理概论

目录 一、企业及其形式 二、企业管理概述 三、企业管理理论与实践的产生与发展 四、网络时代的企业环境 五、网络时代企业管理的变革 一、企业及其形式 1、企业的概念 企业以市场为导向&#xff0c;以价值增值作为经济活动的目的&#xff1b; 企业是从事商品生产和流通的…

BUG解决:微信小程序调用vantweapp遮罩层popup 更改show后没反应,弹框/遮罩层不隐藏,show失效

一、bug复现&#xff1a;引入popup组件&#xff0c;时间选择组件json>"usingComponents": {"van-datetime-picker": "vant/weapp/datetime-picker/index","van-popup": "vant/weapp/popup/index"}页面想实现&#xff0c;…

当我以为z-library已死的时候 它居然又活了?!!

z-library 全世界最大的图书馆What Happened To Z-lib?zlib的复活只是暂时的deepweb会让zlib得到永生&#xff01;真心祝愿zlib的Plans for 2023能够实现What Happened To Z-lib? 这是曾经的zlib&#xff0c;域名是z-lib.org&#xff0c;然而现在死了&#xff08;22年11月时…

Grafana 系列文章(十三):如何用 Loki 收集查看 Kubernetes Events

前情提要 IoT 边缘集群基于 Kubernetes Events 的告警通知实现IoT 边缘集群基于 Kubernetes Events 的告警通知实现&#xff08;二&#xff09;&#xff1a;进一步配置 概述 在分析 K8S 集群问题时&#xff0c;Kubernetes Events 是超级有用的。 Kubernetes Events 可以被当…

Windows 10 Creators版本中的11个大亮点

导读微软在近日公布了有关明年Windows 10更新部分的大量功能&#xff0c;但该公司在其Creators更新版本中悄悄隐藏了远超出11项新的功能。其实&#xff0c;在这个更新包中还将包含许多内容&#xff0c;包括增加一个新的应用程序&#xff0c;以及针对Edge浏览器、地图应用程序和…

蓝牙耳机什么牌子好用又便宜?好用不贵的蓝牙耳机推荐

随着时代的进步&#xff0c;数码产品在人们日常生活中的使用频率越来越高&#xff0c;一部手机&#xff0c;一副耳机似乎已然成为人们出行必备。蓝牙耳机的发展速度很快&#xff0c;在众多的蓝牙耳机牌子中&#xff0c;什么牌子好用又便宜&#xff1f;下面&#xff0c;我来给大…

MySQL的四种安装

一、仓库安装 1、添加MySQL仓库 将MySQL-Yum存储库添加到系统的存储库列表中。这是一个一次性操作&#xff0c;可以通过安 装MySQL提供的RPM来执行。转到MySQL Yum存储库页面在MySQL开发板块。可以通过Web下载然后转到自己的RHEL9.1虚拟机上&#xff1b;也可以使用RHEL9上使用…

Java常见关键字总结

final,static,this,super 关键字总结 final 关键字static 关键字this 关键字super 关键字参考 static 关键字详解 static 关键字主要有以下四种使用场景 修饰成员变量和成员方法(常用)静态代码块静态内部类静态导包 补充内容 静态方法与非静态方法static{}静态代码块与{}非静态…

apache和nginx的TLS1.0和TLS1.1禁用处理方案

1、TLS1.0和TLS1.1是什么&#xff1f; TLS协议其实就是网络安全传输层协议&#xff0c;用于在两个通信应用程序之间提供保密性和数据完整性&#xff0c;TLS 1. 0 和TLS 1. 1 是分别是96 年和 06 年发布的老版协议。 2、为什么要禁用TLS1.0和TLS1.1传输协议 TLS1.0和TLS1.1协…

项目实战-NewFixedThreadPool线程池

目录 什么是线程池 线程池的类型 1.CachedThreadPool 2.FixedThreadPool 3.ScheduledThreadPool 4.SingleThreadPool 5.newWorkStealingPool 线程池的好处 1、线程池的重用 2、控制线程池的并发数 3、线程池可以对线程进行管理 线程池的示例 1.Client启动类 2.具体…

Linux中man手册的使用

在linux中&#xff0c;不管是库函数还是系统调用&#xff0c;都用到man手册来查看函数的三要素(功能、参数、返回值)&#xff0c;这里就详细的介绍一下man手册的使用。这里需要注意的是&#xff1a;对于初学者来说,不能将手册页当教程&#xff0c;因为它只是简明的参考资料. Li…

Linux进程控制详解

目录前言一、进程创建1.1 fork函数初识1.2 写时拷贝1.3 fork常规用法1.4 fork调用失败的原因二、进程终止2.1 进程终止时&#xff0c;操作系统做了什么&#xff1f;&#xff1f;2.2 进程终止的常见方式有哪些&#xff1f;&#xff1f;2.3 如何用代码终止一个进程三、进程等待3.…

Linux学习之操作系统认识

目录操作系统概念初识“管理”总结系统函数和库函数操作系统 概念 操作系统&#xff08;英语&#xff1a;Operating System&#xff0c;缩写&#xff1a;OS&#xff09;是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件…

了解并发编程

并发与并行的概念: 并发:一段时间内(假设只有一个CPU)执行多个线程,多个线程时按顺序执行 并行:同个时间点上,多个线程同时执行(多个CPU) 什么是并发编程? 在现代互联网的应用中,会出现多个请求同时对共享资源的访问情况,例如在买票,秒杀与抢购的场景中 此时就会出现线程安…

【排序算法】选择排序(Selection sort)

选择排序(Selection sort)是一种简单直观的排序算法。选择排序介绍它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素&#xff0c;然后将其存放到数列的起始位置&#xff1b;接着&#xff0c;再从剩余未排序的元素中继续寻找最小(or最大)元素&#xff0c;然后放到已排…

c/c++开发,无可避免的宏定义使用案例

一、c/c宏定义的来源 宏定义&#xff0c;就是用一个标识符来表示一个字符串&#xff0c;如果在后面的代码中出现了该标识符&#xff0c;那么就全部替换成指定的字符串。通常c/c宏定义这几处出处&#xff1a; 1&#xff09;最常见的就是来自于开发者编码过程中采用宏定义命令“#…

发烧友实测 | 飞凌嵌入式OKA40i-C开发板试用体验之远程视频监控

本篇试用报告由发烧友zealsoft提供&#xff0c;感谢zealsoft的支持。飞凌嵌入式会在电子发烧友和电路城论坛持续开展开发板有奖试用活动&#xff0c;更有京东E卡等着你&#xff01;欢迎大家的持续关注。“感谢飞凌嵌入式公司提供了本次OKA40i-C开发板的评测机会。上次我们介绍了…