На написание данной статьи меня подтолкнуло участие в соревнованиях по информационной безопасности - Capture the Flag (CTF). Это был MCTF 2021 , проводимый Московским Техническим Университетом Связи и Информатики.
Логотип MCTF
Таск - Next Level Recon #
Описание #
Описание таска
Next Level Recon относится к категории MISC (разное) и имеет сложность “Easy”, что как бы намекает нам, что таск будет легкий. Помимо описания содержит прикрепленный файл с расширением .pcap
Решение #
Первый взгляд #
Учитывая, что нам дан pcap-файл - это без сомнения дамп сетевого трафика. Рассмотрим его подробнее в анализаторе сетевого трафика - WireShark.
Содержимое дампа сетевого трафика
В дампе всего 26 пакетов, присутствуют только протоколы TCP и HTTP. Причем отправитель и получатель - это один и тот же IP-адрес.
Восстановление трафика #
Попробуем собрать поток HTTP-трафика. Для этого щелкаем правой кнопкой мыши на HTTP-пакете и выбираем “Follow -> HTTP Stream”.
Сбор потока HTTP-трафика
После сбора потока HTTP-трафика, мы наблюдаем картину обычного GET-запроса HTTP и ответа ему.
GET-запрос HTTP и ответ ему
Судя по содержимому, ничего особенного здесь не происходит:
- Скачивается иконка сайта (favicon.ico)
- Выводится строка “Site in development…”
Так как в описании задания говорится, что нужно найти какой-то сайт, то можно попробовать “пихать” в поисковики специальные поисковые запросы с определенными строками и параметрами, но заранее скажу, что данный способ здесь не поможет. Поэтому под наш прицел попадает именно favicon.ico. Попробуем вытащить его из дампа.
Экспорт объектов из HTTP-трафика #
На самом деле здесь все просто - WireShark сделает все за нас. Нужно только нажать “File -> Export Objects -> HTTP…”
Экспорт файлов
Далее просто нажать “Save All” и указать путь куда файлы будут сохранены.
Выбор и сохранение файлов
Открыв для просмотра файл “favicon.ico” можно предположить, что он такой же, как и у самого сайта https://mctf.online, на котором и проходили соревнования. Судя по описанию таска, наши предположения должны быть верными. Проверить это на практике можно путем расчета контрольных сумм двух иконок (они совпадают).
Поиск по хешу #
По заданию нам необходимо найти сайт, на который переехал сайт из дампа. Первое что приходит на ум - это искать в Shodan. У нас из исходных данных - файл favicon.ico. Продолжая верить в то, что это такая же иконка, как и у основного сайта соревнований, посчитаем MurmurHash от него.
Для этого на GitHub есть даже за нас написанный скрипт. Модифицируем его под наши исходные данные и получим следующее:
import mmh3
import requests
import codecs
response = requests.get('https://mctf.online/favicon.ico')
favicon = codecs.encode(response.content,"base64")
hash = mmh3.hash(favicon)
print(hash)
Скормив этот скрипт питону, получим хеш: -535199269
Остается скормить этот хеш в Shodan, применив специальный фильтр http.favicon.hash:
Результат выполнения запроса в Shodan
Как видно из результата запроса - найдено 3 совпадения, одно из которых это сам сайт https://mctf.online, а второй с говорящим названием “Flags are here!”. Наша теория подтвердилась! Зайдем на страницу по IP-адресу, на который указывает “Flags are here!”, чтобы забрать наш флаг:
Вывод #
Таким образом можно искать любые сайты в Интернете - просто узнав MurmurHash соответствующего favicon.ico. Это может быть полезно, если сайт переехал на другое доменное имя, либо вы вообще не знаете ни доменное имя, ни IP-адрес, либо просто хотите посмотреть какие еще сайты хостятся с данным фавиконом.