Продолжая перепись спортсменов

Дисклеймер гласит, что вся информация представлена исключительно в образовательных целях, все запросы выполняются к имитациям систем, все данные выдуманы, все совпадения случайны.

Захотелось, наконец, описать что-то из работы «в поле». Пускай и довольно примитивное. Сегодня готовим proof of concept для уязвимостей, описанных в предыдущем посте про перепись спортсменов. Все проблемы заключаются в т.н. information disclosure, потому не потребуется никаких инъекций и сплойтов — только автоматизация сбора информации, которую сервер итак отдаёт с большой охотой.

Итак, напомню, что при помощи двух векторов обнаружилась возможность собрать некоторое количество данных. Главным образом, номера накопительных карт, номера телефонов и имена клиентов. Бонусом идут балансы и уровни привелигерованности накопительных карт. Теперь нужно доказать, что собрать их действительно реально.

Конечно, задача сбора вообще всех учётных данных довольно амбициозна и может потребовать огромное количество времени, да и зачем? Главное это сформировать решение, которое позволило бы собрать внушительное количество данных и при этом масштабировалось бы так, чтобы при желании можно было сдампить столько, сколько нужно. Собственно, в этом и есть суть PoC. Пусть в этот раз целью будет сбор информации о 100+ клиентах.

Для начала необходимо перебрать заветную сотню телефонных номеров через механизм подтверждения владения картой в корзине. В прошлый раз я пользовался бесплатным Burp Suite и троттлинг не позволил мне перебрать больше двух сотен карт. Конечно, среди них тогда нашлись только две, номера которых я итак знал изначально. В этот раз я подготовился основательнее и в моём распоряжении имеется Pro-версия, которая не вставляет палки в колёса 🙂

Итак, прежде чем начинать перебор, воспользуемся благами цивилизации и настроим Grep — Extract так, чтобы он сразу показывал в ответе от сервера поле, содержащее или не содержащее нужный нам номер телефона.

sport-case8

Меня волновало также обновление сессии, но на данном этапе ничего не известно о том, какой у сервера таймаут, так что пробуем запускать перебор по 10000 номеров карт, находящихся в радиусе 5000 от заранее известного номера.

На удивление, сервер без проблем отвечает на все десять тысяч запросов. Странно, почему сессия не отвалилась, ну да ладно. Воспользуемся принципом «работает — не трогай». Сохраняем результаты перебора.

sport-case9

Наверное, можно было настроить вывод аккуратно сразу же, но я не осилил, так что выгрузил колонку с номерами карт и телефонов, а остальное сделал при помощи проклятого молотка под названием bash. Удаляем все строки с null вместо номера и очищаем номера телефонов от кавычек.

Итак, из первых 10000 номеров действительными оказались всего 66. Это всё ещё не целевые 100+, так что запускаем перебор соседнего диапазона такого же объёма. По окончании перебора, повторяем процедуру — удаляем неактивные карты и очищаем номера от ненужных кавычек. Объединяем выводы и получаем 125 активных карт. Стоит заметить, что сервер позволил перебрать ещё 10000 номеров, так и не просрочив сессию. Похоже, этот механизм тоже не вполне исправен.

Теперь можно приступать ко второму этапу. Замечательная функция проверки количества скидочных баллов накопительной карты, которая вежливо отвечает, называя пользователя по имени, позволит нам дополнить дамп именами и балансами. Как здорово, что она защищена абсолютно неработающей капчей.

К счастью, теперь вовсе не обязательно стрелять из пушки по воробьям, можно спокойно перебирать только активные карты, беспрепятственно собирая интересующую информацию. Проверка 125 карт занимает пару секунд. Объединяем выводы обоих переборов.

sport-case10

В течение всего перебора ни один сервер на пострадал, сервер ни разу не попытался просрочить мою сессию или усомниться в том, что капчу вводили пару сотен запросов назад. Конечно, диапазон номеров карт просто огромен, а я, для снижения нагрузки, производил перебор в один поток, а ведь их могут быть десятки. Считаю это решение вполне масштабируемым, особенно с учётом «бесконечных» сессий.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *