Mutillidae II CBC字节翻转攻击

先查看网页。这里大意就是,需要将用户ID和组ID都等于“000”才能成为root用户。

再查看URL,发现其后面跟着一串16进制字符串

根据经验,这些一般是参数的输入,或许可以通过这里来跳转页面或者修改页面上的输出的效果。

先随便修改一下来进行尝试(把前两个16进制数'6b'修改成'11')

再次查看页面,发现ApplicationID的值改变了

说明它是存在漏洞的,我们需要修改参数达到把UserID 和GroupID的值均为000

我们先来补习一下CBC相关的知识

CBC模式加解密原理

加密时,第一个明文分组,需要通过和IV(初始化向量)进行异或处理之后,才可以进行加密处理;每一个明文分组(除了第一个明文分组)加密之前都需要和前一个密文分组进行异或处理之后,才可以进行加密处理。

加密过程 :

1.将明文的第一个分组与IV进行异或,送入加密模块进行加密,得到第一个密文分组。

2.从第二个明文分组开始,将明文分组与前一个密文分组进行异或。

3.将第2步得到的结果送入加密模块进行加密。

4.将每一个密文分组拼接起来形成密文。

有公式 :

如下所示

CBC模式的解密

第一个密文分组,解密之后,需要通过和IV进行异或处理,才可以得到第一个明文分组;每一个密文分组(除第一个密文分组外)经过解密处理之后,都需要和前一个密文分组进行异或处理,才可以得到对应的明文分组。

解密过程

1.将密文的第一个分组进行解密,得到的结果与IV进行异或处理,得到第一个明文分组。

2.从第二个密文分组开始,先对每一个密文分组进行解密处理,到第3步。

3.将第2步得到的结果与前一个密文分组进行异或处理,得到对应的明文分组。

4.将每一个明文分组拼接在一块,便得到原先的明文。

有公式 :

如下所示

攻击的思路是:虽然我们不知道密钥(即代码中的key),但是我们可以通过篡改前一块的密文,来控制最终输出的明文。

为了便于理解,我们考虑单个字节的操作,则在CBC下存在如下相应的公式

Pnew为我们想要的明文,根据上述理论,我们只需控制前一个密文分组对应的字节为

,就可以达到修改明文的目的。

用文字来说就是,将前一个密文分组中的对应字节篡改为一个值,该值等于“前一个密文分组原来的值 xor 这一个明文分组中对应字节的值xor 希望控制的解密后的新的明文的值”

补习到这里,想了解更多的可以去合天网安实验室的平台上做一遍实验——CBC字节翻转攻击

Mutillidae II平台上,当我们修改URL上的值时,会改变显示的值。那从我们的角度来看,可以看成是CBC的解密过程。经过分析,这里URL上每一个字节(8位,两个16进制字符)相当于CBC中的前一个密文分组,页面显示的值相当于这一个明文分组中对应字节的值,即:

URL(分成单个字节后) -------> CBC中的前一个密文分组

Application, User ID, Group ID ---------> 这一个明文分组中对应字节的值

而且在那串密文(6bc24fc1ab650b25b4114e93a98f1eba)中

前四字节(6bc24fc1)对应Application

第五(ab),六(65),七(0b)字节对应着User ID

第八(25),九(b4),十(11)字节对应着Group ID

我们的目标是要把User ID 和Group ID 修改成000。根据CBC的加密模式,即使不知道加密的密钥,我们只需要修改前一个密文分组的值(URL)即可。那么,修改成什么呢?

根据XOR的运算规则(具体看上面)

P(new) = "前一个密文" ^ "当前明文" ^ "需要改成的明文"

然后这个P(new) 会跟当前的加密块(如图)异或,得到新的明文

P(new1) = 0xab ^ 0x31 ^ 0x30

P(new2) = 0x25 ^ 0x31 ^ 0x30

用Python计算一下

得到了新的密文值,将其替换掉原来的URL,变成

"http://127.0.0.1/mutillidae/index.php?page=view-user-privilege-level.php&iv=6bc24fc1aa650b24b4114e93a98f1eba "

页面跳转后,成功取得root权限。

 

参考文章

合天网安实验室:http://www.hetianlab.com/expc.do?ec=ECIDf328-1dc9-464c-918b-543b4a2d6590

某个博主:mutillidae实战(3)-CBC反转提权https://blog.csdn.net/weixin_41177699/article/details/83063101

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值