AES CBC字节翻转攻击的利用

admin 2022年5月17日02:54:56安全博客 CTF专场评论11 views1300字阅读4分20秒阅读模式

今天看到这样一道题

<!-- please login as uid=1!--> 
<?php 
include("AES.php"); 
highlight_file('index.php');     
$v = "1234567890abcdef1234567890abcdef1234567890abcdef1234567890auid=9;123123123123"; 
$b = array(); 
$enc = @encrypt($v); 
$b = isset($_COOKIE[user])[email protected]decrypt(base64_decode($_COOKIE[user])):$enc; 
$uid = substr($b,strpos($b,"uid")+4,1); 
echo 'uid:'.$uid.'<br/>'; 
if ($uid == 1){ 
        echo $flag; 
} 
else { 
        echo "Hello Client!"; 
} 
setcookie("user",base64_encode($enc)); 
?> 
uid:9
Hello Client!

大致的做法就是控制$b里面包含uid=1,但是因为加密密钥不知道,所以并不能控制,后来发现这个是利用了 CBC 密文分组的一个问题。

CBC 模式的全称是密文分组链接模式(Cipher Block Chainning)。在CBC模式中,首先将明文分组与前一个密文分组进行 xor 运算,然后再进行加密,当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量(Initialization vector),通常缩写为 IV,如果每次都使用相同的初始化向量(IV),当用同一密钥对同一明文进行加密时,所得到的密码一定是相同的,所以每次加密时都会随机产生一个不同的比特序列来作为初始化向量,避免这种情况产生。

见示意图

AES CBC字节翻转攻击的利用

这样的话,解密的时候是本组的明文与上一组的密文进行反 xor 操作就可以了,如果我们控制了上一组的密文,那就可以控制本组的明文了。

首先将明文分组

1234567890abcdef
1234567890abcdef
1234567890abcdef
1234567890auid=9
;123123123123

根据之前的算法原理,以第4组为例,设 A = 第四组解密后的值、B = 第三组的密文,则 C = A xor B -> “1234567890auid=9”

这样的话,就可以反推得到 A = B xor C,很容易就写出反向的公式

<?php
$enc = base64_decode("S9PsFp43k9VgyrggRHLbISjUAjwzSSPPajrF9Dzz0o/ieSZbxwGjTJ5xhAZEi5tDBjvwsQtH0BynlLC0p0F0zOZMx25M6iekcLvX//MNKSA=");
$enc[47] = chr(ord($enc[47]) ^ ord("9") ^ ord ("1"));
echo base64_encode($enc);
?>

然后提交就好了

AES CBC字节翻转攻击的利用

参考 http://drops.wooyun.org/tips/7828

FROM :strcpy.me | Author:strcpy

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月17日02:54:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  AES CBC字节翻转攻击的利用 http://cn-sec.com/archives/1013402.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: