Создание инструмента для анализа уязвимостей в веб-сайтах на языке Ruby — это отличный способ повысить безопасность ваших приложений. В статье представлен пример простого скрипта на Ruby, который проверяет веб-сайт на наличие уязвимостей типа SQL-инъекции и XSS, а также интегрируется с базой данных CVE для получения информации о известных уязвимостях.
Шаг 1: Установка необходимых библиотек
Для начала установим необходимые библиотеки:
1 2 3 |
gem install mechanize gem install nokogiri gem install json |
- Mechanize — для автоматизации взаимодействия с веб-сайтами.
- Nokogiri — для парсинга HTML.
- JSON — для работы с данными в формате JSON.
Шаг 2: Получение данных из CVE
Для интеграции с CVE можно использовать CVE API или NVD API. В данном примере мы будем использовать NVD API, чтобы получать последние CVE-данные.
Создайте файл cve_fetcher.rb
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
require 'net/http' require 'uri' require 'json' class CVEFetcher NVD_API_URL = 'https://services.nvd.nist.gov/rest/json/cves/1.0/' def fetch_cves(keyword) uri = URI("#{NVD_API_URL}?keyword=#{URI.encode(keyword)}") response = Net::HTTP.get(uri) data = JSON.parse(response) data['result']['CVE_Items'] rescue StandardError => e puts "Ошибка при получении CVE: #{e.message}" [] end end |
Этот класс позволяет получать список CVE на основе ключевых слов.
Шаг 3: Создание основного скрипта для сканирования
Создайте файл vulnerability_scanner.rb
и добавьте следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
require 'mechanize' require 'nokogiri' require 'json' require_relative 'cve_fetcher' class VulnerabilityScanner def initialize(url) @url = url @agent = Mechanize.new @cve_fetcher = CVEFetcher.new end def scan puts "Сканирование #{@url} на наличие уязвимостей..." forms = @agent.get(@url).forms forms.each do |form| test_forms(form) end puts "Сканирование завершено." end private def test_forms(form) # Тест SQL-инъекции sql_payload = "' OR '1'='1" form.fields.each do |field| original_value = field.value form[field.name] = sql_payload end begin response = form.submit if response.body.include?("syntax error") || response.body.include?("sql") puts "Возможная уязвимость SQL-инъекции на форме: #{form}" end rescue # Игнорируем ошибки при запросах end # Тест XSS xss_payload = "<script>alert('XSS')</script>" form.fields.each do |field| form[field.name] = xss_payload end begin response = form.submit if response.body.include?(xss_payload) puts "Возможная уязвимость XSS на форме: #{form}" end rescue # Игнорируем ошибки при запросах end # Встроенная проверка с CVE check_with_cve(form) end def check_with_cve(form) # Пример: Проверка на известные уязвимости в используемых технологиях # Допустим, сайт использует определенную версию библиотеки technologies = ["jquery", "rails", "php"] # Пример technologies.each do |tech| cves = @cve_fetcher.fetch_cves(tech) unless cves.empty? puts "Найдены CVE для #{tech}:" cves.each do |cve| puts "#{cve['cve']['CVE_data_meta']['ID']}: #{cve['cve']['description']['description_data'].first['value']}" end end end end end # Пример использования if __FILE__ == $0 if ARGV.length != 1 puts "Использование: ruby vulnerability_scanner.rb <URL>" exit end scanner = VulnerabilityScanner.new(ARGV[0]) scanner.scan end |
Шаг 4: Использование скрипта
Запустите скрипт из командной строки, передав URL веб-сайта, который вы хотите проверить:
1 |
ruby vulnerability_scanner.rb http://example.com<code> |
Важные замечания
- Этическое использование: Убедитесь, что у вас есть разрешение на сканирование веб-сайтов на уязвимости. Несанкционированное сканирование может быть незаконным и рассматриваться как атака.
- Ограничения скрипта: Представленный скрипт является упрощенным примером и не покрывает всех возможных уязвимостей.
- Обработка CVE: Интеграция с базой данных CVE в данном примере выполнена упрощенно. Для более точного соответствия уязвимостей необходимо анализировать используемые технологии и их версии, а также сопоставлять их с CVE.
- Повышение надежности: Для повышения точности и надежности сканера рекомендуется реализовать дополнительные проверки, обработку ошибок, логирование и поддержку различных типов уязвимостей.
Дополнительные ресурсы
Используя данный скрипт как отправную точку, вы можете расширять его функциональность, добавляя поддержку других типов уязвимостей, улучшая интеграцию с базами данных уязвимостей и оптимизируя процессы сканирования.