Paddind Oracle Attack的示例分析
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章将为大家详细讲解有关Paddind Oracle Attack的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。适用条件加密方式为AES.CBC模式已
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
嵌入式软件开发述职报告
金山区质量软件开发哪家便宜
读取服务器文件
广东省网络安全检测
湖北多功能软件开发收费
软件开发助理工资多少钱
教育网络技术与应用
杭州点买软件开发公司吗
关于网络安全有哪些规定
三大数据库语言
网络安全法规定网络运营者至少
锐捷网络技术总监
什么是数据库还原
银行软件开发的笔试
计算机如何获取dns服务器地址
岳泰数据库
十位比2大的数据库
关于网络技术的演讲
宝源网络技术
筋斗云软件开发有限公司
crt软件添加密钥登录服务器
生产服务器数据库端口
手游lol咋看服务器
软件开发类产品介绍书
数据库id自动生成
老外喊中国没有网络安全权
服务器如何分配空间
软件开发中的价值观
保护局域网网络安全技术
来宾市做仓库软件开发的