CBC翻转字节攻击

CBC翻转字节攻击

CBC加密过程(密文分组链接模式
在这里插入图片描述
异或后加密
在这里插入图片描述

攻击点为IV或者加密后的某段密文

改第一组明文的信息,需要更改IV

$A = Plaintext[0] = 'h' ;
$B = IV[0] =  可控;
$C = Decrypt(Ciphertext)[0] = ?;

//所以我们需要伪造一个新的IV向量,使得$C ^ New_IV = 我们需要的明文
//因为有 
$C ^ Old_IV = Source_str
//所以
$C = Old_IV ^ Source_str
//并且我们还需要
$C ^ New_IV = Target_str
//即
$C = New_IV ^ Target_str
//所以
Old_IV ^ Source_str = New_IV ^ Target_str
//所以
New_IV = Old_IV ^ Source_str ^ Target_str

已知异或之后的第N-1组密文(Decrypt之后的密文),我们就可以通过字节翻转改变第N组明文

下面假设我们要更改第3组明文

$Old_pt[1]为第2组明文,$Old_ct[1]为第2组密文,$Old_ct[2]为第3组密文

$Plaintext = [
  'comment1=wowsuch',
  '%20CBC;userdata=',
  '*admin=true;come',
  'nt2=%20suchsafe%',
  '20very%20encrypt',
  'wowww'
];//我们要使$Plaintext[2]中的*变成;
//密文全部已知并可控
$Old_pt[1] = Plaintext[1] = '%20CBC;userdata=';
$Old_ct[1] = Decrypt(Ciphertext)[1] = 已知 并且我们攻击的点在这;
$Old_ct[2] = Decrypt(Ciphertext)[2] = 已知;

//所以我们需要伪造一个新的第2组密文,使得$Old_ct[2] ^ $New_ct[1] = 我们需要的明文$New_pt[2]
//因为有 
$Old_ct[1] ^ $Old_ct[2] = $Old_pt[2];
//所以
$Old_ct[2] = $Old_ct[1] ^ $Old_pt[2];
//并且还已知
$New_ct[1] ^ $Old_ct[2] = $New_pt[2];
//即
$Old_ct[2] = $New_ct[1] ^ $New_pt[2];
//所以
$Old_ct[1] ^ $Old_pt[2] = $New_ct[1] ^ $New_pt[2];
//所以
$New_ct[1] = $Old_ct[1] ^ $Old_pt[2] ^ $New_pt[2];

https://resources.infosecinstitute.com/cbc-byte-flipping-attack-101-approach/#

https://www.jianshu.com/p/7f171477a603

bugku login4

http://123.206.31.85:49168/
flag格式:SKCTF{xxxxxxxxxxxxxxxx}
hint:CBC字节翻转攻击

有备份文件
在这里插入图片描述

恢复

<?php
define("SECRET_KEY", file_get_contents('/root/key'));
define("METHOD", "aes-128-cbc");
session_start();

function get_random_iv(){
   
    $random_iv='';
    for($i=0;$i<16;$i++){
   
        $random_iv.=chr(rand(1,255)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值