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

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

    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 10
    • +2

      Лучше начинать скрипт не


      #!/usr/bin/python

      а


      #!/usr/bin/env python

      Тогда и питон можно будет собрать с sqlite3 и подсунуть через переменную окружения, если надобность возникнет.
      Не очень понятен смысл двойного формата тут, можете пояснить?
      Ну и все урлы лучше вынести как константы в начало файла, но это уже так, мелочи

      • +1
        Спасибо!
        Поправлю при обновлении.
        • +1
          Двойной формат — проглядел.
          Fixed.
        • 0
          Раз уж на то пошло, то лучше ещё python2/python3 сразу указывать, потому что в разных дистрах всё ещё разная дефолтная версия.
          • 0

            В принципе не важно, там как раз весь набор проверок присутствует, проблем не будет

        • +1
          Отличная утилита, спасибо!
          Пользуюсь Vulners каждый день.
          • 0
            Надо добавить возможность искать базу по месту расположения скрипта, а не папки откуда скрипт запускается. Если сделать символическую ссылку на скрипт в /usr/local/bin то при обновлении или попытке получить доступ к базе, он будет пытаться создать/искать базу в /usr/local/bin/getsploit.db.zip. Разумеется ни прав доступа, ни базы там не будет
            • 0
              Упс) Действительно, в таком виде будет беда. Поправлю, спасибо!
              • 0

                Еще желательно в .gitignore добавить *.db так как при создании базы она помечается как новый файл в репозитории

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.