
Ein einfacher, zuverlässiger und einigermaßen schneller Netzwerk-Capture-Analysator.
Sharker ist ein leistungsstarkes und erweiterbares Werkzeug zum Extrahieren wertvoller Daten aus PCAP-Dateien oder von Live-Schnittstellen. Es nutzt die Leistung von tshark, um Netzwerk-Mitschnitte effizient zu analysieren, und wendet ein flexibles Filtersystem an, um interessante Informationen gezielt zu finden und zu extrahieren.
.pcap-Dateien, Verzeichnisse mit Mitschnitten oder sogar Live-Netzwerkverkehr von einer Schnittstelle.apt-get install tshark, ).brew install wiresharkrequirements.txt aufgelistet und können mit pip/pipx installiert werden.Sie können Sharker mit pipx (empfohlen) oder einer standardmäßigen pip- und venv-Umgebung installieren.
pipx (empfohlen)# Install from this repository
pipx install git+https://github.com/synacktiv/sharker.git
# Verify the installation
sharker -h
pip und venv# Clone the repository
git clone https://github.com/synacktiv/sharker.git
cd sharker
# Create and activate a virtual environment
python3 -m venv venv
source venv/bin/activate
# Install Sharker
pip install .
# Verify the installation
sharker -h
Die grundlegende Syntax von Sharker lautet:
sharker [OPTIONS] [PCAP_FILE(s)]
| Option | Beschreibung |
|---|---|
-i, --interface <IFACE> | Erfasst Live-Datenverkehr von einer Netzwerkschnittstelle (z. B. eth0). |
-d, --pcap-dir <DIR> | Analysiert alle PCAP-Dateien in einem Verzeichnis. |
-o, --output-dir <DIR> | Gibt das Verzeichnis für Ausgabedateien an (Standard: ./sharker_out). |
-m, --output-mode <MODE> | Legt den Ausgabemodus fest: file, console, both oder develop (Standard: both). |
-u, --unique | Gibt nur eindeutige Ergebnisse aus. |
-F, --fast | Schnellste Konfiguration (beeinflusst die Filterauswahl nicht). |
-A, --all | Aktiviert alle Filter; wird langsamer sein. |
| Option | Beschreibung |
|---|---|
-c, --categories <CATS> | Eine durch Kommas getrennte Liste von Filterkategorien, die ausgeführt werden sollen (z. B. creds,http). |
-nc, --not-categories <CATS> | Eine durch Kommas getrennte Liste von Filterkategorien, die ausgeschlossen werden sollen (z. B. heavy). Standardmäßig ist heavy ausgeschlossen. |
-f, --filters <FILTERS> | Eine durch Kommas getrennte Liste bestimmter auszuführender Filter. |
-nf, --not-filters <FILTERS> | Eine durch Kommas getrennte Liste bestimmter auszuschließender Filter. |
-L, --list-all-filters | Zeigt eine Liste aller verfügbaren Filter und ihrer Beschreibungen an. |
-Lc, --list-all-filter-categories | Zeigt eine Liste aller verfügbaren Filterkategorien an. |
-l, --list-filters | Zeigt die Filter an, die mit den aktuellen Befehlszeilenoptionen aktiv sind. |
-v, --verbose | Aktiviert ausführliche Protokollierung zum Debuggen. |
1. Analysieren Sie eine einzelne PCAP-Datei und speichern Sie die Ergebnisse:
sharker my_capture.pcap
Dadurch werden alle Filter mit Ausnahme der Kategorie heavy ausgeführt und die Ausgabe im Verzeichnis sharker_out/ gespeichert. Filter der Kategorie creds werden zusätzlich auf stdout ausgegeben.
2. Alle Filter anwenden und versuchen, so schnell wie möglich zu arbeiten:
sharker -A -F my_captures.pcap
Hierbei werden alle Filter angewendet und alles in Dateien ausgegeben; auf der Konsole werden keine Ergebnisse angezeigt.
3. Analysieren Sie ein Verzeichnis mit PCAPs, mit Schwerpunkt auf Anmeldeinformationen:
sharker -d /path/to/pcaps -c creds
Dieser Befehl verarbeitet alle PCAP-Dateien im angegebenen Verzeichnis, führt aber nur die Filter der Kategorie creds aus.
4. Live-Datenverkehr erfassen und HTTP-bezogene Informationen auf der Konsole ausgeben:
sudo sharker -i eth0 -c http -m console
Dadurch wird der Datenverkehr der Schnittstelle eth0 erfasst, nur die Filter der Kategorie http werden ausgeführt und alle Ergebnisse direkt im Terminal ausgegeben.
5. Alle verfügbaren Filter auflisten:
sharker -L
$ sharker -h
Usage: sharker [OPTIONS] [PCAP[ PCAP[ ...]]
Sharker: A reasonably fast network protocol analysis tool with extensible
filters.
Options:
Input Source:
-d, --pcap-dir DIR Path to a directory containing PCAP files to
parse.
-i, --interface IFACE Network interface to capture live data from
(e.g., eth0, wlan0).
Output Handling: By default, everything is written to file,
and only creds category is printed to
console. For very large PCAPs, advised to
disable console output or at least colors,
since it slows down the parsing.
-m, --output-mode [file|console|both|develop]
Which output mode to enable. [default:
both]
-u, --unique Output only unique results, will gradually
take more and more RAM.
-F, --fast Fastest configuration (do not affect filter
selection).
Output file mode:
-o, --output-dir DIR Output directory.
-op, --output-prefix NAME Prefix to use for the output files, defaults
to the PCAP/interface name.
Output console mode:
-P Send all filters to console (default in
console output mode).
-C Do not use colors in console output, will
speed up sharker when lot of stuff is
printed.
-pf FILT[,FILT[...]] Send specific filters output to console.
-xpf FILT[,FILT[...]] Do not send specific filters to console.
-pc CAT[,CAT[...]] Send specific filter categories to console.
-xpc CAT[,CAT[...]] Do not send specific categories to console.
-nwf FILT[,FILT[...]] Do not write filters output to file.
-nwc CAT[,CAT[...]] Do not write filter categories to file.
Filter Selection:
-A, --all Enable all filters, will be slower.
-f, --filters FILT[,FILT[...]]
Only run specified filters.
-nf, --not-filters FILT[,FILT[...]]
Exclude specified filters.
-c, --categories CAT[,CAT[...]]
Only run specified categories of filters.
-nc, --not-categories CAT[,CAT[...]]
Exclude specified categories of filters.
Filter Information:
-l, --list-filters List filters that would be active with
current filtering options.
-L, --list-all-filters List all available filters.
-Lc, --list-all-filter-categories
List all available filter categories.
Debugging:
-v, --verbose Verbose mode.
-h, --help Show this message and exit.
Sharkers Stärke liegt in seinen Filtern, die sich im Verzeichnis sharker/filters/ befinden. Jeder Filter ist eine Python-Klasse, die Folgendes definiert:
name: Ein eindeutiger Name für den Filter.description: Eine kurze Erklärung, was der Filter tut.pcap_filter: Ein tshark-Anzeigefilter, um relevante Pakete für diesen Filter auszuwählen.categories: Eine Liste von Kategorien, zu denen der Filter gehört (z. B. creds, dns, http). heavy kann für Filter verwendet werden, die viele Pakete abgleichen oder langsame Operationen ausführen.mandatory_selectors und optional_selectors: Schlüssel, die in der JSON-Darstellung des Pakets gesucht werden, um die relevanten Daten zu identifizieren. Sharker verwendet diese Attribute zur Ausgabe von Daten, wenn im Filter keine parser-Funktion definiert ist.parser(): Eine Funktion, die die Paketdaten verarbeitet und die extrahierten Informationen zurückgibt.Standardmäßig führt Sharker alle Filter mit Ausnahme der Kategorie heavy aus. Sie können dieses Verhalten mit den Optionen -c, -nc, -f und -nf anpassen.
from .base import FilterConfigBase
class FilterConfig(FilterConfigBase):
name = 'ntlmssp'
description = 'Extract Net-NTLM hashes for cracking purposes'
categories = [
'creds',
'windows'
]
pcap_filter = 'gss-api || ntlmssp'
mandatory_selectors = [
'ntlmssp'
]
def __init__(self, *args, **kwargs):
self.challenges = {}
super().__init__(*args, **kwargs)
def parser(self, data):
tcp_conn = data['tcp.stream'][0]
msg_type = int(data['ntlmssp.messagetype'][0], 16) if 'ntlmssp.messagetype' in data else 0
if msg_type == 1:
# NTLM NEGOTIATE: nothing to do
pass
elif msg_type == 2:
# NTLM CHALLENGE
self.challenges[tcp_conn] = data['ntlmssp.ntlmserverchallenge'][0].replace(':', '')
elif msg_type == 3:
if tcp_conn not in self.challenges:
self.log.error('Found an NTLM message type 3 (AUTH), but no type 2 (CHALLENGE) was received beforehand -> check in pcap if the challenge was not sent in an unsupported by tshark manner from the server, like in a Proxy-Authenticate HTTP header.')
return 0
ntresp = data['ntlmssp.auth.ntresponse'][0].replace(':', '')
lmresp = data['ntlmssp.auth.lmresponse'][0].replace(':', '')
user = data['ntlmssp.auth.username'][0]
domain = data['ntlmssp.auth.domain'][0]
workstation = data['ntlmssp.auth.hostname'][0]
ntlm_hash = ''
if len(ntresp) == 24 * 2:
# NTLMv1 response
if domain != '':
ntlm_hash = f'{user}::{domain}:{lmresp}:{ntresp}:{self.challenges[tcp_conn]}'
else:
ntlm_hash = f'{user}::{workstation}:{lmresp}:{ntresp}:{self.challenges[tcp_conn]}'
else:
# NTLMv2 response
if domain != '':
ntlm_hash = f'{user}::{domain}:{self.challenges[tcp_conn]}:{ntresp[:32]}:{ntresp[32:]}'
else:
ntlm_hash = f'{user}::{workstation}:{self.challenges[tcp_conn]}:{ntresp[:32]}:{ntresp[32:]}'
del self.challenges[tcp_conn]
self.output(ntlm_hash)
return 1
return 0
Wenn Sie zu Sharker beitragen oder eigene Filter entwickeln möchten, können Sie eine Entwicklungsumgebung einrichten.
# Clone the repository
git clone https://github.com/synacktiv/sharker.git
cd sharker
# Create and activate a virtual environment
python3 -m venv venv
source venv/bin/activate
# Install in editable mode
pip install -e .
# Now you can run sharker and your changes will be reflected immediately
sharker -h
sharker/filters/.FilterConfigBase erbt (definiert in sharker/filters/base.py).name, description, pcap_filter usw.).parser(), um die benötigten Daten zu extrahieren.
self.output mit den auszugebenden Daten auf.Dieses Projekt wurde durch die Arbeit der folgenden wirklich großartigen Open-Source-Projekte inspiriert: