WordPress是一款免费的论坛Blog系统。 WordPress实现上存在输入验证漏洞,远程攻击者可能利用此漏洞执行SQL注入攻击非授权访问数据库。 WordPress的wp-admin/admin-ajax.php文件没有正确验证对cookie参数的输入。在wp-admin/admin-ajax.php的6行: ------------------[source code]---------------------- define('DOING_AJAX', true); check_ajax_referer(); if ( !is_user_logged_in() ) die('-1'); ------------------[/source code]---------------------- 然后在check_ajax_referer()函数中: ------------------[source code]---------------------- function check_ajax_referer() { $cookie = explode('; ', urldecode(empty($_POST['cookie']) ? $_GET['cookie'] : $_POST['cookie'])); // AJAX scripts must pass cookie=document.cookie foreach ( $cookie as $tasty ) { if ( false !== strpos($tasty, USER_COOKIE) ) $user = substr(strstr($tasty, '='), 1); if ( false !== strpos($tasty, PASS_COOKIE) ) $pass = substr(strstr($tasty, '='), 1); } if ( !wp_login( $user, $pass, true ) ) die('-1'); ------------------[/source code]---------------------- 可见使用了urldecode(),因此通过%2527就可以向wp_login()传送单引号,绕过php的magic_quotes功能。...
WordPress是一款免费的论坛Blog系统。 WordPress实现上存在输入验证漏洞,远程攻击者可能利用此漏洞执行SQL注入攻击非授权访问数据库。 WordPress的wp-admin/admin-ajax.php文件没有正确验证对cookie参数的输入。在wp-admin/admin-ajax.php的6行: ------------------[source code]---------------------- define('DOING_AJAX', true); check_ajax_referer(); if ( !is_user_logged_in() ) die('-1'); ------------------[/source code]---------------------- 然后在check_ajax_referer()函数中: ------------------[source code]---------------------- function check_ajax_referer() { $cookie = explode('; ', urldecode(empty($_POST['cookie']) ? $_GET['cookie'] : $_POST['cookie'])); // AJAX scripts must pass cookie=document.cookie foreach ( $cookie as $tasty ) { if ( false !== strpos($tasty, USER_COOKIE) ) $user = substr(strstr($tasty, '='), 1); if ( false !== strpos($tasty, PASS_COOKIE) ) $pass = substr(strstr($tasty, '='), 1); } if ( !wp_login( $user, $pass, true ) ) die('-1'); ------------------[/source code]---------------------- 可见使用了urldecode(),因此通过%2527就可以向wp_login()传送单引号,绕过php的magic_quotes功能。 接下来: ------------------[source code]---------------------- function wp_login($username, $password, $already_md5 = false) { global $wpdb, $error; ... $login = get_userdatabylogin($username); ------------------[/source code]---------------------- 最终: ------------------[source code]---------------------- function get_userdatabylogin($user_login) { global $wpdb; ... if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_login = '$user_login'") ) return false; ------------------[/source code]---------------------- 因此攻击者可以执行SQL注入攻击。 WordPress WordPress 2.1.3 目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载: <a href="http://wordpress.org/download/" target="_blank">http://wordpress.org/download/</a>