Обход капчи у веб-приложений построенных на Bitrix ⛈
Однажды я на работе ломал один сайт который был построен на 1с-bitrix
Мне попался один файл с регистрацией и заметив в нем капчу мне стало любопытно, а можно ли ее обойти
Недолго поисследовав как одна устроена и как генерируется - мне удалось ее обойти.
Давайте разберемся как обошел, о чем думал когда исследовал и т.д.
💪
Внутреннее устройство капчи
Давайте познакомимся с деталями и устройством капчи
🟢captcha.php - системный файл битрикса, который генерирует капчу и ее SID каждый раз по новой, когда приходит ей GET запрос при подгрузке страницы где капча размещена, далее этот файл обращается к функции
GetSID() для того, чтобы получить значение капчи и её SID
🟢SID - дословно расшифровывается как secure id. Он нужен чтобы в html форме на прямую не лежало значение капчи, выглядит он как-то так: 0f7e32b13881c476d4d1f7be9796ed42
после его генерации в html форме появляется ссылка такого вида: /bitrix/tools/captcha.php?captcha_sid=0f7e32b13881c476d4d1f7be9796ed42
перейдя не неё - там лежало значение капчи в виде картинки, которую нужно ввести руками
🟢Условно выглядит это так 0f7e32b13881c476d4d1f7be9796ed42 == we0f
Где 0f7e32b13881c476d4d1f7be9796ed42 - SID
И we0f значение капчи
🟢Также, при регистрации нового пользователя отправляется POST запрос где в параметрах есть значение капчи в виде "f4oK" и ее SID, далее идет проверка капчи
💪
Почему начал исследовать?
🟢 Начал я исследовать из-за того, что ранее сгенерированные SID оставались еще долгое время живы и не удалялись системой, это и привлекло мое внимание
и подумал я, а что если проверить на генерацию одного и того же SID, если сгенерируется один и тот-же SID что и ранее, то можно без проблем ввести значение капчи и ее обойти и начал это реализовывать
мой коллега помог написать скрипт на python чтобы отправлялся get запрос на ловлю старого sid, за что большое спасибо, но через get запрос не сработало к сожалению, тогда я попробовал написать через post запрос
💪
Обход капчи
⬜️ Отправляем post запрос на регистрацию нового юзера через python
⬜️ Отправляем его до тех пор, пока не попадется старый sid
⬜️ Если попался старый сид, то зарегистрируется новый юзер и выведет "ok"
🟢 Весь эксплойт выглядит так:
https://pastebin.com/DiZXUkWW🟢И в результате это сработало, скрипт мне выдал любимый "ok" и чтобы проверить не ошибка ли это, я пошел авторизироваться с пользователем зарегистрированным через обход капчи, и сработало
💪
Импакт и завершение
Таким образом можно сгенерировать к примеру 10 таких SID введя значение и ждать когда скрипт задетектит старые и зарегает пользователя
Импакт от этого - возможность забить место в базе данных
ЧТНП | #исследования #web