Технологии безопасности

Сайт посвященный вопросам безопасности

Getsploit: поиск и загрузка эксплойтов по агрегированной базе данных

(adsbygoogle = window.adsbygoogle || []).push({});

Когда я думал над дальнейшим вектором развития Vulners, я обратил внимание на наших старших братьев — базу данных Exploit-DB. Одной из основных утилит в их арсенале является searchsploit. Это консольная утилита, которая позволяет искать эксплойты по пользовательским поисковым запросам и сразу же получать их исходные коды. Она является базовой частью Kali Linux и оперирует данными по эксплойтам из базы Exploit-DB. Что самое «вкусное», что утилита умеет работать с локальной базой и ты можешь всегда взять ее с собой. Так чем же мы хуже? Мы собрали в Vulners не только коллекцию эксплойтов из Exploit-DB, но и Packet Storm, 0day.today, Seebug, Zero Science Lab и многих других. Что же, давайте изобретем новый велосипед с преферансом и поэтессами.

Смотрим внимательнее на searchsploit

И видим внутри bash скрипт длиною 711 строчек. Он скачивает с публичного репозитария exploit-database копию данных и ищет уже по ней. Но где же Google-style синтаксис и прочие прелести современного поиска? Увы, в их подходе нашлись и плюсы и минусы. Плюсы оказались в том, что они способны находить эксплойты по критериям применимости. Минусы — довольно бедный функционал для неточного поиска. На этом идея интегрироваться с ним была отброшена и решение писать свой форк стала доминирующей.

Что должен делать getsploit?

Начнем с того, что определимся с функциональностью.

Поиск эксплойтов по всей коллекции Vulners с применением Full Text Search и Lucene
Сохранение исходных кодов эксплойтов на диск
Offline-поиск с локальной базой данных
Кроссплатформенность и минимум зависимостей
Быть Open source

Let there be code

В итоге утилита была реализована на Python с совместимостью от Python 2.6 до Python 3.6. Основные ключи я постарался сохранить идентичными searchsploit для того, что бы не приходилось привыкать заново.

isox$ git clone https://github.com/vulnersCom/getsploit
isox$ cd getsploit
isox$ ./getsploit.py -h
usage: Exploit search and download utility [-h] [-t] [-j] [-m] [-c COUNT] [-l]
[-u]
[query [query …]]

positional arguments:
query Exploit search query. See https://vulners.com/help for
the detailed manual.

optional arguments:
-h, —help show this help message and exit
-t, —title Search JUST the exploit title (Default is description
and source code).
-j, —json Show result in JSON format.
-m, —mirror Mirror (aka copies) search result exploit files to the
subdirectory with your search query name.
-c COUNT, —count COUNT
Search limit. Default 10.
-l, —local Perform search in the local database instead of
searching online.
-u, —update Update getsploit.db database. Will be downloaded in
the script path.

Основная механика поиска строится на базе Vulners API. Таким образом вы всегда получите актуальные данные на момент «здесь и сейчас». Что же, поищем эксплойты под WordPress?

Довольно неплохо, да? Попробуем теперь ограничить нас только коллекцией Packet Storm. Синтаксис выражений полностью совпадает с поисковой строкой сайта и его можно подглядеть на страничке help.

Так, нужные нам эксплойты найдены. Теперь их нужно сохранить для последующего использования. Для этого нужно использовать ключик «-m». После этого утилита создаст папку с вашим поиском и загрузит эксплойты туда.

Но что же делать, если у нас нет онлайн подключения к интернету? Вспомнить об этом пока он еще доступен и сделать «—update»!

isox$ ./getsploit.py —update
Downloading getsploit database archive. Please wait, it may take time. Usually around 5-10 minutes.
219686398/219686398 [100.00%]
Unpacking database.
Database download complete. Now you may search exploits using —local key ‘./getsploit.py -l wordpress 4.7’

При таком запросе getsploit скачает SQLite базу данных со всей коллекцией эксплойтов. Это порядка 594 мегабайт данных на момент написания статьи.

Обратите внимание, что если у вас Python скомпилирован без поддержки sqlite3 (что в принципе редкость), то локальная база, увы, работать не будет.

Здесь пришлось пожертвовать совместимостью ради скорости работы и возможности полнотекстового поиска с FTS4 модулем SQLite.

Но все не так плохо, основная масса сборок Python по умолчанию идет с модулем sqlite3. Попробуем найти эксплойты локально?

Отлично! Теперь можно взять с собой всю коллекцию эксплойтов с Vulners и использовать ее в оффлайне без регистрации и смс.

Ну и конечно же, исходные коды лежат на нашем GitHub.
Pull-request’ы крайне приветствуются.