当前位置: 首页 > java >正文

2025蓝桥杯省赛网络安全组wp

文章目录

  • 黑客密室逃脱
  • ezEvtx
  • flowzip
  • Enigma
  • 星际xml解析器
  • EBC-Train
  • AES-CBC

黑客密室逃脱

提示猜文件名,猜几个常见的,app.py读到源码

image-20250426090947990

这里也是脑抽了一下,把密钥看成1236了。。。卡了五分钟左右,解出来的时候已经降到300多分了,加密过程并不复杂,两式相减还原回去即可

from Crypto.Util.number import *
key='secret_key1236'
enc='d9d1c4d9e0abc29d9bb292689863a89899a492a892cccba669689566a0c7c8a6c8a692d0c6dc959898b3'
def simple_encrypt(text, key):encrypted = bytearray()for i in range(len(text)):char = text[i]key_char = key[i % len(key)]encrypted.append(ord(char) + ord(key_char))return encrypted.hex()
enc1=int(enc,16)
enc2=long_to_bytes(enc1)
print(enc2)
def decrypt(text, key):encrypted = bytearray()for i in range(len(text)):char = text[i]key_char = key[i % len(key)]encrypted.append(char - ord(key_char))return encryptedprint(decrypt(enc2,key))

ezEvtx

没啥好说的,随便过滤一下就找到了

image-20250426093449175

flowzip

流量分析一把梭

image-20250426093614762

Enigma

赛博厨子一把梭

image-20250426093818367

星际xml解析器

常规xxe,读文件即可

https://www.cnblogs.com/Eleven-Liu/p/8612821.html

image-20250426110531232

EBC-Train

这个也是在赛后才想明白,aes加密用的是十六字节,将前十一个都填成AAAA发过去,因为ecb模式是分组加密,每一组的加密过程都是一样的,所以不需要写脚本还原加密过程去破解(其实硬写也做不到,因为拿不到key,当时我觉得用户名肯定是key,不然解不了,于是就一直卡在这一步了,实际上用户名是明文),直接将发过来的加密数据取出后几组就是admin的加密了

AES-CBC

from Crypto.Cipher import AES  # 导入AES加密模块
from secret import flag       # 从secret模块导入flag(假设为明文)
import random, os             # 导入random和os模块用于随机数生成# 为消息填充字节,使其长度为16的倍数
def pad(msg):return msg + bytes([16 - len(msg) % 16 for _ in range(16 - len(msg) % 16)])# 对密钥进行随机置换,生成新密钥
def permutation(key):tables = [hex(_)[2:] for _ in range(16)]  # 生成0-15的十六进制表(去掉"0x"前缀)random.shuffle(tables)                    # 随机打乱表newkey = "".join(tables[int(key[_], 16)] for _ in range(len(key)))  # 根据原密钥生成新密钥return newkey# 生成初始密钥key0及其置换密钥key1
def gen():key0 = os.urandom(16).hex()  # 随机生成16字节密钥并转为十六进制字符串key1 = permutation(key0)     # 对key0进行置换生成key1return key0, key1# 使用key0和key1进行双重AES加密
def encrypt(key0, key1, msg):aes0 = AES.new(key0, AES.MODE_CBC, key1)  # 用key0加密,key1作为CBC模式的IVaes1 = AES.new(key1, AES.MODE_CBC, key0)  # 用key1解密,key0作为CBC模式的IVreturn aes1.decrypt(aes0.encrypt(msg))    # 先加密后解密生成密文# 生成密钥对
key0, key1 = gen()
a0, a1 = int(key0, 16), int(key1, 16)  # 将密钥转为整数gift = a0 & a1  # 计算key0和key1的按位与,作为泄露信息
cipher = encrypt(bytes.fromhex(key0), bytes.fromhex(key1), pad(flag))  # 加密填充后的flagprint(f"gift = {gift}")
print(f"key1 = {key1}")
print(f"cipher = {cipher}")'''
gift = 64698960125130294692475067384121553664
key1 = 74aeb356c6eb74f364cd316497c0f714
cipher = b'6\xbf\x9b\xb1\x93\x14\x82\x9a\xa4\xc2\xaf\xd0L\xad\xbb5\x0e|>\x8c|\xf0^dl~X\xc7R\xcaZ\xab\x16\xbe r\xf6Pl\xe0\x93\xfc)\x0e\x93\x8e\xd3\xd6'
'''

这道题想到思路了,但是忘记dfs怎么写了,脚本没写出来。。。

首先是一个按位与,我们都知道,如果gift的结果是1,那说明参与按位与的两个数在对应位置上一定是1.

由此可以确定大概三十几位key0中一定为1的位

接着,我们计算key1异或gift,得到的结果中如果为1的位,说明key0中对应的位置一定为0

由此又可以确定三十几位

总共就128位,那么剩下的其实只有五十多位了,爆破一下就出来了

http://www.xdnf.cn/news/2330.html

相关文章:

  • 无人机超声波避障技术要点与难点!
  • 火语言RPA--钉钉群通知
  • 【Web API系列】深入解析 Web Service Worker 中的 WindowClient 接口:原理、实践与进阶应用
  • LCD1602液晶显示屏详解(STM32)
  • Python爬虫(8)Python数据存储实战:JSON文件读写与复杂结构化数据处理指南
  • 纯净无噪,智见未来——MAGI-1本地部署教程,自回归重塑数据本质
  • Redis03-基础-C#客户端
  • Hyper-V安装Win10系统,报错“No operating system was loaded“
  • Java大厂面试突击:从Spring Boot自动配置到Kafka分区策略实战解析
  • Java详解LeetCode 热题 100(01):LeetCode 1. 两数之和(Two Sum)详解
  • UEC++第13天| 字体集、UEC中的 -> :: .
  • Linux操作系统从入门到实战(四)Linux基础指令(下)
  • 【嵌入式八股22】排序算法与哈希算法
  • 接口中直接获取HttpServletRequest打印日志
  • WinForm真入门(17)——NumericUpDown控件详解
  • 【JavaScript】关系运算符--非数值类型、Unicode编码表
  • BG开发者日志0427:故事的起点
  • android ams调试指令介绍
  • 【数据结构】·励志大厂版(复习+刷题):二叉树
  • 从零搭建云原生后端系统 —— 一次真实项目实践分享
  • django admin 中更新表数据 之后再将数据返回管理界面
  • python+flask+flask-sockerio,部署后sockerio通信异常
  • vue中将html2canvas转成的图片传递给后台 Python Flask 服务
  • C#中属性和字段的区别
  • 毕业设计-基于机器学习入侵检测系统
  • Java学习手册:Java开发常用的内置工具类包
  • c语言知识整理
  • ADC单通道采集实验
  • 农经权利用mdb与dbf生成公示表
  • 上位机知识篇---寻址方式