|
Познающий
Регистрация: 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($chars, mt_rand(0, 61), 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..
|