填充提示攻击--破解CBC模式的AES加密
本文参考
Padding Oracle Attack(填充提示攻击)详解及验证
今天看shiro的历史漏洞的时候看到了这样的内容
shiro 550 主要利用的就是shiro cookie中的rememberme字段在服务端解析的时候会经过base64解码-AES解密-反序列化的过程,既然存在反序列化的函数,那么就可能存在发序列化的漏洞,那么要实现反序列化的利用条件,上述的 三个过程中比较难控制的就是我们不知道AES加密方式的秘钥是多少。而该漏洞发生的位置正好就在这儿,在shiro 1.2.24版本以下,AES的解密秘钥是硬编码在代码中的,而shiro是一个开源程序,那么我们就可以收集各个版本的秘钥咯,然后挨个秘钥尝试,如果成功解密的话服务端会返回200,解密失败的话会返回500,通过观察返回的状态码就可以判断当前的秘钥,然后构造序列化字符串进行getshell 或者执行命令。
shiro 721 这个漏洞可谓是通杀了!!原理和shiro550是一样的,不过不需要知道AES的秘钥,只需要暴力猜解明文与密文就好了,通过观察服务端返回状态码,来判断解密是否成功,从而构造payload进行攻击,这个shiro 721就是填充提示攻击padding oracle attacking
我们来看看这种方式为啥能够成功
shiro使用的AES加密模式是CBC,这种加密模式的加密过程是这样的。
需要两个关键数据,一个是秘钥,一个是IV invoke vector—初始向量,初始向量的存在保证了