ÃÂÕáÛãçÃÂÙÃÂÞ CUDA ØÔÕÃÂœ? phpMyAdmin - Xakep Online
ÃÂÕáÛãçÃÂÙÃÂÞ CUDA ØÔÕÃÂœ? phpMyAdmin - Xakep Online
ÃÂÕáÛãçÃÂÙÃÂÞ CUDA ØÔÕÃÂœ? phpMyAdmin - Xakep Online
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