Paddind Oracle Attack的示例分析
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章将为大家详细讲解有关Paddind Oracle Attack的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。适用条件加密方式为AES.CBC模式已
千家信息网最后更新 2025年12月02日Paddind Oracle Attack的示例分析
这篇文章将为大家详细讲解有关Paddind Oracle Attack的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
适用条件
加密方式为AES.CBC模式
已知加密后的cipher
已知加密时初始的iv
攻击原理
如果明文过长,需要一个块一个块的进行解密,只是iv发生了变换,其中的过程一模一样
对于每一块的明文,从后向前一位一位的解密
先看CBC经典图
在加密时

在解密时
攻击实现
存在一个服务器,会返回密文解密后的正确与否(padding),随后返回解密的状态,我们就可以通过该种方式取得加密后且与iv异或之前的中间态I,那么我们发现I=C⊕P,而C已知,我们就可以通过异或来得到原来的明文P,所以接下来的主要矛盾即是求得这个中间态I。
我们选择构建iv=\x00*16,将这个iv发送给服务器后会进行padding测试,假设P的最后一位为X,那么当且仅当padding后的结果为0x01时(P⊕i⊕0x01),服务器才会判定正确,那么我们即可对该位iv进行爆破测试,当服务器返回正确时,我们很大几率上是得到了正确的I了,所以我们从最低位开始枚举,当该位正确时,接着向前一位开始枚举,知道全部位被取得时,也就是I已知的时候了,最后利用I⊕IV即可得到该块的明文P了。
随后将IV改为上一个块的密文,重复上述操作即可。
例题
1. 0xGame Padding Oracle
这里放一道标准实例题,相关分析如上,这里演示下具体操作。
胡乱分析.jpg
这里因为懒,所以手动改代码后多跑了几遍,因为这玩意爆破一次时间长得离谱,debug噩梦
from string import digits, ascii_letters
from pwn import *
from hashlib import sha256
from Crypto.Util.number import *
import os
table = digits+ascii_letters
r = remote("49.235.239.97", "10003")def proof_of_work():
rev = r.recvuntil("sha256(XXXX+")suffix = r.recv(16).decode()
r.recvuntil(" == ")res = r.recv(64).decode()
def f(x):
hashresult = hashlib.sha256((x+suffix).encode()).hexdigest()
if hashresult == res:
return 1
else:
return 0
prefix = util.iters.mbruteforce(f,table,4,'upto')
r.sendline(str(prefix))
def read_data():
r.recvuntil("iv : ")iv = r.recvuntil('\n')[:-1].decode()iv = bytearray.fromhex(iv)
r.recvuntil("crypttext : ")qwq = r.recvuntil('\n')[:-1].decode()cbc = bytearray.fromhex(qwq)
return iv,cbc,qwq
proof_of_work()
print('Successfully pass the pow!')iv,cbc,qwq=read_data()
mid = []
print('Successfully read the data!')#print('iv =',iv)#print('cbc =',cbc)#print(cbc.hex()[64:])
r.recvuntil('> ')iv = bytearray.fromhex(qwq)[16:32]
print(iv)
new_iv = bytearray(b'\x00'*16)
count = 1
for i in range(16):
for j in range(256):
new_iv[15-i] = j
r.sendline('1')r.recvuntil('(in hex): ')r.sendline(str(new_iv.hex()))
r.recvuntil('(in hex): ')r.sendline(str(cbc.hex()[64:96]))
back = r.recvline(keepends = False)
r.recvuntil('> ')if(b'success' in back):
print(back,j)
ans = j ^ count
break
count += 1
mid.append(ans)
for m in range(15-i,16):
new_iv[m] = count ^ mid[15-m]
find = ''
for i in range(16):
find += hex(iv[i] ^ mid[15 - i])[2:].rjust(2,'0')
flag = bytearray.fromhex(find)
print(flag)
r.interactive()
关于"Paddind Oracle Attack的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
加密
分析
明文
服务器
服务
篇文章
示例
可以通过
密文
方式
更多
攻击
测试
爆破
不错
实用
很大
最低
离谱
矛盾
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
福建曙光服务器维修维保哪家好
stditem数据库
软件开发定律实例
企业信息化网络安全管理
mimic数据库药物提取
网络安全会 发言稿
戴尔x86服务器风扇
服务器管理员权限怎么设置
数据库连接池怎么运行
数据库文件怎么更改安全性
广州紫网网络技术有限公司
网络安全属于计算机科学吗
消息队列和数据库
关于网络安全教育的素材
大连软考中级数据库培训班
海南超频服务器配件
奶块最新服务器2022
安卓加载图片服务器
给学弟学妹介绍网络技术
中成药处方数据库药智
网络安全公益广告漫画
北京蓝运方小网络技术
海康服务器导轨
上大宗教数据库
甘肃视频会议服务器
陕西湘子睿网络技术有限公司
软件开发算服务类还是工程类
爬虫系统的网络技术有哪些
削峰写数据库
闽南互联网络科技