You are here: Home » Разведка » Инструкция по применению flashlight в BlackArch: массовый сбор скриншотов веб-сайтов и веб-приложений

Инструкция по применению flashlight в BlackArch: массовый сбор скриншотов веб-сайтов и веб-приложений

Если мы нашли открытый восьмидесятый порт (а также 443, 8080, 8443), то это означает, что какая-то служба его прослушивает в ожидании подключения. Ничего конкретнее мы сказать не можем. С той стороны может быть веб-сервер, роутер, веб-камера, файловый-сервер, что-то ещё, ну или просто нам никто не ответит. Если стоит цель исследовать большие сети, то есть разные варианты автоматизации — например, сбор отпечатков и последующий их анализ. Это хороший и продуктивный метод. В качестве ещё одной альтернативы существует такой способ как снятие скриншотов. Это очень наглядный метод. Даже если их просто открыть в проводнике и посмотреть на миниатюры картинок, то сразу видны роутеры, запущенные веб-серверы без контента, полноценные сайты и т. д. Если имя скриншота начинается с IP адреса, то также наглядны «скопления» необычных объектов в подсетях. Очень легко выделить самые часто встречающиеся роутеры. В общем, один из методов исследования сети, который имеет право на существование.

02

Я расскажу, как организовать массовый сбор скриншотов с помощью программы flashlight. Скорость — около тысячи скриншотов за 2-4 часа работы.

Кроме flashlight нам понадобиться ещё несколько программ. Установим их все одной командой:

sudo pacman -S flashlight nmap wireshark-gtk wireshark-cli tcpdump dsniff masscan --needed

Ещё нам нужен PhantomJS. Ставить его нужно по этой инструкции. Т.е.:

sudo pacman -S phantomjs --needed
sudo ln -s /usr/bin/phantomjs /usr/local/bin/phantomjs
sudo ln -s /usr/bin/phantomjs /usr/local/share/phantomjs

Теперь давайте определимся, какие IP адреса нам интересны. Можно выбрать просто диапазон (подсеть), можно выбрать конкретного интернет-провайдера, страну, область, город. К примеру я выберу свою родную Владимирскую область. Подробно о составлении диапазонов IP адресов рассказано в статье «Как узнать все IP провайдера, города, региона (области, республики) или страны». Нет смысла её здесь пересказывать, поэтому я сразу приведу свои команды с краткими пояснениями.

Я скачиваю и распаковываю базу данных:

wget `curl -s https://db-ip.com/db/download/city | grep -E -o 'http://download.db-ip.com/free/dbip-city-20[0-9]{2}-[0-9]{2}.csv.gz'`&& gunzip dbip-city-*.csv.gz && mv dbip-city-* dbip-city-csv

Теперь я составляю список всех IP Владимирской области (слово vladimir в команде):

CITY=vladimir;cat dbip-city-csv | grep -E -i "$CITY" | sed 's/","/-/' | cut -d ',' -f 1 | sed 's/"//' | sed 's/"//' > IP_Region_$CITY.txt

У меня сформировался файл IP_Region_vladimir.txt. Из него я удаляю IPv6 адреса (они в самом конце), т. к. программы ещё не очень хорошо с ними работают.

Если вы заглянули в файл, то он начинается со строк вроде этих:

23.237.62.232-23.237.62.239
31.28.192.0-31.28.223.255
31.40.32.0-31.40.63.255
31.130.120.0-31.130.127.255
31.133.200.0-31.133.207.255
31.135.224.0-31.135.239.255
31.184.243.0-31.184.243.255
37.18.81.0-37.18.81.255
37.19.72.0-37.19.79.255
37.29.74.0-37.29.74.255
37.75.200.0-37.75.203.255
37.75.204.0-37.75.207.255
37.230.136.0-37.230.139.255
45.54.12.120-45.54.12.127
45.54.35.32-45.54.35.47
46.20.176.0-46.20.183.255
46.20.184.0-46.20.191.255
46.148.128.0-46.148.143.255

Такой формат понимают далеко не все программы (например, nmap эти строки поставят в тупик).

03

Соответственно, если nmap его не «переваривает», то точно также с ним не может работать и flashlight, поскольку сама является, хоть и интеллектуальной, но всё же просто оболочкой для nmap. Нам бы хотелось реорганизовать эти подсети на IP с равными интервалами. Ещё желательно не сканировать одновременно IP из одной подсети — это нагрузка на неё, плюс большая вероятность, что наша активность попадёт в поле зрение разных систем обнаружения вторжений. Поэтому был придумал следующий метод с привлечением программы masscan. Мы начинаем с того, что эти «трудноперевариваемые» диапазоны разбиваем на отдельные IP. Найти подробную справку по программе masscan вы можете на этой страничке. Команда, которая считывает диапазоны, а выдаёт отдельные IP, причём в рандомном порядке, выглядит так:

masscan -sL -iL IP_Region_vladimir.txt > ready.hosts

Именно это нам и нужно:

04

Теперь всё просто — считываем нужное количество IP, объединяем их запятой и скармливаем программе. Для автоматизации процесса я написал следующий скриптик:

#!/bin/bash

if [ `cat ready.hosts | wc -l` -eq 0  ]
then
    echo 'IP закончились.'
    exit
fi     

echo 'Продолжаем...'

timeout 40 sudo flashlight -p vladimir_region -s screen -d `cat ready.hosts | head -n 200 | sed ':a;N;$!ba;s/\n/,/g'` -r /usr/share/phantomjs/examples/rasterize.js -t 200 -a -v
cp ready.hosts /tmp/ready.hosts; cat /tmp/ready.hosts | sed '1,200d' > ready.hosts
sudo bash ./mass_screen.sh

Сохраните его в файл mass_screen.sh. Запускать так:

sudo bash mass_screen.sh

Поясню некоторые моменты. Главная строка:

timeout 40 sudo flashlight -p vladimir_region -s screen -d `cat ready.hosts | head -n 200 | sed ':a;N;$!ba;s/\n/,/g'` -r /usr/share/phantomjs/examples/rasterize.js -t 200 -a -v

timeout 40 здесь означает сбросить (прекратить работу) программы после истечения 40 секунд. Это связано с тем, что многие хосты хоть и имеют открытый 80 порт, но не имеют ничего нам отправить. Т.е. можно и без этого сброса по таймауту, но программа будет часто «замирать» на таких «бракованных» IP адресах. Собрать тысячи скриншотов за один день не получиться.

Сама запускаемая команда:

flashlight -p vladimir_region -s screen -d `cat ready.hosts | head -n 200 | sed ':a;N;$!ba;s/\n/,/g'` -r /usr/share/phantomjs/examples/rasterize.js -t 200 -a -v

Здесь после ключа -d должен идти список IP. Список формируется на лету:

cat ready.hosts | head -n 200 | sed ':a;N;$!ba;s/\n/,/g

т. е. из файла ready.hosts считываются 200 адресов, которые объединяются, через запятую, в одну строку.

-p vladimir_region — это название проекта (может быть любое название).

-s screen — это режим сканирования.

-r /usr/share/phantomjs/examples/rasterize.js — это расположение файла rasterize.js. Если вы не знаете где у вас, то:

locate rasterize.js

-t 200 — означает сканировать в 200 потоков.

-a — означает предварительный пинг (по моим ощущениям, с этим режимом сканирования данная опция не работает).

-v — добавить вербальности.

Почему таймаут именно 40 секунд, а потоков 200? Цифры подобраны экспериментальным путём. Если установить более короткий таймаут, то программа будет сбрасываться до того, как получит скриншоты (если очень длинный — то это уменьшит количество скриншотов в час времени).

Если устанавливать более 200 потоков, то программа, хотя нигде это и не выводиться, начинает «проглатывать» адреса — просто не получает их скриншоты.

Дальше проще:

cp ready.hosts /tmp/ready.hosts; cat /tmp/ready.hosts | sed '1,200d' > ready.hosts

Мы копируем наш файл с IP во временное расположение, а потом считываем его же обратно за минусом первых 200 строк, которые уже отработали. Т.е. в результате мы вырезаем первые 200 строк.

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

sudo bash ./mass_screen.sh

Это мои скриншоты, которые я собрал для родной области (посмотри на ползунок, их там реально много):

05

Заключение

У программы flashlight есть 3 режима сканирования (мы рассмотрели только один) и 1 режим анализа. Найти подробности о них вы можете на странице программы flashlight в Энциклопедии инструментов для пентестинга.

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

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