• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Статья Автоматизация для хакера: как ускорить рутинные задачи пентеста своими скриптами

Человек в тёмном худи сидит перед несколькими мониторами с кодом – автоматизация задач пентеста


Пентест — это не просто покликать по клавишам и почувствовать себя хакером из голливудских фильмов. Это серьёзная работа, где куча времени уходит на рутину: сканирование сетей, перебор паролей, анализ веб-приложений или копание в открытых данных (OSINT). Эти задачи, хоть и важные, порой доводят до белого каления, потому что отнимают часы, которые можно было бы потратить на что-то поинтереснее. Вот тут-то и приходит на помощь автоматизация: скрипты и утилиты помогают скинуть с плеч этот груз и сосредоточиться на главном — анализе и креативе.

В этой статье мы разберём, как автоматизировать основные задачи пентеста: от проведения сканирования до составления отчётов. Будут примеры кода на Python, примеры команд для таких крутых штук, как Nuclei, Hydra и Amass, плюс немного про CI/CD. Но сразу предупреждаю: все скрипты и команды тут — чисто для примера, чтобы ты понял идею. Для реального пентеста их надо серьёзно дорабатывать. И, само собой, без письменного разрешения владельца системы даже не думай их запускать — это может быть незаконно и точно не этично. Законы вроде 272–274 УК РФ в России, американский Computer Fraud and Abuse Act (CFAA) в части запрета несанкционированного доступа, или европейские законы о кибербезопасности, такие как Директива NIS и национальные законы стран ЕС, так что давай играть по правилам.

Почему автоматизация — это твой лучший друг?​

Пентест — это когда ты часами проверяешь порты, тестируешь пароли или роешься в конфигах серверов. Если делаешь всё руками, можно свихнуться, особенно если сеть огромная или веб-приложение сложное. Автоматизация — это как верный напарник, который берёт на себя всю нудятину:
  • Экономит время: Скрипты и утилиты шпарят быстрее, чем ты с кофе в руке.
  • Меньше косяков: Автоматика не ошибается из-за невнимательности.
  • Масштабируется на ура: Хочешь прогнать тысячу IP или URL? Легко!
  • Даёт простор для мышления: Пока скрипты работают, ты анализируешь и придумываешь, как обойти защиту.
Но не думай, что автоматизация — это волшебная кнопка «сделать всё круто». Без ручного анализа ты можешь упустить что-то важное, особенно если уязвимость хитрая. Плюс, есть этические правила, которые лучше не нарушать:
  • Разрешение — must have: Не выходи за рамки области тестирования. Без письменного согласия (scope of engagement) — ни шагу.
  • Не грузи сервера: Настраивай инструменты, чтобы не устроить случайно DDoS.
  • Знай законы: В России — ст. 272–274 УК РФ, в США — CFAA, в ЕС — законы о кибербезопасности (Директива NIS) Не вляпайся.
Пример scope of engagement:
  • Цель: example.com
  • Что можно: Сканирование, перебор паролей (с лимитами)
  • Что нельзя: DDoS, социальная инженерия
  • Сроки: 01/06/2025 – 30/06/2025
  • Контакт: security@example.com

Автоматизация сканирования уязвимостей с Python​

Сканирование — это первый шаг разведки: надо понять, где слабые места. Проводить её руками — всё равно что искать иголку в стоге сена, особенно если целей сотни. Python тут как палочка-выручалочка: гибкий, с кучей библиотек и понятный даже новичкам.

Пример: Параллельное сканирование веб-ресурсов​

Вот демонстрационный скрипт, который прогоняет URL-ы, проверяя заголовки и содержимое на уязвимости. Это только пример, для реального пентеста его надо серьёзно доработать.
Python:
import requests
import ssl
import logging
from concurrent.futures import ThreadPoolExecutor
from urllib.parse import urljoin

# Настройка логов, чтобы не теряться в куче инфы
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def scan_vulnerability(url):
    """
    Проверяет URL на уязвимости, смотрит заголовки и содержимое.
    """
    try:
        session = requests.Session()
        session.verify = True  # SSL — это важно
        response = session.get(
            url,
            timeout=5,
            headers={'User-Agent': 'Mozilla/5.0'},
            proxies={'http': 'http://proxy:8080', 'https': 'http://proxy:8080'}  # Прокси для анонимности
        )
        # Проверяем заголовки на старое ПО
        server = response.headers.get('Server', '')
        x_powered_by = response.headers.get('X-Powered-By', '')
        if 'PHP/7.4' in x_powered_by or 'Apache/2.4.41' in server:
            logging.warning(f"Старенькое ПО на {url}: {server}, {x_powered_by}")
 
        # Ищем XSS
        if '<script>alert(' in response.text.lower():
            logging.warning(f"Похоже на XSS на {url}")
 
        logging.info(f"Прогнал {url} - Статус: {response.status_code}")
    except requests.RequestException as e:
        logging.error(f"Ошибка на {url}: {e}")

def run_scanning(urls, max_workers=10):
    """
    Запускает сканирование пачкой URL-ов.
    """
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        executor.map(scan_vulnerability, urls)

if __name__ == "__main__":
    urls_to_scan = ["https://example1.com", "https://example2.com", "https://example3.com"]
    run_scanning(urls_to_scan)

Что тут происходит:​

  • Логи: Всё записывается, чтобы сохранить важную информацию для анализа и отчётности.
  • Обработка ошибок: Если сервер не отвечает или что-то пошло не так, скрипт не крашится.
  • Многопоточность: Много URL-ов проверяются в рамках одного процесса — экономия времени.
  • Прокси и SSL: Для безопасности и обхода блокировок.

Советы, по настройке:​

  • Добавь BeautifulSoup для парсинга HTML — найдёшь больше сигнатур.
  • Подключи API базы CVE (например, NVD), чтобы проверять версии ПО.
  • Проверяй редиректы и WAF, чтобы не попасть в бан.
Если вы хотите научиться автоматизировать сбор данных с помощью Python и работать с различными библиотеками для парсинга и анализа, вам поможет курс "Python для Пентестера", который предоставит все необходимые знания и навыки для работы с Python в области информационной безопасности.

Автоматизация перебора паролей с утилитами​

Перебор паролей (brute-forcing) — важный инструмент для пентеста, проверяющий устойчивость учетных данных. Утилиты, такие как Hydra, Patator или Medusa, автоматизируют процесс, но требуют осторожности, чтобы не перегрузить сервер. Все команды — демонстрационные, для реального использования их нужно доработать. Используйте инструменты только с письменного разрешения владельца системы, чтобы не нарушить закон.

Инструмент

Плюсы​

Минусы​

Когда использовать​

HydraМного протоколов, быстрыйМожет зафлудить серверДля слабых паролей
PatatorГибкий, модульныйНе для новичковСложные сценарии
MedusaПростая, параллельнаяМеньше протоколовБыстрые тесты

1. Hydra — это один из самых популярных и мощных инструментов для перебора паролей. Он поддерживает более 50 различных сервисов и протоколов, включая SSH, FTP, HTTP, RDP и многие другие. Hydra позволяет легко и быстро перебрать пароли с использованием списка или словаря, а также предоставляет поддержку многопоточности для ускорения процесса.

Пример использования Hydra для перебора паролей через SSH:
Bash:
hydra -l root -P /path/to/passwords.txt -t 4 ssh://192.168.1.1
Что делает эта команда:
  • -l admin: указывает имя пользователя (или используйте -L для списка пользователей).
  • -P /path/to/passwords.txt: файл с паролями для перебора.
  • -t 4: количество потоков (параллельных попыток).
  • -w 1: задержка в 1 секунду между попытками.
  • ssh://192.168.1.1: цель — в данном случае IP-адрес сервера через SSH.
Советы:
  • Используйте прокси-серверы или VPN для скрытия своей личности.
  • Настройте ограничения по скорости и параметры таймаута, чтобы избежать блокировки со стороны цели.
  • Если у вас есть список пользователей, используйте -L для подбора паролей для всех пользователей.
2. Medusa — это еще одна мощная утилита для перебора паролей, похожая на Hydra, но с акцентом на простоту и параллельность. Medusa поддерживает такие сервисы, как HTTP, FTP, MySQL, SSH и другие. Она предоставляет множество настроек, позволяя адаптировать процесс перебора под разные сценарии.

Пример использования Medusa для перебора паролей через FTP:​

Bash:
medusa -h 192.168.1.1 -u admin -P /path/to/passwords.txt -M ftp
Что делает эта команда:
  • -h 192.168.1.1: IP-адрес хоста.
  • -u admin: имя пользователя.
  • -P /path/to/passwords.txt: путь к файлу с паролями.
  • -M ftp: указывает, что перебор будет производиться для FTP.
Советы:
  • Используйте прокси: Настройте прокси (-x в Hydra) для анонимизации и обхода возможных блокировок по IP.
  • Ограничивайте нагрузку: Установите низкое количество потоков (-t 2 или 4) и тестируйте небольшими партиями, чтобы минимизировать риск перегрузки сервера.
  • Проверяйте ограничения на сервере:Перед началом перебора убедитесь, что вы понимаете лимиты целевой системы:
  • Сканирование портов: Используйте nmap для проверки открытых портов и анализа ответов сервера. Например:
Bash:
nmap -p 22 192.168.1.1 --script ssh-auth-methods
  • Это покажет доступные методы аутентификации и может намекнуть на наличие защиты, вроде fail2ban.
  • Тестовые запросы: Отправьте несколько пробных попыток входа вручную или с помощью Hydra с минимальным словарем (например, 5–10 паролей) и отслеживайте ответы сервера (ошибки, таймауты, коды 429 или 403). Например:
Bash:
hydra -l root -P tiny_list.txt -t 1 ssh://192.168.1.1
  • Анализ логов: Если у вас есть доступ к документации или логам сервера (в рамках scope of engagement), проверьте настройки, такие как лимиты подключений или блокировка после N неудачных попыток.
  • Связь с владельцем системы: Уточните у клиента, есть ли системы защиты, такие как WAF, IDS/IPS или rate-limiting, чтобы адаптировать настройки перебора.
3. Patator — это универсальная утилита для перебора паролей с поддержкой различных сервисов, таких как HTTP, FTP, SSH, и других. Она более гибкая, чем Hydra и Medusa, и предлагает множество полезных опций для автоматизации атак.

Пример использования Patator для перебора паролей на HTTP-сервере:​

Bash:
patator http_fuzz url=https://example.com/login method=POST body="username=admin&password=^PASS^" 0=^passwords.txt
Что делает эта команда:
  • http_fuzz: указывает, что будет проводиться атака на HTTP-сервер.
  • url=https://example.com/login: адрес целевого сервера.
  • method=POST: метод отправки данных (POST-запрос).
  • body="username=admin&amp;password=^PASS^": данные для формы авторизации, где ^PASS^ — это переменная для подставляемых паролей.
  • 0=^passwords.txt: список паролей для подбора.

Создание эффективного словаря паролей​


ИнструментРольПреимуществаНедостаткиРекомендации
CrunchГенерация словарейПолный контроль над шаблонамиБольшие файлыДля известных форматов паролей
CeWLГенерация словарейРелевантные слова с сайтаОграничен контентом сайтаДля контекстных словарей
John the RipperМутация словарейЭффективные правила мутацииТребует базового спискаДля создания вариаций паролей

Качество словаря определяет успех перебора. Целенаправленные словари, учитывающие контекст цели (имена, термины компании), эффективнее общих списков вроде RockYou.

Инструмент 1: Crunch — генерация паролей по шаблонам​

Crunch создаёт словари на основе заданных символов или шаблонов.
Bash:
crunch 6 8 0123456789abcdef -o passwords.txt
Объяснение: Генерирует пароли длиной 6–8 символов из шестнадцатеричных символов.
Когда использовать: Если известен формат пароля (например, PIN или «имя + цифры»). Для шаблонов используйте -t:
Bash:
crunch 6 6 -t @@@@@% -o custom.txt
Где @ — буквы, % — цифры (например, «admin23»).

Инструмент 2: CeWL — сбор слов с сайта​

CeWL извлекает слова с веб-сайта для создания словаря.
Bash:
cewl -d 2 -m 5 -w custom_wordlist.txt https://example.com
Объяснение: Собирает слова длиной от 5 символов с глубиной обхода 2.
Когда использовать: Для паролей, связанных с контентом сайта (например, «Company2025»).

Инструмент 3: Фильтрация готовых словарей​

Готовые словари (RockYou, SecLists) можно оптимизировать с помощью grep:
Bash:
grep -E '^.{8,12}$' rockyou.txt > filtered_rockyou.txt
Команда ищет все строки в файле rockyou.txt, длина которых от 8 до 12 символов, и сохраняет их в filtered_rockyou.txt.
Добавьте контекст (например, год):
Bash:
awk '{print $0 "2025"}' filtered_rockyou.txt > custom_2025.txt

Инструмент 4: Мутации с John the Ripper​

John the Ripper создаёт вариации паролей (например, «password» → «p@ssw0rd»).
Bash:
john --wordlist=base_wordlist.txt --rules --stdout > mutated_wordlist.txt
Когда использовать: Для учёта пользовательских привычек (замена букв на цифры, добавление символов).

Советы:​

  • Анализируйте цель: Используйте OSINT (например, Maltego) для сбора имён, дат или терминов.
  • Оптимизируйте размер: Удаляйте дубликаты с помощью sort | uniq.
  • Этичность: Проводите перебор в рамках scope of engagement, минимизируйте нагрузку.
Пример интеграции с Hydra:
Bash:
hydra -l admin -P clean_wordlist.txt -t 2 -w 2 ssh://192.168.1.1

Советы по перебору​

  • Используйте прокси (-x) для анонимизации.
  • Ограничивайте нагрузку (-t, -w) для избежания блокировок.
  • Проверяйте легальность: перебор без разрешения незаконен.

Автоматизация анализа веб-приложений​

Веб-приложения — это как магнит для пентесеров: XSS, SQL-инъекции, кривые конфиги. Инструменты вроде Nuclei, OWASP ZAP или sqlmap помогают быстро найти дырки.

Пример: Nuclei для сканирования​

Bash:
nuclei -u https://example.com -t cves/ -o report.txt
Пользовательский шаблон для Nuclei:
YAML:
id: custom-xss-check
info:
  name: Detect Reflected XSS
  severity: medium
requests:
  - method: GET
    path:
      - "{{BaseURL}}/search?q=<script>alert(1)</script>"
    matchers:
      - type: word
        words:
          - "<script>alert(1)</script>"
        part: body
CI/CD для автоматизации:
Bash:
name: Run Nuclei Scan
on: [push]
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run Nuclei
        run: nuclei -u https://example.com -t cves/ -o report.txt

Советы:​

  • Юзай OWASP ZAP с API для активного сканирования.
  • Фильтруй ложные срабатывания в Nuclei.
  • Интегрируй с CI/CD для регулярных проверок.
В статье "Открытый код: сканеры уязвимостей" рассматриваются лучшие open-source решения для автоматического сканирования уязвимостей, которые могут значительно упростить работу пентестера. Эти инструменты подходят для быстрого и эффективного поиска слабых мест в системах и могут быть адаптированы под конкретные задачи, ускоряя процесс тестирования безопасности.

Автоматизация сбора OSINT​

OSINT — это как детективная работа: собираешь информацию из открытых источников. Amass или Maltego делают это быстрее, чем ты в браузере.

Сбор информации вручную — это крайне трудоемкая и долгая задача. Использование инструментов и скриптов для автоматизации процесса сбора данных позволяет значительно ускорить работу, минимизируя человеческий фактор и снижая шанс на пропуск важной информации.

Пример: Amass для разведки​

Amass — это мощный инструмент для сбора информации о доменах, сетях и связанных с ними сущностях. Он может находить субдомены, а также извлекать информацию из различных публичных источников, таких как базы данных, журналы WHOIS, поисковые системы и другие. В отличие от других утилит, Amass может эффективно работать с огромными объемами данных и поддерживает различные методы поиска.

Пример команды для использования Amass:
Bash:
amass enum -d example.com -o domains.txt
Что делает эта команда:
  • enum: режим сбора информации.
  • -d example.com: указывает домен, для которого нужно собрать данные.
  • -o domains.txt: выводит результат в файл domains.txt.

Пример: Использование Maltego для визуализации связей​

Maltego — мощный инструмент для визуализации связей между сущностями (домены, IP, email и т.д.). Пример сценария работы:
  1. Установите Maltego (доступен в бесплатной версии Community Edition).
  2. Создайте новый проект и добавьте сущность, например, домен example.com.
  3. Примените трансформеры (преобразователи) для сбора данных:
    • Запустите трансформер To DNS Name - Subdomains (из набора Domain Tools) для поиска поддоменов.
    • Используйте To IP Address (из Infrastructure) для получения IP-адресов, связанных с доменом и поддоменами.
    • Примените To Email Addresses (из OSINT) для поиска email, связанных с доменом.
    • Добавьте To WHOIS Info (из Domain Tools) для получения регистрационных данных.
    • Используйте To Social Media (из Social Links) для поиска связанных профилей в LinkedIn или Twitter.
  4. Постройте граф, где отображаются связи между доменом, поддоменами, IP, email, WHOIS-данными и социальными профилями. Используйте функцию «Layout» для упорядочивания графа (например, Organic Layout).
  5. Экспортируйте результаты в CSV или PDF для отчёта (File → Export Graph).
Пример запроса в Maltego:
  • Начальная сущность: example.com
  • Трансформеры:
    • To DNS Name - Subdomains → находит sub1.example.com, sub2.example.com.
    • To IP Address → получает 192.168.1.10 для sub1.example.com.
    • To WHOIS Info → возвращает регистратора и дату регистрации.
    • To Email Addresses → находит admin@example.com.
    • To Social Media → обнаруживает LinkedIn-профиль, связанный с admin@example.com.
Пример вывода (граф в Maltego):
  • Доменная сущность: example.com
    • Поддомены: sub1.example.com, sub2.example.com
    • IP-адреса: 192.168.1.10 (геолокация: США), 192.168.1.11
    • WHOIS: Регистратор GoDaddy, дата регистрации 2020-01-15, контакт admin@example.com
    • Email: admin@example.com
    • Социальный профиль: LinkedIn-аккаунт «John Doe», Twitter-аккаунт @example_admin
    • Связь: IP 192.168.1.10 хостится у провайдера Example ISP
Maltego создаёт визуальную карту, которая помогает выявить уязвимости, такие как незащищённые поддомены, утечки данных через email или слабые конфигурации серверов. Эти данные можно использовать для углублённого анализа в рамках пентеста.

Organic layout

Organic Layout

List View

List View

Пример: Сбор информации с помощью Python​

Автоматизация сбора данных с использованием Python даёт гибкость и возможности для интеграции с другими инструментами. Наиболее часто используемые библиотеки для сбора OSINT данных:
  • requests — используется для отправки HTTP-запросов и получения ответов от веб-серверов.
  • BeautifulSoup — для парсинга HTML-страниц.
  • shodan — Shodan — инструмент для поиска информации о публичных устройствах в интернете (серверы, IoT-устройства). Требуется API-ключ для отправки запросов и получения данных через API.
Пример сбора данных о доменах с использованием Python:
Python:
import requests

def get_subdomains(domain):
    """
    Извлекает поддомены для указанного домена через crt.sh.
    """
    url = f"https://crt.sh/?q=%25.{domain}&output=json"
    try:
        response = requests.get(url, timeout=10)
        response.raise_for_status()  # Проверка на ошибки HTTP
        data = response.json()
        subdomains = [entry['name_value'] for entry in data]
        return subdomains
    except requests.RequestException as e:
        print(f"Ошибка при запросе: {e}")
        return []

if __name__ == "__main__":
    domain = "example.com"
    subdomains = get_subdomains(domain)
    print(f"Найденные поддомены: {subdomains}")
Этот скрипт извлекает все субдомены для заданного домена через сервис crt.sh, который собирает публичные записи сертификатов SSL.

Пример: Работа с базой данных WHOIS​

Важным элементом OSINT является работа с WHOIS данными, которые позволяют получить информацию о владельцах доменов и их контактные данные. В Python можно использовать библиотеку whois для автоматизации этого процесса.

Пример использования whois для получения данных:
Bash:
import whois

domain = "example.com"
whois_data = whois.whois(domain)

print(whois_data)
Этот скрипт выводит информацию о владельце домена, дате регистрации и других метках, которые могут быть полезны для дальнейшего анализа.
Объяснение:
  • Используется библиотека python-whois (устанавливается через pip install python-whois) для получения WHOIS-данных о домене, таких как регистратор, даты регистрации и контакты.
  • Добавлена обработка ошибок для устойчивости скрипта.

Советы:​

  1. Использование API: Множество сервисов, таких как Shodan или Censys, предлагают API для автоматизированного сбора информации о публичных устройствах и IP-адресах. Используйте их для интеграции в свои скрипты.
  2. Не забывай про конфиденциальность: При сборе данных с открытых источников всегда учитывайте юридические аспекты.
  3. Интеграция с CI/CD: Если вы хотите, чтобы процесс сбора данных и анализа был автоматизирован на постоянной основе, интегрируйте эти инструменты в процессы CI/CD, как это делается для сканирования уязвимостей.
Если вы хотите глубже изучить методы автоматизированного сбора данных и научиться эффективно работать с открытыми источниками, вам будет полезен курс "OSINT: технология боевой разведки". Этот курс охватывает все важнейшие аспекты OSINT, включая сбор данных из различных источников и использование специализированных инструментов для разведки.

Автоматизация отчётности​

Отчёты — это та ещё морока, но без них никуда. Автоматизация с Python и reportlab спасает.

Пример: PDF-отчёт​

Python:
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
import matplotlib.pyplot as plt
import io
from reportlab.lib.utils import ImageReader

def create_summary_pdf(output_file):
    c = canvas.Canvas(output_file, pagesize=letter)
    c.drawString(100, 750, "Penetration Testing Report")
    c.drawString(100, 700, "High Severity: 5 vulnerabilities")
    c.drawString(100, 680, "Medium Severity: 3 vulnerabilities")
 
    # Добавляем график
    plt.figure(figsize=(4, 3))
    plt.bar(['High', 'Medium', 'Low'], [5, 3, 2], color=['red', 'yellow', 'green'])
    plt.title('Vulnerability Distribution')
    buf = io.BytesIO()
    plt.savefig(buf, format='png')
    buf.seek(0)
    c.drawImage(ImageReader(buf), 100, 500, width=200, height=150)
    c.showPage()
    c.save()
Советы
  • Используй matplotlib для графиков.
  • Попробуй Markdown для HTML-отчётов.
  • Автоматизируй ввод данных из JSON.

Заключение​

Автоматизация в пентестинге — это мощный инструмент, который помогает эффективно и быстро справляться с рутинными задачами, такими как сбор информации, сканирование уязвимостей, анализ данных и перебор паролей. Вместо того чтобы тратить огромное количество времени на однообразные процессы, пентестеры могут сосредоточиться на более творческих и критически важных задачах, таких как разработка стратегий эксплуатации и анализ уязвимостей.

Что эффективнее для ускорения пентеста: полностью автоматизированный флоу ваших скриптов или идеально настроенные ручные проверки? Почему один подход лучше другого?
 
Последнее редактирование:
  • Нравится
Реакции: Paladin
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы