WordPress 3.5.1 拒绝服务漏洞分析
首先原文地址 https://vndh.net/note:wordpress-351-denial-service 写的步骤比较跳 欢迎拍砖
首先看/wp-includes/post-template.php的post_password_required函数,看图
包含了 wp-includes/class-phpass.php
并且执行 CheckPassword()函数
CheckPassword()函数就在/wp-includes/class-phpass.php文件里,看图
执行 crypt_private()函数 ,还是在class-phpass.php文件里
重点来了, 标志1
$count_log2 = strpos($this->itoa64, $setting[3]); //获取$setting[3]在$this->itoa64的位置
$setting参数来自 图2 CheckPassword()函数的$stored_hash,$stored_hash来自图1的$hash
$hash = stripslashes( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ); 即设置cookie,cookie可控
说到这 $this->itoa64 是啥,看图
$this->itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
图2 的标志2 是啥 $count = 1 << $count_log2;
看标志3 即知道$count是执行MD5的次数, 如果执行的次数比较大,大到上亿是不是就产生拒绝服务了呢,哈哈
怎么触发 ,标志1 中有限制
if ($count_log2 < 7 || $count_log2 > 30)
/* 124 */ return $output;
即在itoa64中出现的位置小于7或者大于30则退出,不会执行md5计算
我们只要设置$_COOKIE['wp-postpass_' . COOKIEHASH] = "$P$Spaddding" ,$setting[3]即$P$Spaddding的第三个,从0开始就是'S'
S在itoa64正好处在第30个位置,绕过限制,执行MD5计算
$count_log2=30,$count = 1 << $count_log2; = 1<<30 //1左移30 就是 1000000... 1后面30个0
执行1000000000000000000000000....次MD5计算 产生拒绝服务
最后 为什么cookie设置成$P$前缀,因为
crypt_private()函数中
/* 119 */ if ($id != '$P$' && $id != '$H$')
/* 120 */ return $output;
不等于$P$即退出。
忘了说 设置cookie在 wp-login.php文件中
action=postpass 。。。
发现写的很乱 欢迎拍砖。 http://t.qq.com/fake_wang
首先看/wp-includes/post-template.php的post_password_required函数,看图
包含了 wp-includes/class-phpass.php
并且执行 CheckPassword()函数
CheckPassword()函数就在/wp-includes/class-phpass.php文件里,看图
执行 crypt_private()函数 ,还是在class-phpass.php文件里
重点来了, 标志1
$count_log2 = strpos($this->itoa64, $setting[3]); //获取$setting[3]在$this->itoa64的位置
$setting参数来自 图2 CheckPassword()函数的$stored_hash,$stored_hash来自图1的$hash
$hash = stripslashes( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ); 即设置cookie,cookie可控
说到这 $this->itoa64 是啥,看图
$this->itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
图2 的标志2 是啥 $count = 1 << $count_log2;
看标志3 即知道$count是执行MD5的次数, 如果执行的次数比较大,大到上亿是不是就产生拒绝服务了呢,哈哈
怎么触发 ,标志1 中有限制
if ($count_log2 < 7 || $count_log2 > 30)
/* 124 */ return $output;
即在itoa64中出现的位置小于7或者大于30则退出,不会执行md5计算
我们只要设置$_COOKIE['wp-postpass_' . COOKIEHASH] = "$P$Spaddding" ,$setting[3]即$P$Spaddding的第三个,从0开始就是'S'
S在itoa64正好处在第30个位置,绕过限制,执行MD5计算
$count_log2=30,$count = 1 << $count_log2; = 1<<30 //1左移30 就是 1000000... 1后面30个0
执行1000000000000000000000000....次MD5计算 产生拒绝服务
最后 为什么cookie设置成$P$前缀,因为
crypt_private()函数中
/* 119 */ if ($id != '$P$' && $id != '$H$')
/* 120 */ return $output;
不等于$P$即退出。
忘了说 设置cookie在 wp-login.php文件中
action=postpass 。。。
发现写的很乱 欢迎拍砖。 http://t.qq.com/fake_wang
评论12次
很好、、、、
一直在想这些拒绝服务攻击的实际作用是啥,把站搞死?也搞不到shell啊
3.5.2已经发布了。
学xi
爱要外文啊 哈哈
学xi了。。。。。
这个叼!!
没看懂就看英文原版的呗
什么意思?真没看懂,读取cookie时产生的拒绝服务?
呵呵,收下了、、、
前排
前排