Тема немного не про ИБ, а про создание лабораторий для тренировок ИБешников .
Задался я как-то целью сделать простенькую страничку с уязвимостью в javascript. И вроде бы работает всё исправно, и флаг предоставляется при попытке увести куки, но добрые люди мне дали понять, что способ, которым я возвращаю флаг, не совсем кашерный. А именно, производилось сравнение полезной нагрузки с придуманным мной шаблоном, следовательно другие способы эксплуатации, которые я не учёл, могли быть проигнорированы.
Так, закусив новогодним винегретом, я крепко задумался, как заставить приложение реагировать на внедрённый js-код. Поскольку в разработке я не силён, мне в голову не пришло ничего лучшего кроме как создать условного админа, который бездумно будет переходить по предоставленным ему ссылкам и раздавать таким образом свои куки.
Какими же способами можно переходить по ссылкам? Первым в голову приходит curl, но он не исполняет js-код. Была мысль использовать полноценный браузер, js-движок же в нём есть, значит будет работать. И тесты подтвердили предположение, но появилась новая проблема, после открытия браузера и отрабатывания скрипта, окно необходимо закрыть, иначе накопится 100500 вкладок, а запуск через крон с последующим kill браузера частенько заканчивалось ошибкой.
Порыскав на просторах интернета, я узнал об инструменте братьев-тестировщиков, а именно, selenium-webdriver. Выбрав реализацию на JS, начинаем писать код.
Подтягиваем библиотеку и объявляем, что будем использовать браузер Firefox
Настраиваем опции, тут мы добавляем аргументы как если бы вызывали firefox из консоли.
--profile указывает местоположение папки с файлами профиля, в профиле могут быть заранее сохранены куки к определённым сайтам.
--headless говорит браузеру использовать "безголовый" режим, т.е. без монитора(без GUI)
Пишем функцию для перехода по заданным ссылкам, тут осуществляется GET-запрос
Так же при переходе можно задать отдельные куки
Немного обратной связи через консоль
И закрываем браузер после рендера страницы. При желании можно оставить открытым и плодить процессы.
Передаём адрес в функцию. Весь код выглядит так
Запускаем наш скрипт
В нормальном режиме без закрытия браузера увидим такое окно
Добавлю, что автоматизация на селениуме не идеальна. Программа отрабатывает действия быстрее человека и если это важно, то она может спалиться. Так же есть ограничения с куками при редиректе, разработчики селениума написали, что так и задумано.
А какую бы реализацию сделали вы?
Последнее редактирование: