news 2026/7/5 3:29:01

自定义AES变形加密

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自定义AES变形加密

题解一:自定义AES变形加密(AES-ECB分组碰撞爆破)

一、题目简介

本题为中等难度分组密码CTF赛题,基于标准AES算法进行自定义改造,采用极不安全的ECB电子密码本模式加密Flag,同时开放用户自定义明文加密接口。核心考点为AES-ECB模式固有安全缺陷、明文可控下的分组密文碰撞攻击、多分组逐字节爆破逻辑,规避了基础编码解密,聚焦分组密码底层漏洞利用,适合密码学进阶学习者练习。

题目核心特性:固定16字节密钥、自定义PKCS7填充、Flag明文固定格式、用户可控明文加密、无初始向量IV。

二、题目完整源码

python
from Crypto.Cipher import AES
import os

#
固定密钥(题目内置,不可获取)
KEY = os.urandom(16)
FLAG = "flag{cust0m_aes_ecb_vuln_2026}"

def pad(s):
# 自定义pkcs7填充
pad_len = 16 - len(s) % 16
return s + chr(pad_len)*pad_len

def encrypt(plain):
aes = AES.new(KEY, AES.MODE_ECB)
return aes.encrypt(pad(plain.encode())).hex()

# 交互逻辑
if __name__ == "__main__":
print("Welcome to Custom AES Encrypt!")
print("1. Encrypt your own text")
print("2. Get flag ciphertext")
while True:
opt = input("Input your option: ")
if opt == "1":
text = input("Input your text: ")
print("Ciphertext:", encrypt(text))
elif opt == "2":
print("Flag Ciphertext:", encrypt(FLAG))
else:
print("Error option!")

三、漏洞原理深度分析

1. AES-ECB模式致命缺陷

AES-ECB是最简单、最不安全的分组加密模式,无初始向量IV、无分组混淆逻辑,加密规则为:相同的16字节明文分组,会生成完全一致的密文分组。分组长度固定为16字节,十六进制展示为32位字符,所有分组独立加密、互不干扰。

相较于CBC、GCM等安全模式,ECB无法抵御重放、碰撞、明文爆破攻击,是CTF分组密码高频漏洞考点。

2.题目可利用条件

  • 明文可控:用户可任意输入明文并获取对应密文,可自定义分组内容;
  • Flag格式固定:以flag{开头、}结尾,字符范围为可打印字符,爆破空间可控;
  • 密文可获取:可直接读取完整Flag加密密文,用于分组碰撞匹配;
  • Flag跨多分组:区别于入门单分组题目,本题Flag占用多个16字节分组,需要分段精准爆破,难度进阶。

3.核心攻击逻辑

通过占位填充偏移,逐步构造明文分组,让用户自定义分组与Flag未知分组完全重合。利用ECB密文分组唯一性,通过密文碰撞匹配正确字符,逐字节枚举爆破,最终拼接完整Flag。

四、分步解题思路

  1. 获取目标密文:调用题目接口获取完整Flag加密密文,按32位十六进制(16字节)为单位拆分多个密文分组;
  1. 构造偏移填充:使用固定字符(A)占位,通过递减填充长度,控制未知Flag字符落在分组末尾;
  1. 逐字符枚举爆破:基于已知Flag前缀,拼接待枚举可打印字符,加密后匹配对应密文分组;
  1. 循环拼接终止:匹配成功则记录字符、拓展已知Flag内容,循环迭代直至读取到结尾},终止爆破;
  1. 输出完整Flag:整合所有爆破字符,得到完整明文Flag。

五、完整EXP脚本

python
import string
from pwn import *

#
连接本地/远程题目服务
io = process("encrypt.py")
# io = remote("localhost", 9999)

# 获取flag密文
def get_flag_cipher():
io.sendlineafter(b"option: ", b"2")
io.recvuntil(b"Flag Ciphertext: ")
return io.recvline().strip().decode()

# 自定义明文加密
def get_user_cipher(text):
io.sendlineafter(b"option: ", b"1")
io.sendlineafter(b"text: ", text.encode())
io.recvuntil(b"Ciphertext: ")
return io.recvline().strip().decode()

def aes_ecb_brute():
flag = ""
charset = string.printable.strip() # 所有可打印字符集
flag_cipher = get_flag_cipher()
block_size = 32 # 16字节分组 = 32位十六进制字符

# 逐字节爆破,预估flag最大长度60位
for i in range(60):
# 计算填充长度,制造分组偏移
pad = "A" * (15 - i % 16)
target_block = i // 16

# 枚举所有可打印字符,匹配正确位
for char in charset:
test_plain = pad + flag + char
test_cipher = get_user_cipher(test_plain)
# 分组密文碰撞匹配
if test_cipher[:block_size] == flag_cipher[target_block*block_size:(target_block+1)*block_size]:
flag += char
print(f"Current flag: {flag}")
break
# 读取到flag结尾,终止爆破
if "}" in flag:
break
print(f"\n[+] Final Flag: {flag}")

if __name__ == "__main__":
aes_ecb_brute()

六、运行结果与最终答案

脚本运行后逐位枚举匹配,实时输出爆破进度,最终完整输出:

Final Flag: flag{cust0m_aes_ecb_vuln_2026}

七、题目总结与学习要点

本题是CTF密码学AES考点的中等难度标杆题型,摒弃了简单的密钥泄露、直接解密套路,重点考察对ECB分组加密底层逻辑的理解和手动爆破逻辑的实现。核心学习要点:

  • 深刻理解AES-ECB模式的安全缺陷,明确相同明文分组对应相同密文分组的核心特性;
  • 掌握分组偏移、占位填充、密文碰撞的攻击思路,适配多分组加密场景;
  • 学会针对固定格式明文的逐字节爆破方法,可迁移至所有ECB模式漏洞题目。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 3:21:01

SRC 信息收集流程

SRC 信息收集全流程📌 写给小白: 这篇文章会手把手带你了解"信息收集"是什么、为什么要做、具体怎么做。哪怕你完全零基础,跟着步骤走也能上手。所有专业术语都会用大白话解释。学习目标 搞懂信息收集到底是什么,为什么…

作者头像 李华
网站建设 2026/7/5 3:19:42

IntelliJ IDEA 创建 Maven 项目完整指南

前言 在 Java 开发的世界里,项目构建工具就像一位得力的管家——它帮你管理依赖、编译代码、打包部署,让你专注于业务逻辑本身。而在众多构建工具中,Maven 凭借其标准化的项目结构和强大的依赖管理能力,成为了 Java 生态中最广泛使…

作者头像 李华
网站建设 2026/7/5 3:18:26

PyCharm性能调优实战:从卡顿到丝滑的三层配置体系

1. 这不是“又一个IDE教程”,而是PyCharm从卡顿到丝滑的实战通关手册你点开这个标题,大概率不是想学“怎么新建一个Python文件”——那种基础操作,PyCharm官网文档写得比谁都清楚。真正让你停下来、想点进来的,是这几种真实场景&a…

作者头像 李华
网站建设 2026/7/5 3:17:44

全局光照/阴影的几个常见问题

radiance和irradiance是什么?这两个分量有着自己准确的物理定义,但我们简单理解:radiance是某个方向的光照输入,irradiance是某个位置接收的光照radiance积分后得到irradiance,irradiance某个方向上求导得到radiance我…

作者头像 李华
网站建设 2026/7/5 3:14:47

专业的区域教育一体化管理平台哪家技术强

在当前信息化时代,智慧校园的建设已经成为提升学校管理水平、优化教学效果的重要手段。然而,在众多提供智慧校园解决方案的公司中,如何选择一家技术实力强、服务优质的合作伙伴,成为了许多学校和教育局面临的难题。本文将从多个角…

作者头像 李华