ReCaptcha в PhpMyAdmin — активация, обход и фикс

    Совсем недавно, копаясь в коде 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 конечно же сообщено.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 14

      +3
      Совсем недавно, копаясь в коде PhpMyAdmin, обнаружил давно присутствующий в нём (судя по changelog) механизм captcha при авторизации.
      Так есть же описание в документации.
        –1
        Описание то есть, но сколько лет использую pma ни разу даже не слышал о том, что такой функционал существует. Поспрашивал у знакомых веб-мастеров — те тоже не знали. Всю жизнь просто распаковывали и пользовались. Максимум конфиг редактировали по комментариям из него же. В итоге решил проверить, а оказалось что баг нашёл :)
          +2
          Вообще не думаю что это баг, просто такой алгоритм работы. А вообще документация рулит, а то вы словно Америку открыли. Ну и так — добить, «не большую» — пишется слитно.
            0
            Согласен, это не баг, а фича, точнее компромисс между удобством и паранойей. Во-первых, китайцы достаточно дешево вручную разгадывают капчи, во-вторых, от переборов существуют специальные системы, блокирующие слишком частые запросы на определенные url, и хитросгенерируемые пароли, вида aК5#f%s@f7RL*9.
              0
              О том что какой-то сервис разгадывания работает с reCaptcha я никогда не слышал. Если это так, то всё куда хуже чем я думал) Хорошие пароли всегда являлись отличной защитой от подбора, но не всегда мы сами можем контролировать какой пароль на свою БД ставит рядовой пользователь совместного хостинга например.
                0
                Вручную можно разгадать любую капчу, другое дело что такие сервисы относительно недешевые около 50 центов за 1 тыс., но при наличии денег и желания это не проблема.
                  +1
                  На сколько мне известно, передача именно reCaptcha на сторону такого сервиса является пока нерешённой проблемой. Там ведь механизм прост — получил картинку на сайте, перешли в виде файла на сервис распознавания по API и жди ответа сервера с фразой распознанной человеком. А reCaptcha мало того что динамична, так ещё и видоизменяться может (кликнул на галочку, потом может показаться фрейм с выбором изображений).
        +2
        А зачем вообще оставлять открытый доступ к PhpMyAdmin?
          0
          Ситуации разные бывают, порой это необходимая мера. Я сам сторонник жёстко лимитированного доступа к инструментам администрирования, но всё равно имеется пара серверов на которых доступ к таким инструментам необходим в любое время и с любого устройства.
            +2
            Удобнее и безопаснее использовать обычный MySQL клиент через ssh-туннель?
              0
              Смотря какой клиент. В чём-то может безопаснее, но не со всяким удобнее. Опять же, ситуации разные бывают. Иногда может понадобится с телефона срочно зайти с плохой связью и выполнить пару запросов вбиваемых руками. Тут PMA как раз хорошо выручит.
                +1
                Можно закрывать url PhpMyAdmin с помощью пароля на http_access, тогда чтобы потребуется подобрать аж два пароля, а учитывая что пароль на http_access может быть сохранен в браузере это будет куда удобнее чем постоянно вводить капчу (особенно на мобильных устройствах).
                  +1
                  Не столько можно, сколько — нужно! Учитывая что PhpMyAdmin забывают обновлять, а потом находятся дыры в скриптах.

                  Во всяком случае я постоянно вижу в логах перебор разных скриптов в папках /pma/* /phpMyAdmin/* и подобных.
          +3
          Было бы круче если бы вместо «грязного» хака, вы бы оформили выбор поведения капчи как настройку конфигурации и сделали пулл реквест в проект.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое