Пентест — это не просто покликать по клавишам и почувствовать себя хакером из голливудских фильмов. Это серьёзная работа, где куча времени уходит на рутину: сканирование сетей, перебор паролей, анализ веб-приложений или копание в открытых данных (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) Не вляпайся.
 
- Цель: 
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, чтобы не попасть в бан.
 
Автоматизация перебора паролей с утилитами
Перебор паролей (brute-forcing) — важный инструмент для пентеста, проверяющий устойчивость учетных данных. Утилиты, такие как 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
	-ladmin: указывает имя пользователя (или используйте -L для списка пользователей).-P/path/to/passwords.txt: файл с паролями для перебора.-t4: количество потоков (параллельных попыток).-w1: задержка в 1 секунду между попытками.ssh://192.168.1.1: цель — в данном случае IP-адрес сервера через SSH.
- Используйте прокси-серверы или VPN для скрытия своей личности.
 - Настройте ограничения по скорости и параметры таймаута, чтобы избежать блокировки со стороны цели.
 - Если у вас есть список пользователей, используйте -L для подбора паролей для всех пользователей.
 
Пример использования 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, чтобы адаптировать настройки перебора.
 
Пример использования 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&password=^PASS^": данные для формы авторизации, где ^PASS^ — это переменная для подставляемых паролей.0=^passwords.txt: список паролей для подбора.
Создание эффективного словаря паролей
| Инструмент | Роль | Преимущества | Недостатки | Рекомендации | 
|---|---|---|---|---|
| Crunch | Генерация словарей | Полный контроль над шаблонами | Большие файлы | Для известных форматов паролей | 
| CeWL | Генерация словарей | Релевантные слова с сайта | Ограничен контентом сайта | Для контекстных словарей | 
| John the Ripper | Мутация словарей | Эффективные правила мутации | Требует базового списка | Для создания вариаций паролей | 
Качество словаря определяет успех перебора. Целенаправленные словари, учитывающие контекст цели (имена, термины компании), эффективнее общих списков вроде RockYou.
Инструмент 1: Crunch — генерация паролей по шаблонам
Crunch создаёт словари на основе заданных символов или шаблонов.
		Bash:
	
	crunch 6 8 0123456789abcdef -o passwords.txt
	Когда использовать: Если известен формат пароля (например, PIN или «имя + цифры»). Для шаблонов используйте -t:
		Bash:
	
	crunch 6 6 -t @@@@@% -o custom.txt
	Инструмент 2: CeWL — сбор слов с сайта
CeWL извлекает слова с веб-сайта для создания словаря.
		Bash:
	
	cewl -d 2 -m 5 -w custom_wordlist.txt https://example.com
	Когда использовать: Для паролей, связанных с контентом сайта (например, «Company2025»).
Инструмент 3: Фильтрация готовых словарей
Готовые словари (RockYou, SecLists) можно оптимизировать с помощью grep:
		Bash:
	
	grep -E '^.{8,12}$' rockyou.txt > 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, минимизируйте нагрузку.
 
		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
	
		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
	
		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 для регулярных проверок.
 
Автоматизация сбора 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 и т.д.). Пример сценария работы:- Установите Maltego (доступен в бесплатной версии Community Edition).
 - Создайте новый проект и добавьте сущность, например, домен example.com.
 - Примените трансформеры (преобразователи) для сбора данных:
- Запустите трансформер 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.
 
 - Постройте граф, где отображаются связи между доменом, поддоменами, IP, email, WHOIS-данными и социальными профилями. Используйте функцию «Layout» для упорядочивания графа (например, Organic Layout).
 - Экспортируйте результаты в CSV или PDF для отчёта (File → Export Graph).
 
- Начальная сущность: 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.
 
 
- Доменная сущность: 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
 
 
Organic LayoutList ViewПример: Сбор информации с помощью Python
Автоматизация сбора данных с использованием Python даёт гибкость и возможности для интеграции с другими инструментами. Наиболее часто используемые библиотеки для сбора OSINT данных:- requests — используется для отправки HTTP-запросов и получения ответов от веб-серверов.
 - BeautifulSoup — для парсинга HTML-страниц.
 - shodan — Shodan — инструмент для поиска информации о публичных устройствах в интернете (серверы, IoT-устройства). Требуется API-ключ для отправки запросов и получения данных через API.
 
		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}")
	Пример: Работа с базой данных 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-данных о домене, таких как регистратор, даты регистрации и контакты. - Добавлена обработка ошибок для устойчивости скрипта.
 
Советы:
- Использование API: Множество сервисов, таких как Shodan или Censys, предлагают API для автоматизированного сбора информации о публичных устройствах и IP-адресах. Используйте их для интеграции в свои скрипты.
 - Не забывай про конфиденциальность: При сборе данных с открытых источников всегда учитывайте юридические аспекты.
 - Интеграция с CI/CD: Если вы хотите, чтобы процесс сбора данных и анализа был автоматизирован на постоянной основе, интегрируйте эти инструменты в процессы CI/CD, как это делается для сканирования уязвимостей.
 
Автоматизация отчётности
Отчёты — это та ещё морока, но без них никуда. Автоматизация с 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.
 
Заключение
Автоматизация в пентестинге — это мощный инструмент, который помогает эффективно и быстро справляться с рутинными задачами, такими как сбор информации, сканирование уязвимостей, анализ данных и перебор паролей. Вместо того чтобы тратить огромное количество времени на однообразные процессы, пентестеры могут сосредоточиться на более творческих и критически важных задачах, таких как разработка стратегий эксплуатации и анализ уязвимостей.Что эффективнее для ускорения пентеста: полностью автоматизированный флоу ваших скриптов или идеально настроенные ручные проверки? Почему один подход лучше другого?
			
				Последнее редактирование: