ReCaptcha в PhpMyAdmin - HowTo

Совсем недавно, копаясь в коде PhpMyAdmin, обнаружил давно присутствующий в нём (судя по changelog) механизм captcha при авторизации. И не абы что, обходимое через многочисленные сервисы, а Google reCaptcha.

Активировать его можно буквально за минуту — заходим на www.google.com/recaptcha, получаем private- и public-ключи для своего домена и вписываем их в config.inc.php в ячейки «$cfg['CaptchaLoginPrivateKey']» и «$cfg['CaptchaLoginPublicKey']» соответственно. Всё, после этого на странице авторизации появляется дополнительная проверка пользователя.

Почти отличная защита от автоматизированного перебора паролей. «Почти» — потому что разработчики PMA ради удобства пользователей оставили в скрипте не большую брешь. Если в текущей сессии человек проходит проверку reCaptcha, то больше она ему не показывается. То есть для реализации стандартного перебора атакующему необходимо пройти проверку вручную, передать брутеру ID своей сессии и всё, брутер может спокойно работать.

Исправляется этот баг просто. В файле /libraries/plugins/auth/AuthenticationCookie.class.php нужно найти строки

// We already have one correct captcha.
$skip = false;
if ( isset($_SESSION['last_valid_captcha'])
&& $_SESSION['last_valid_captcha']
) {
$skip = true;}

и закомментировать строку «$skip = true;». Теперь reCaptcha будет выводиться всегда.

И небольшой наглядный пример обхода на Python+Selenium (PasteBin).

Работает он просто. Если открыв страницу PMA в её коде скрипт «видит» reCaptcha, то браузер создаёт на странице чекбокс «Ready to go» и ждёт его отметки человеком. Перед проставлением этой галочки человек должен пройти проверку reCaptcha. Далее перебор идёт обычным ходом.

P.S. Разработчикам PMA конечно же сообщено.

Автор: AntonKuzmin, Источник
 

Добавить комментарий


Защитный код
Обновить