На написание данной статьи меня подтолкнуло участие в соревнованиях по информационной безопасности - Capture the Flag (CTF). Это был MCTF 2021 , проводимый Московским Техническим Университетом Связи и Информатики.
Таск - Next Level Recon
Описание
Next Level Recon относится к категории MISC (разное) и имеет сложность "Easy", что как бы намекает нам, что таск будет легкий. Помимо описания содержит прикрепленный файл с расширением .pcap
Решение
Первый взгляд
Учитывая, что нам дан pcap-файл - это без сомнения дамп сетевого трафика. Рассмотрим его подробнее в анализаторе сетевого трафика - WireShark.
В дампе всего 26 пакетов, присутствуют только протоколы TCP и HTTP. Причем отправитель и получатель - это один и тот же IP-адрес.
Восстановление трафика
Попробуем собрать поток HTTP-трафика. Для этого щелкаем правой кнопкой мыши на HTTP-пакете и выбираем "Follow -> HTTP Stream".
После сбора потока 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:
Как видно из результата запроса - найдено 3 совпадения, одно из которых это сам сайт https://mctf.online, а второй с говорящим названием "Flags are here!". Наша теория подтвердилась! Зайдем на страницу по IP-адресу, на который указывает "Flags are here!", чтобы забрать наш флаг:
Вывод
Таким образом можно искать любые сайты в Интернете - просто узнав MurmurHash соответствующего favicon.ico. Это может быть полезно, если сайт переехал на другое доменное имя, либо вы вообще не знаете ни доменное имя, ни IP-адрес, либо просто хотите посмотреть какие еще сайты хостятся с данным фавиконом.