
Un analyseur de capture réseau simple, fiable et raisonnablement rapide.
Sharker est un outil puissant et extensible pour extraire des données précieuses de fichiers PCAP ou d'interfaces en direct. Il exploite la puissance de tshark pour analyser efficacement les captures réseau et applique un système de filtrage flexible pour identifier et extraire des informations intéressantes.
.pcap, des répertoires de captures, ou même le trafic réseau en direct depuis une interface.apt-get install tshark, brew install wireshark).requirements.txt et peuvent être installées avec pip/pipx.Vous pouvez installer Sharker avec pipx (recommandé) ou un environnement standard pip et venv.
pipx (recommandé)# Install from this repository
pipx install git+https://github.com/synacktiv/sharker.git
# Verify the installation
sharker -h
pip et 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
La syntaxe de base pour Sharker est :
sharker [OPTIONS] [PCAP_FILE(s)]
1. Analysez un seul PCAP et enregistrez les résultats :
sharker my_capture.pcap
Cela exécutera tous les filtres sauf ceux de la catégorie heavy et enregistrera la sortie dans le répertoire sharker_out/. Les filtres de la catégorie creds seront également affichés sur stdout.
2. Appliquez tous les filtres et essayez d'aller aussi vite que possible :
sharker -A -F my_captures.pcap
Cela appliquera tous les filtres et écrira tout dans des fichiers, aucun résultat ne sera affiché sur la console.
3. Analysez un répertoire de PCAP en vous concentrant sur les identifiants :
sharker -d /path/to/pcaps -c creds
Cette commande traite tous les fichiers PCAP du répertoire spécifié, mais n'exécute que les filtres de la catégorie creds.
4. Capturez le trafic en direct et affichez les informations liées à HTTP sur la console :
sudo sharker -i eth0 -c http -m console
Cela capturera le trafic de l'interface eth0, exécutera uniquement les filtres de la catégorie http, et affichera tous les résultats directement dans le terminal.
5. Listez tous les filtres disponibles :
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.
La puissance de Sharker provient de ses filtres, situés dans le répertoire sharker/filters/. Chaque filtre est une classe Python qui définit :
name : Un nom unique pour le filtre.description : Une brève explication de ce que fait le filtre.pcap_filter : Un filtre d'affichage tshark pour sélectionner les paquets pertinents pour ce filtre.categories : Une liste de catégories auxquelles le filtre appartient (par exemple, creds, dns, http). heavy peut être utilisé pour les filtres qui correspondent à beaucoup de paquets ou effectuent des opérations lentes.mandatory_selectors et optional_selectors : Clés à rechercher dans la représentation JSON du paquet pour identifier les données d'intérêt. Sharker utilisera ces attributs pour sortir les données si aucune fonction parser n'est définie dans le filtre.Par défaut, Sharker exécute tous les filtres sauf ceux de la catégorie heavy. Vous pouvez personnaliser ce comportement avec les options -c, -nc, -f et -nf.
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
Si vous souhaitez contribuer à Sharker ou développer vos propres filtres, vous pouvez configurer un environnement de développement.
# 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 (définie dans sharker/filters/base.py).name, description, pcap_filter, etc.).parser() pour extraire les données dont vous avez besoin.
self.output avec les données à sortir.Ce projet s'est inspiré du travail des très bons projets open-source suivants :
| Option | Description |
|---|
-i, --interface <IFACE> | Capturez le trafic en direct depuis une interface réseau (par exemple, eth0). |
-d, --pcap-dir <DIR> | Analysez tous les fichiers PCAP d'un répertoire. |
-o, --output-dir <DIR> | Spécifiez le répertoire pour les fichiers de sortie (défaut : ./sharker_out). |
-m, --output-mode <MODE> | Définissez le mode de sortie : file, console, both ou develop (défaut : both). |
-u, --unique | N'affichez que les résultats uniques. |
-F, --fast | Configuration la plus rapide (n'affecte pas la sélection des filtres). |
-A, --all | Activez tous les filtres, sera plus lent. |
| Option | Description |
|---|
-c, --categories <CATS> | Liste de catégories de filtres séparées par des virgules à exécuter (par exemple, creds,http). |
-nc, --not-categories <CATS> | Liste de catégories de filtres séparées par des virgules à exclure (par exemple, heavy). Par défaut, heavy est exclu. |
-f, --filters <FILTERS> | Liste de filtres spécifiques séparés par des virgules à exécuter. |
-nf, --not-filters <FILTERS> | Liste de filtres spécifiques séparés par des virgules à exclure. |
-L, --list-all-filters | Affichez la liste de tous les filtres disponibles et leurs descriptions. |
-Lc, --list-all-filter-categories | Affichez la liste de toutes les catégories de filtres disponibles. |
-l, --list-filters | Affichez les filtres qui seront actifs avec les options de ligne de commande actuelles. |
-v, --verbose | Activez la journalisation détaillée pour le débogage. |
parser() : Une fonction qui traite les données du paquet et retourne les informations extraites.