CTF Selenium или как сделать имитацию пользователя для уязвимой лабораторной.

Xenofob

One Level
28.09.2022
5
1
BIT
73
Selenium.png


Тема немного не про ИБ, а про создание лабораторий для тренировок ИБешников .
Задался я как-то целью сделать простенькую страничку с уязвимостью в javascript. И вроде бы работает всё исправно, и флаг предоставляется при попытке увести куки, но добрые люди мне дали понять, что способ, которым я возвращаю флаг, не совсем кашерный. А именно, производилось сравнение полезной нагрузки с придуманным мной шаблоном, следовательно другие способы эксплуатации, которые я не учёл, могли быть проигнорированы.
Так, закусив новогодним винегретом, я крепко задумался, как заставить приложение реагировать на внедрённый js-код. Поскольку в разработке я не силён, мне в голову не пришло ничего лучшего кроме как создать условного админа, который бездумно будет переходить по предоставленным ему ссылкам и раздавать таким образом свои куки.


Какими же способами можно переходить по ссылкам? Первым в голову приходит curl, но он не исполняет js-код. Была мысль использовать полноценный браузер, js-движок же в нём есть, значит будет работать. И тесты подтвердили предположение, но появилась новая проблема, после открытия браузера и отрабатывания скрипта, окно необходимо закрыть, иначе накопится 100500 вкладок, а запуск через крон с последующим kill браузера частенько заканчивалось ошибкой.

Порыскав на просторах интернета, я узнал об инструменте братьев-тестировщиков, а именно, selenium-webdriver. Выбрав реализацию на JS, начинаем писать код.

7f6e07f7ed7cdaa4b78fa.png


Подтягиваем библиотеку и объявляем, что будем использовать браузер Firefox

a893136b753d581392148.png


Настраиваем опции, тут мы добавляем аргументы как если бы вызывали firefox из консоли.

--profile указывает местоположение папки с файлами профиля, в профиле могут быть заранее сохранены куки к определённым сайтам.
--headless говорит браузеру использовать "безголовый" режим, т.е. без монитора(без GUI)


c6685e53b460a2504c97b.png


Пишем функцию для перехода по заданным ссылкам, тут осуществляется GET-запрос

3bf151bdc4337bc9ff911.png


Так же при переходе можно задать отдельные куки

d0faf8dd6aca6103129b0.png

Немного обратной связи через консоль

b84c1736afea3a0afaf4b.png


И закрываем браузер после рендера страницы. При желании можно оставить открытым и плодить процессы.

89cacc7c39963d9a04282.png


Передаём адрес в функцию. Весь код выглядит так

473e9434175cab71ada11.png


Запускаем наш скрипт

2668391fb05c5fd84f489.png


В нормальном режиме без закрытия браузера увидим такое окно

bd72a2194404ad718d881.png


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

А какую бы реализацию сделали вы?
 
Последнее редактирование:
  • Нравится
Реакции: xuZ00
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!