Содержание
- 1 Правила поиска уязвимостей
- 2 Инструменты для поиска уязвимостей
- 2.1 Основа для поиска уязвимостей
- 2.2 Словари
- 2.3 Генерация своих словарей
- 2.4 Сбор информации
- 2.5 Поиск информации на публичных репозиториях
- 2.6 Сканеры портов
- 2.7 Сканеры уязвимостей
- 2.8 Файлы, директории, параметры
- 2.9 Поисковики
- 2.10 Internet Wayback Machine
- 2.11 GitHub
- 2.12 Фреймворки
- 2.13 Комбайны для автоматизации атаки
- 3 Заключение
Не всегда самые дорогие баги, обнаруженные в рамках баг-баунти, — это классика типа XSS/SQL или ошибки логики работы приложения. Утечка логов, доступ к критичным файлам и сервисам без авторизации, сессионные и авторизационные токены, исходные коды и репозитории — все это может быть использовано злоумышленниками для успешных атак, поэтому и платят за такие штуки тоже неплохо. Сегодня расскажу о полезных инструментах инструменты для поиска уязвимостей сайтов.
Еще по теме:
Например, недавно была обнародована утечка авторизационного токена Snapchat для обращения к API. Уязвимость была оценена в 15 000 долларов США, при этом сам багхантер ожидал лишь статуса informative и более скромной награды.
Из своего опыта и опыта коллег могу сказать, что даже за server-status, phpinfo или лог-файлы выплата может достигать 1000 долларов. Хорошо, скажите вы, но ведь искать все это вручную довольно утомительно и малопродуктивно, да и наверняка кто-то другой уже нашел все баги. Представьте себе, далеко не так! Баги встречаются повсеместно, компании обновляют или выкатывают новые сервисы, разработчики забывают отключить журналы отладки или удалить репозитории.
Правила поиска уязвимостей
В первую очередь советую внимательно ознакомиться с правилами программы, в которой вы хотите принять участие: чем больше скоуп, тем шире attack surface и выше возможность что-нибудь найти.
Тем не менее стоит обращать внимание на принадлежность сервисов к тем или иным доменам. Например, программы баг-баунти обычно не охватывают домены, принадлежащие третьей стороне. Впрочем, если есть шанс, что это повлияет на основные сервисы, можете рассчитывать на повышение рейтинга на Hacker1 и денежную компенсацию.
Из российских компаний я бы отметил Mail.Ru Group. Это лояльная команда, которая быстро отвечает и принимает баги. Хотя поставили мне несколько n/a.
Еще один совет начинающим: не стоит выпрашивать деньги у компаний. Объективные баги они оценят по достоинству, опыта у них, скорее всего, гораздо больше, чем у вас.
Инструменты для поиска уязвимостей
Взлом всегда начинается с OSINT или сбора данных о цели. От качества найденной информации зависит успех в поиске бага. В отличие от законного взлома (пентеста), в программе багбаунти могут участвовать тысячи людей, это как вы понимаете, говорит о том, что найти баг не так и просто. В сегодняшней статье я познакомлю вас с лучшими инструментами, которые помогут собрать информацию о цели, прежде чем начинать взлом.
Основа для поиска уязвимостей
Для более эффективного поиска уязвимостей нам необходимо мониторить изменения на периметре компании — это позволит оперативно обнаруживать новые сервисы или новые версии веб-приложений. Также мониторинг может быть полезен, если у вас есть команда — вы сможете обмениваться информацией при совместной охоте.
Serpico
Первое, что нам понадобится, — система хранения и описания багов. В свое время я использовал Dradis, но сейчас предпочитаю Serpico. Эта программа позволяет заносить баги по классификациям и сразу подтягивает их описание. Все это прекрасно кастомизируется и масштабируется для командной работы.
Фреймворк работает в Linux/Win-среде, есть контейнер Docker для развертывания.
Nmap-bootstrap-xsl
Нет, читатель, я не считаю вас мамкиным хакером, который не знает про Nmap. Но мы будем использовать еще и отличный аддон для работы с журналами сканирований nmap-bootstrap-xsl. Он позволяет конвертировать результаты сканирований в HTML с удобным интерфейсом и возможностью выборки. Это бывает очень удобно при сравнении результатов сканирования.
Скачиваем nmap-bootstrap.xsl и запускаем сканирование:
1 2 |
$ nmap -sS -T4 -A -sC -oA scanme --stylesheet https://raw.githubusercontent.com/honze-net/nmap-bootstrap-xsl/master/nmap-bootstrap.xsl scanme.nmap.org $ scanme2.nmap.org |
Далее преобразовываем выхлоп скана в HTML:
1 |
$ xsltproc -o scanme.html nmap-bootstrap.xsl scanme.xml |
Страница Nmap-bootstrap-xsl на GitHub
Sparta
В качестве альтернативы предыдущему аддону можно использовать сканер-комбайн Sparta, который входит в большинство популярных security-дистрибутивов.
Эта утилита — обертка для Nmap, Hydra и других популярных инструментов. С помощью Sparta удобно проводить поверхностную разведку периметра:
- собирать «живые» хосты;
- брутить популярные сервисы, обнаруженные на периметре, такие как FTP и SSH (см. также Как взломать пароль SSH с помощью Hydra);
- собирать веб-приложения и скриншоты.
badKarma
Еще один комбайн для «обстрела» сетевого периметра. Этот инструмент более продвинутый, чем Sparta, и позволяет объединить несколько действий в одном интерфейсе. Хотя badKarma еще «сырой» продукт, тем не менее он активно развивается и есть надежда, что в скором времени мы получим еще один фреймворк.
Имейте в виду, автоматической установки нет и некоторых утилит для работы badKarma в Kali Linux не хватает.
Словари
Перед тем как начинать разведку, стоит запастись пачкой добротных словарей. От выбора хорошего словаря зависит многое: чем больше будет собрано скрытых параметров, поддоменов, директорий и файлов, тем выше шанс обнаружить какую‑нибудь брешь в безопасности.
В интернете можно найти огромное количество словарей, но не все они эффективны. Занимаясь некоторое время багбаунти и попробовав при этом разные словари, я для себя выделил несколько очень интересных вариантов, которые не раз меня выручали и помогали обнаружить места, до которых еще не доходили другие охотники за багами.
fuzz.txt
Я всегда начинаю с fuzz.txt, который содержит список потенциально опасных файлов и директорий. Словарь практически каждый месяц дополняется новыми словами. Проходится быстро, а за счет этого можно скорее начать ковырять находки и параллельно поставить перебирать другие, более объемные списки.
Словарь содержит 4842 слова, но, по опыту, именно он отлично подходит для первоначального исследования веб‑приложения.
SecLists
SecLists — это целая коллекция словарей, которые очень пригодятся не только в багбаунти, но и при пентесте. Словари включают в себя юзернеймы, пароли, параметры URL, поддомены, веб‑шеллы и многое другое.
Я настоятельно рекомендую потратить немного времени на детальное изучение содержимого коллекции.
Assetnote Wordlists
Еще одна классная подборка словарей для обнаружения разного рода контента и поддоменов. Словари генерируются 28-го числа каждого месяца с помощью commonspeak2 и GitHub Actions.
Помимо автоматически сгенерированных подборок, на сайте также есть словари, созданные вручную, с помощью Google BigQuery.
Сайт проекта Assetnote Wordlists
Генерация своих словарей
Частенько приходится генерировать собственные словари. Написать скрипт, конечно, не составит труда, но зачем изобретать велосипед?
Есть много инструментов для генерации словарей, но из всего множества я использую Pydictor. Тулза предлагает большой набор функций, благодаря которым можно создать идеальный словарь практически для любой ситуации.
Помимо этого, Pydictor умеет сравнивать файлы, подсчитывать частоту слов и объединять несколько словарей в один.
Давайте разберем пример. Предположим, мы знаем, что пароль — модифицированная версия слова Password и может содержать:
- вместо а знак @;
- вместо о0;
- в конце от одного до трех чисел.
Генерируется такой словарь с помощью следующей команды:
1 |
./pydictor.py --conf '[P[a,@]{1,1}ssw[o,0]{1,1}rd[0-9]{1,3}' --output /home/kali/Desktop/pydict |
Здесь <none> означает, что утилите не нужно делать никаких дополнительных действий с подстановочной комбинацией.
В конце Pydictor выводит краткую сводку по процессу генерации. Не то чтобы очень важная инфа, но чувствуется забота разработчика.
Сбор информации
Aquatone
Aquatone — это набор инструментов для разведки по доменным именам. С помощью открытых источников он способен обнаружить поддомены на заданном домене, но можно сделать и полный перебор вариантов.
После обнаружения поддоменов Aquatone может просканировать хосты на обычные веб-порты, при этом HTTP-заголовки, HTML-тела и скриншоты собираются и консолидируются в отчет для удобного анализа поверхности атаки.
https://github.com/michenriksen/aquatone
Assetnote
Кто первый встал — того и тапки. Это правило особенно актуально в багхантинге. Утилита Assetnote помогает уведомлять багхантера о появлении новых поддоменов у отслеживаемой цели. Для этого необходимо добавить API-ключ сервиса Pushover.
При нахождении нового поддомена вы получите уведомление на мобильный телефон. После этого нужно со всех ног бежать к компьютеру и искать баги.
https://github.com/tdr130/assetnote
Meg, MegPlus и Smith
Meg — один из лучших инструментов для поиска ценной информации. Он содержит целый набор для поиска. С Meg за небольшой промежуток времени вы сможете исследовать множество доменов и поддоменов в поисках чего-то определенного (например, server-status).
Meg к тому же умеет работать со списком баг-баунти-программ с h1. Советую ознакомиться с видеопрезентацией автора этого замечательного инструмента.
MegPlus & Smith за авторством EdOverflow — это обертки для оригинального Meg.
Meg+ (к сожалению, deprecated) к основному набору функций Meg добавляет следующие возможности поиска и выявления уязвимостей:
- поддомены (с использованием Sublist3r);
- конфиги;
- интересные строки;
- open redirect;
- инъекции CRLF;
- мисконфиги CORS;
- path-based XSS;
- захват доменов и поддоменов.
Утилита Smith позволяет парсить результаты Meg для поиска иголок в стогах разных находок.
https://github.com/tomnomnom/meg
https://github.com/EdOverflow/megplus
https://github.com/EdOverflow/smith
Поиск информации на публичных репозиториях
Зачастую на публичных репозиториях компаний можно найти полезную информацию для получения доступа к тому или иному приложению даже без анализа выложенного кода. Например, выявленный auth-token принес багхантеру 15 000 долларов!
Также хорошей практикой, уже давшей свои плоды, можно назвать парсинг аккаунтов GitHub из профилей LinkedIn сотрудников компаний.
Итак, наша цель — github.com. Если у вас нет учетной записи — заведите. Она поможет как минимум искать по содержимому, а как максимум начнете писать код. Ну или хотя бы форкать.
Github-Hunter
Этот инструмент позволяет автоматизировать поиск по репозиториям GitHub: забиваем ключевики и пейлоады для поиска, почтовый аккаунт и адрес, по которому нужно направить результат. После продолжительного поиска получаем .db с найденными репозиториями, файлами и строками кода, в которых нашлись ключевые слова.
https://github.com/Hell0W0rld0/Github-Hunter
gitleaks
Эта утилита позволяет выявлять критичные данные в конкретном репозитории или у конкретного пользователя. Must have на случай, если знаете, где искать, но не знаете что.
https://github.com/zricethezav/gitleaks
Сканеры портов
Пройтись по всем портам в поисках интересного — милое дело во время багбаунти. Если получится найти никем ранее не исследованное приложение — еще лучше!
При этом не стоит забывать, что даже внешне безобидные порты могут скрывать что‑то не вполне ожидаемое. Я, например, находил HTTP-сервис на 22-м порте: туда даже браузером зайти нельзя, только через curl или wget!
Если скоуп не особенно большой, то для скана подойдет Nmap, который точно не нуждается в представлении.
Но что делать, если хостов очень много? Несмотря на то что Nmap — мощный инструмент, у него есть существенный недостаток — он медленный. Альтернатива, но не конкурент — masscan: он быстрый, но не настолько функциональный, как Nmap. Чтобы сканирование портов было действительно быстрым и эффективным, можно использовать оба сканера вместе. Как? Сейчас покажу!
MassMap
MassMap позволяет просканировать большое количество IP-адресов со скоростью masscan и тщательностью Nmap. MassMap написан на Bash, так что для его использования вам не придется ничего компилировать.
Перед началом сканирования скрипт проверит наличие всего необходимого для работы, а при отсутствии чего‑либо — автоматически доустановит.
Алгоритм прост: сначала с помощью masscan сканируются все 65 535 TCP-портов по переданному списку IP-адресов. После этого Nmap проходится по найденным открытым портам (в том числе с использованием скриптов), выдавая уже расширенную информацию по каждому.
Результат можно сохранить в удобочитаемом формате.
Так как скрипт — это фактически обертка над сканерами, вы можете изменить любые параметры, добавить какие‑то свои тулзы, в общем, творить и улучшать!
Dnmasscan
Dnmasscan — это еще один скрипт на Bash для автоматического резолвинга доменных имен и последующего их сканирования с помощью masscan. Поскольку masscan не принимает доменные имена, скрипт создает файл, в котором записаны IP-адреса доменов.
Сканеры уязвимостей
Иногда на поверхности можно найти банальные веб-уязвимости, которые по тем или иным причинам просочились в прод. Это могут быть XSS, разного рода утечки или раскрытие данных. Кажется, что это фантастика, но в жизни бывает всё.
Вот, например, типичная история: нашелся Heartbleed на одном из продакшен-серверов Mail.Ru: приехал необновленный сервер из ремонта и встал в прод.
Все это можно обнаружить с помощью простейших сканеров веб-уязвимостей, поэтому добавим эти инструменты в наш багхантерский сервачок.
Input Scanner
Этот написанный на PHP фреймворк c веб-интерфейсом позволяет выявлять input-формы и JS-библиотеки в тестируемом веб-приложении.
Например, можно выгрузить из Burp или ZAP список урлов из proxy-history/logger+/etc и прогнать через этот инструмент, предварительно добавив пейлоады.
На выходе получаем список URI, которые можем при помощи intruder профаззить для поиска векторов атаки.
https://github.com/zseano/InputScanner
Parameth
Эта утилита поможет забрутить GET- и POST-запросы к веб-приложению для поиска чего-то скрытого от обычных пауков/краулеров, парсящих явные ссылки в исследуемом приложении.
https://github.com/maK-/parameth
XSStrike
Лютая тулза для поиска разных XSS. Умеет выявлять DOM-based/reflected XSS, краулить веб-приложение, фаззить параметры для байпаса WAF, брутфорсить из файла с пейлоадами, выявлять скрытые параметры и манипулировать значениями HEADER.
XSStrike автоматизирует множество рутинной работы. При грамотной настройке обеспечен отличный результат.
https://github.com/s0md3v/XSStrike
Файлы, директории, параметры
Поддомены и айпишники собраны — самое время начать их исследовать. Тут в основном используются всякого рода брутеры, которые анализируют ответы, чтобы понять, существует ли искомый путь или параметр.
Gobuster
Gobuster — это один из самых мощных и известных инструментов для поиска файлов и директорий на сайтах. Однако, если бы все его способности ограничивались брутом путей и сравнением кодов ответов, вы бы и сами могли накидать такой же на питоне минут за пять, а Gobuster умеет также перебирать поддомены, имена виртуальных хостов на целевом веб‑сервере, а еще открытые хранилища Amazon S3.
GoSpider
GoSpider — это многофункциональный веб‑паук, также написанный на Golang. Утилита умеет парсить robots.txt и sitemap.xml, искать поддомены в ответе и получать ссылки из Internet Wayback Machine.
Еще GoSpider поддерживает параллельный краулинг нескольких сайтов, что очень ускоряет процесс сбора информации.
Поисковики
Первую свою багу, за которую мне заплатили, я обнаружил именно благодаря поисковикам. Бывает, что ни Gobuster, ни GoSpider не дают никаких результатов. Но если тулзы ничего не находят, это еще не означает, что на сайте действительно ничего нет.
В сложных случаях на помощь часто приходят поисковики: достаточно просто вбить в них site:site.com — и поисковый робот вывалит готовый список. Многие файлы и директории никогда не были бы обнаружены, если бы не поисковики.
Важно использовать сразу несколько поисковиков (да, существует не только Google, но и Bing, и Yahoo), потому что каждый может показать разные результаты.
Давайте посмотрим поисковую выдачу для сайта iom.bus.att.com. В Google будет всего два результата.
А теперь тот же самый запрос в Bing.
Как видите, в выдаче уже девять результатов вместо двух. Мораль: не забывайте, что, помимо Google, существуют и другие поисковики.
Arjun
Аrjun умеет находить скрытые параметры запросов для заданных эндпоинтов. Вот некоторые особенности:
- поддерживает запросы GET, POST, POST-JSON, POST-XML;
- экспортирует результаты в Burp Suite, текстовые или JSON-файлы;
- автоматически обрабатывает rate limits и тайм‑ауты.
Internet Wayback Machine
Wayback Machine — это громадный архив веб‑страниц, содержащий более 330 миллиардов сохраненных копий, и все они проиндексированы для удобного поиска. Проект сохраняет исторические версии, благодаря чему вы можете вернуться на много лет назад и посмотреть, как выглядит интересующий вас сайт.
Чем это может быть полезно для охотника за багами? Например, бывает любопытно заглянуть в старые файлы robots.txt. В нем указываются эндпоинты, которые не должны индексировать поисковики, и со временем этот список меняется.
Wayback Machine все это потихоньку архивирует, и старые эндпоинты вполне могут оказаться рабочими, так что было бы преступлением не воспользоваться такой возможностью получить от самих хозяев сайта список заведомо интересных локаций!
Waybackrobots
Waybackrobots — это удобный и очень простой скрипт, который автоматизирует процесс получения старых версий robots.txt. Обязательный параметр у него всего один: -d, он указывает домен, под который нужно копать.
Скачать Waybackrobots с GitHub
wbk.go
У Wayback Machine, среди прочего, есть список всех URL, которые он собирал для домена. Например, вы можете получить список всех урлов, которые машина заархивировала для tesla.com.
Скрипт wbk.go автоматически извлечет урлы, заархивированные в Wayback Machine, для нужного вам домена.
1 |
go run wbk.go tesla.com |
GitHub
GitHub — это отраслевой стандарт для контроля версий и совместной работы над проектом. Миллионы разработчиков несколько раз за один день вносят изменения в код на GitHub, и далеко не всегда они смотрят, что именно загружают. Бывает, что они случайно забывают удалить учетные данные — логины, пароли и самые разные токены.
Вы наверняка не раз сталкивались с Google dorks. В GitHub тоже есть свои дорки, которые можно использовать для поиска вкусных данных, вроде API-ключей.
gdorklinks.sh
Простой скрипт, который генерирует ссылки поиска по GitHub с дорками. В качестве параметра необходимо указать имя или сайт компании. На выходе получаем готовые ссылки, которые просто необходимо вставить в браузер и изучить полученную информацию.
Скачать gdorklinks.sh с GitHub Gist
GirDorker
GitDorker не просто генерирует ссылки, а сразу ищет информацию, используя GitHub Search API и обширный список дорков, которых на данный момент 513. Этот инструмент можно назвать более продвинутым вариантом предыдущего скрипта.
Для работы потребуется завести GitHub Personal Access Token, а лучше минимум два таких токена. Это связано с тем, что поисковый API ограничен 30 запросами в минуту: если токен всего один, очень быстро упремся в лимиты.
Фреймворки
Когда долгое время занимаешься багбаунти или пентестом, разведка начинает превращаться в рутину. Тут невольно задумаешься об автоматизации. Ниже мы поговорим о фреймворках, которые практически полностью автоматизируют разведку.
Sudomy
Sudomy — это без преувеличения мощный Bash-скрипт. Он включает в себя множество инструментов для анализа, перебора, поиска поддоменов. Сбор информации может делать пассивно или активно.
Для активного метода скрипт использует gobuster из‑за его высокой скорости брутфорса. При бруте поддоменов применяется словарь из SecLists (Discover/DNS), который содержит около трех миллионов записей.
В пассивном методе информация собирается из 22 источников, в том числе Censys, SpySe, DNSdumpster и VirusTotal.
Чтобы полностью разобрать Sudomy, понадобится еще одна статья, поэтому я просто скажу, что он умеет:
- проверяет, возможно ли легко захватить поддомен;
- идентифицирует технологии, используемые сайтом;
- обнаруживает порты, урлы, заголовки, длину содержимого, код состояния HTTP;
- проверяет принадлежность IP к Cloudflare;
- может отправлять уведомления в Slack;
- сканирует порты с собранных IP-адресов, поддоменов, виртуальных хостов.
Для примера давайте просто запустим скрипт с параметрами --all (запустить все перечисления) и --html (сформировать отчет в HTML).
Посмотрим, что он найдет, например, для hackerone.com.
Практически всю найденную информацию можно посмотреть в сгенерированном скриптом отчете с хорошей структурой и очень дружелюбным интерфейсом.
Reconftw
Reconftw — это очень большой скрипт, который автоматизирует буквально все: от разведки до поиска уязвимостей. Он вобрал в себя лучшие тулзы, которыми пользуются охотники за багами, включая описанные в статье.
Вот лишь малая часть того, что он умеет:
- искать URL на сайте;
- собирать информацию о поддоменах;
- искать открытые бакеты S3 и дампить их содержимое;
- проверять наличие XSS, SSRF, CRLF, LFI, SQLi и других уязвимостей;
- проверять, есть ли на сайте WAF;
- отправлять оповещения в Slack, Discord и Telegram;
- искать параметры URL.
https://github.com/six2dez/reconftw
Комбайны для автоматизации атаки
Напоследок — два убер-комбайна, в которые входит множество инструментов для автоматизированного выявления и атаки целей, начиная от DNS-рекона, скана поддоменов и заканчивая выявлением веб-уязвимостей, обходом WAF и брутфорсом всего, что только возможно.
Но хочу сразу предупредить, что бездумное использование таких монстров — это как обезьяна с пулеметом.
Sn1per
Комбайн авторства небезызвестного 1N3 — автора BruteX, BlackWidow, Findsploit и собирателя огромного количества пейлоадов для Intruder Burp Suite. Существует в виде Community Edition (free) и версии Pro.
Что умеет:
- автоматический базовый сбор информации (например, whois, ping, DNS);
- автоматический запуск Google hacking запросов против заданного домена;
- автоматическое перечисление открытых портов;
- автоматический перебор поддоменов и информации о DNS;
- автоматический запуск скриптов Nmap на определенные открытые порты;
- автоматическое сканирование веб-приложений на базовые уязвимости;
- автоматический перебор всех открытых сервисов.
Sn1per при установке на обычный дистрибутив вроде Debian скачивает больше гигабайта дополнительных утилит. И даже в Kali, где многое из нужных вещей уже есть, инсталляция занимает немало времени.
Sn1per может работать в нескольких режимах — от OSSINT/RECON до ковровых бомбардировок целей в режиме Airstrike/Nuke (наподобие HailMary в Armitage).
TIDoS Framework
TIDoS Framework — это комплексная среда аудита веб-приложений. Очень гибкий фреймворк, где вам достаточно выбрать и использовать модули типа Metasploit. Имеет на борту множество модулей — от разведки и сбора информации до эксплуатации веб-уязвимостей.
TIDoS имеет пять основных фаз, разделенных на 14 подфаз, которые, в свою очередь, состоят из 108 модулей.
Инструмент очень навороченный, требует тюнинга перед использованием.
https://github.com/theInfectedDrake/TIDoS-Framework
Заключение
Автоматизация — это хорошо, но голову тоже необходимо включать. Максимальную отдачу даст вдумчивое использование утилит, кастомизированная подборка словарей и фазз-листов для поиска, а также систематизированный подход к поиску багов. И результат не заставит себя ждать.
Естественно, в статье рассмотрены далеко не все инструменты для рекона. Эти, на мой взгляд, самые годные из тех, с которыми работаю я, но у вас могут быть лучшие инструменты. Если вам этого мало — загляните в репозитории KingOfBugbounty и nahamsec.
Не стесняйтесь делиться опытом в комментариях, а если готовы написать целую статью, то вы знаете, что делать! Удачной охоты и богатых трофеев!
Во время чтения в башке крутилась одна фраза: За Вами уже выехали ;)
Хорошая подборка. Спасибо!
Классная подборка. Спасибо.