Pull to refresh

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

Reading time 3 min
Views 15K

Когда я думал над дальнейшим вектором развития 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'ы крайне приветствуются.

Tags:
Hubs:
+13
Comments 10
Comments Comments 10

Articles