阅读:3237回复:0
WordPress 3.8.2 cookie伪造漏洞再分析
◆0 背景
看了WordPress 3.8.2补丁分析 HMAC timing attack,眼界大开,原来还可以利用时间差来判断HMAC。 但我总觉得这个漏洞并不是简单的修复这个问题。 查看了官方提供的资料:“该漏洞是由WordPress的安全团队成员Jon Cave发现。”。 也许漏洞还有这样利用的可能。 ◆1 PHP的特性 当PHP在进行 ”==”,”!=”等非严格匹配的情况下,会按照值的实际情况,进行强制转换。 #!php当有一个对比参数是整数的时候,会把另外一个参数强制转换为整数。 ◆2 分析修复的代码 官方版的diff只在php里改动了一个位置: #!diff其中$hmac来源于cookies。是我们可控的一个输入参数。 #!php$hash是以下代码生成一个md5值。 #!php当$hmac == $hash 时,登录成功。 那么,有几种情况会登录成功。 #!php很明显,第三种出现的情况非常大。 那么我们有没有可能把$hmac构造成一个整数0呢? ◆3 漏洞利用 我们看看cookie解析的代码: #!php当我们把cookie设置为: Admin|1397564163|1时。$hmac=’1’。但是,$hmac是字符串1,而不是整数1。 #!php非常遗憾,这个漏洞是不能利用的。 难道官方修复的真的不是这个漏洞? ◆4 柳暗花明又一村 还有什么情况能让字符串识别成整数吗?是的,还有! #!php‘e’会识别为次方,0的N次方为0; 所以,这个漏洞的利用方式还可以是:让$hmac = ‘0’; 通过改变$expiration来改变$hash。获得一个,第一位为0,第二位为e,后面所有位为数字的$hash. #!php◆5 攻击代码 本地测试代码(实际攻击代码应该是构造cookies远程请求): #!php通过改变过期时间,尝试碰撞到可以利用的hash。 按照理论值。碰撞到可以利用的$expiration几率是(2110^30)/(16^32)。也就是5.8774717541114 * 10 -9。 理论上:把cookies设置成 “admin|碰撞到的过期时间|0”,就可以登陆后台了。 但是几率太小,还不如穷举密码了。 Ps:我本地跑了几个小时了,还没遇到一个。 |
|