CBC字节翻转攻击

CBC翻转攻击方法在于:

通过损坏密文字节来改变明文字节。(注:借助CBC内部的模式)借由此可以绕过过滤器,或者改变用户权限提升至管理员,又或者改变应用程序预期明文以达目的。

CBC模式介绍

加密过程

图片.png

Plaintext:明文数据,待加密的数据

IV:初始向量,用于随机化加密的比特块,保证即使对相同明文多次加密,也可以得到不同的密文。

Key:分组加密使用的密钥,被一些如AES的对称加密算法使用。

Ciphertext:密文数据,加密后的数据。

明文都是先与混淆数据(第一组是与IV,之后都是与前一组的密文)进行异或,再执行分组加密的。CBC工作于一个固定长度的比特组,将其称之为块

步骤:

  1. 首先将明文分组(常见的以16字节为一组),位数不足的使用特殊字符填充。
  2. 生成一个随机的初始化向量(IV)和一个密钥。
  3. 将IV和第一组明文异或。
  4. 用密钥对3中xor后产生的密文加密。
  5. 用4中产生的密文对第二组明文进行xor操作。
  6. 用密钥对5中产生的密文加密。
  7. 重复4-7,到最后一组明文。
  8. 将IV和加密后的密文拼接在一起,得到最终的密文。

从第一块开始,首先与一个初始向量iv异或(iv只在第一处作用),然后把异或的结果配合key进行加密,得到第一块的密文,并且把加密的结果与下一块的明文进行异或,一直这样进行下去。因此这种模式最重要的特点就是:前一块的密文用来产生后一块的密文。
加密公式:

Ciphertext-0 = Encrypt(Plaintext XOR IV)—只用于第一个组块
Ciphertext-N = Encrypt(Plaintext XOR Ciphertext-N-1)—用于第二及剩下的组块

解密过程

图片.png

解密的过程其实只要理解了加密,反过来看解密过程就也很简单了,同样的,前一块密文参与下一块密文的还原。
步骤:
1. 从密文中提取出IV,然后将密文分组。
2. 使用密钥对第一组的密文解密,然后和IV进行xor得到明文。
3. 使用密钥对第二组密文解密,然后和2中的密文xor得到明文。
4. 重复2-3,直到最后一组密文。

解密公式:

Plaintext-0 = Decrypt(Ciphertext) XOR IV—只用于第一个组块
Plaintext-N = Decrypt(Ciphertext) XOR Ciphertext-N-1—用于第二及剩下的组块

这里可以注意到Ciphertext-N-1用来产生下一块明文,如果我们改变Ciphertext-N-1中的一个字节,然后和下一块解密后的密文xor,就可以得到一个不同的明文,而这个明文是我们可以控制的。利用这一点,我们就欺骗服务端或者绕过过滤器。
下图展示了整个攻击过程:


图片.png

解析


图片.png

根据解密流程,我们假设A为明文,B为前一组密文,C为密文经过AES解密后的字串:
A = Plaintext[0] = 11
B = (Ciphertext-N-1)[0] = 13
C = Decrypt(Ciphertext)[0] = 6

我们可以知道,解密过程中是C与B异或得到A,即A xor B = C。

那么关键来了

C xor C = 0 (任何数与自己异或都为0)
等价于
A xor B xor C = 0

由于任何数与0异或都为自己本身,所以

A xor B xor C xor 3 = 3

那么此时我们其实可以这样来看:

A = A = 11
B = B xor 3 = 13 xor 3 = 14
C = C = 6

现在我们修改密文对应的位让B = 14,那么当密文解密后,会发现,明文A会变成3,通过这种方法我们可以控制任何一位明文。

php使用异或xor调换两个变量的值的原理

1、首先,我们要知道什么是异或,异或,简单来说就是:相同的两个数,异或的结果是0;不同的两个数,异或的结果是1。
2、0和0,异或的结果是0。1和1,异或的结果是0。0和1,异或的结果是1。于是我们发现,在0和1的世界里:A和B异或,结果是C;B和C异或的结果一定是A;A和C异或的结果一定是B。
3、写成php:

$a = 0;
$b = 1;
$c = $a ^ $b; //A和B异或,结果是C
$b = $b ^ $c; //B和C异或的结果一定是A,将A赋值给B
$a = $b ^ $c; //A(原A,现B)和C异或的结果一定是B,将B赋值给A
echo $a,$b; //已经实现$a和$b的值对调

4、a和b是二进制的一位数,如此;是多位数,也是如此。
于是:

$a = 3; //0011
$b = 4; //0100
$c = $a ^ $b; //A和B异或,结果是C
$b = $b ^ $c; //B和C异或的结果一定是A,将A赋值给B
$a = $b ^ $c; //A(原A,现B)和C异或的结果一定是B,将B赋值给A
echo $a,$b; //已经实现$a和$b的值对调

5、a和b如果是字母,也可以:

$a = 'a'; //ASCII是97,二进制是0110 0001
$b = 'b'; //ASCII是98,二进制是0110 0010
$c = $a ^ $b; //A和B异或,结果是C
$b = $b ^ $c; //B和C异或的结果一定是A,将A赋值给B
$a = $b ^ $c; //A(原A,现B)和C异或的结果一定是B,将B赋值给A
echo $a,$b; //已经实现$a和$b的值对调

能够成功将两个字符串变量调换,原因就在于:两个变量进行异或时,会将字符串转换成二进制再进行异或,异或完,又从二进制转换成了字符串。

本文参考:http://www.ifuryst.com/archives/CBC_bitflipping_attacks.html
https://blog.csdn.net/csu_vc/article/details/79619309
https://blog.csdn.net/jeffreynnn/article/details/77100389
http://www.freebuf.com/articles/system/163756.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容