27.11.2014 Views

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

RAND<br />

IS NOT RAND<br />

RAND<br />

IS NOT RAND<br />

>> взлом<br />

RAND<br />

IS NOT RAND<br />

RAND<br />

IS NOT RAND<br />

RAND<br />

IS NOT RAND<br />

RAND<br />

IS NOT RAND<br />

RAND<br />

IS NOT RAND<br />

PHP GENERATE_SEED() WEAK RANDOM NUMBER SEED<br />

VULNERABILITY<br />

STEFAN ESSER: MT_SRAND AND NOT SO RANDOM<br />

NUMBERS<br />

JOOMLA WEAK RANDOM PASSWORD RESET TOKEN<br />

VULNERABILITY<br />

LOG EXPLOIT: JOOMLA WEAK RANDOM PASSWORD<br />

RESET TOKEN VULNERABILITY<br />

При наличии шелла на субдомене можно восстановить токен сброса<br />

пароля, вызвав mt_rand() и посчитав SEED для mt_srand(). После чего<br />

сбросить пароль по найденному токену, но пароль уйдет на мыло админа,<br />

и мы его не увидим. Да и функция генерации пароля совсем другая<br />

— она основана на srand(). Это как раз тот самый случай, когда в приложении<br />

используются оба генератора. В версии 1.9.x ветки в алгоритм<br />

генерации пароля добавлен режим повышенной безопасности.<br />

Так, в простом режиме используется алгоритм «word1+num+word2»,<br />

где num — число из 0123456789, а word1 и word — слова из словаря.<br />

Словарь расположен в lib/wordlist.txt (доступен прямо из Web) и по дефолту<br />

содержит 35 слов. Итого, возможно всего лишь 35*10*35=12250<br />

комбинаций независимо от rand() и srand(). Если найти способ обойти<br />

блокировку при брутфорсе паролей — можно сбросить и перебрать<br />

его.<br />

В режиме повышенной безопасности символы перемешиваются<br />

посредством str_shuffle(), которая зависит от srand(). Количество<br />

вариантов без учета rand() и srand() громадно — чуть меньше, чем<br />

77^8. Но реальное количество комбинаций ограничено srand(). При<br />

эксперименте установлено, что практически нигде нет чистого<br />

вызова srand() или mt_srand(). Как ни удивительно, это хорошо. В<br />

случае вызова «mt_srand ((double) microtime() * 1000000);» придется<br />

перебирать лишь 1 млн. комбинаций, а не 4 млрд., как при дефолтовом<br />

вызове. А значит, и криптостойкость генерации не превышает<br />

1 млн. комбинаций. — XMB 1.9.x mt_rand() Admin Reset Password<br />

Exploit. И снова баг засел в системе восстановления пароля. При<br />

знании пары «Username + E-Mail» генерируется новый пароль и тут<br />

же устанавливается. На e-mail отправляется уведомление с самим<br />

паролем. Если у нас имеется шелл на поддомене — можно вызвать<br />

mt_rand в Keep-alive-соединении и восстановить начальное значение<br />

SEED для mt_srand. Подбор SEED при этом занимает считанные<br />

секунды.<br />

ПОБЕДА ЗА ХАКЕРАМИ<br />

…и это далеко не весь список. Зайди на google.com/<br />

codesearch?q=mt_srand(%5C%20|)+%5C(%20lang:php и экспериментируй<br />

сам. Патчат такие баги, как показала годовая практика, — криво,<br />

не только веб-программисты, но и сами разработчики PHP. Правят<br />

либо авто-SEED, а про предсказуемость забывают (не добавляют<br />

внешнюю энтропию вроде md5(microtime()) или MySQL’овый 'select<br />

rand()' и т.д.), либо правят предсказуемость и забывают про авто-<br />

SEED. В общем, хотели как лучше, а получилось как всегда. Хакеры<br />

опять рулят миром и разбитыми PHP-движками. z<br />

LOG EXPLOIT: XMB 1.9.11 RANDOM PASSWORD RESET VULNERABILITY<br />

042<br />

XÀÊÅÐ 07 /127/ 09

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!