目录导航
BruteShark介绍
BruteShark 是一种网络取证分析工具 (NFAT),可对网络流量(主要是 PCAP 文件,但它也能够直接从网络接口进行实时捕获)进行深度处理和检查。它包括:密码提取、构建网络地图、重建 TCP 会话、提取加密密码的哈希值,甚至将它们转换为 Hashcat 格式以执行离线暴力攻击。
该项目的主要目标是为执行网络流量分析任务的安全研究人员和网络管理员提供解决方案,同时他们试图识别潜在攻击者可以用来访问网络关键点的弱点。
有两个 BruteShark 版本可用,基于 GUI 的应用程序 (Windows) 和命令行界面工具(Windows 和 Linux)。
解决方案中的各种项目也可以独立用作分析 Linux 或 Windows 机器上的网络流量的基础设施。有关更多详细信息,请参阅架构部分。
该项目是在我的业余时间开发的,以满足我的两个主要热情:软件架构和分析网络数据。

它可以做什么
- 提取和编码用户名和密码(HTTP、FTP、Telnet、IMAP、SMTP…)
- 提取身份验证哈希并使用 Hashcat(Kerberos、NTLM、CRAM-MD5、HTTP-Digest…)
- 构建可视化网络图(网络节点和用户)
- 提取 DNS 查询
- 重建所有 TCP 和 UDP 会话
- 文件提取
- 提取 VoIP 呼叫(SIP、RTP)
BruteShark 下载地址
BruteSharkCli 82.5 MB
BruteSharkCli.exe 73.9 MB
BruteSharkDesktopInstaller_x64.msi 6.3 MB
Source code(zip)
Source code(tar.gz)
windows
- 先决条件:
- 下载BruteSharkDesktop Windows 安装程序(64 位)。
- 对于 CLI 版本,请下载BruteSharkCli Windows 10 Executable。
Linux
- 先决条件:libpcap 驱动程序
- 下载BruteSharkCli并运行它:#在 libpcap.so 和实际的 libpcap 文件(例如 libpcap.so.0.8)之间创建一个符号链接 #由于 SharpPcap 中的已知问题(https://github.com/chmorgan/sharppcap/issues/167),需要
find /usr/lib/x86_64-linux-gnu -type f | grep libpcap | head -1 | xargs -i sudo ln -s {} /usr/lib/x86_64-linux-gnu/libpcap.so
wget https://github.com/odedshimon/BruteShark/releases/latest/download/BruteSharkCli
./BruteSharkCli
云中转网盘下载:
yunzhongzhuan.com/#sharefile=dqzenRde_1919
.yunzhongzhuan.com/#sharefile=P2bwpTSH_1920
使用示例
提取ftp账号密码.

Hash密码

网络映射图

BruteShark用法
一般来说,建议加载、运行并探索结果。
可以从此处下载包含演示所有 BruteShark 功能的场景的示例 PCAP 文件。
注意分析网络流量是一个消耗时间和资源的操作,所以建议在加载大文件时只选择需要的模块。
应特别注意“Build TCP Sessions”/“Build UDP Sessions”选项。
CliShellCommand:
Keyword 描述
add-file 添加要分析的文件,命令: add-file <文件>
start 开始分析
show-passwords 提取密码
show-modules 显示模块
show-hashes 提取hash
show-networkmap 以json字符串形式输出网络映射
export-hashes 导出所有哈希到Hascat格式的输入文件。用法:export-hashes <输出目录>
capture-from-device 捕获网络设备的实时流量,用法: capture-from-device <设备名>
capture-promiscious-mode 在混杂模式下从网络设备捕获实时流量(需要超级用户权限,默认为普通模式)
set-captrue-filter 设置实时流量捕获过滤器(过滤器必须是bpf语法过滤器)
show-network-devices 显示可用于实时捕获的网络设备
export-networkmap 将neo4j的网络映射导出到json文件。用法:export-networkmap <输出文件>
export-voip-calls 将VoIP呼叫的媒体导出为文件。用法:export-networkmap <输出目录>
show-voip-calls 显示检测到的VoIP呼叫
help 打印帮助菜单
exit 退出
模块
BruteShark 是一个模块化工具,专为扩展而设计。
凭证模块
该模块负责提取和编码用户名和密码以及身份验证哈希。实际上这个模块负责更新两个显示表,密码表和哈希表。虽然用户名和密码使用起来很简单,但散列最常用于更复杂的攻击,如传递散列或通过蛮力获取密码。BruteShark 与Hashcat集成,因此所有提取的哈希值都可以转换为 Hashcat 输入文件。
协议 | 哈希类型 | Hascat模式 (-m) |
---|---|---|
HTTP | HTTP 摘要 | 11400 |
SMTP\IMAP | CRAM-MD5 | 16400 |
NTLM(例如 SMB) | NTLMv1 | 5500 |
NTLM(例如 SMB) | NTLMv2 | 5600 |
Kerberos | AS-REQ 类型 23 | 7500 |
Kerberos | AS-REP etype 23 | 18200 |
Kerberos | TGS-REP etype 23 | 13100 |
Kerberos (AES128) | TGS-REP etype 17 | 19600 |
Kerberos (AES256) | TGS-REP etype 18 | 19700 |
网络地图模块
该模块负责通过识别网络中的组件以及它们之间的连接来构建网络地图。网络地图可以导出为 JSON 格式,以便使用Neo4j等外部工具进行分析。
文件提取模块
该模块尝试从 UDP / TCP 会话中提取文件(因此,请注意,为了使该模块有效,应打开“Build TCP Sessions”/“Build UDP Sessions”)。目前该模块支持经典的文件雕刻取证技术“页眉-页脚”算法,该算法对已知文件页眉和页脚的文件(如JPG、PNG、PDF)有效。
VoIP 电话模块
该模块从 SIP 和 RTP 协议中提取 VoIP 呼叫。提取的呼叫可以导出为原始音频文件,并可以使用适当的音频播放器(如Audacity)播放
BruteShark桌面工具
GUI 非常容易解释,只需加载所需的文件、配置所需的模块并按下运行按钮即可。
BruteSharkCli
BruteSharkCli 是面向 Linux 用户的 BruteShark cli 版本(它也可以为 Windows 操作系统编译)。它具有 BruteSharkDesktop 的所有功能,并设计为从 shell 操作。作为经典的 cli 工具,它的工作原理是获取处理的所有相关参数,然后将结果打印到标准输出或文件。
打印帮助菜单:
BruteSharkCli --help
从目录中的所有文件中获取凭据(密码和哈希值将打印到标准输出):
BruteSharkCli -m Credentials -d "C:\Users\King\Desktop\Pcap Files"
从目录中的所有文件获取凭据,并将提取的哈希(如果找到)导出到 Hashcat 输入文件。
BruteSharkCli -m Credentials -d C:\Users\King\Desktop\Pcap_Examples -o C:\Users\King\Desktop\Results
对目录中的所有文件运行多个模块并导出所有结果。
BruteSharkCli -m Credentials,NetworkMap,FileExtracting -d C:\Users\King\Desktop\Pcap_Examples -o C:\Users\King\Desktop\Results
嗅探一个名为“Wi-Fi”的接口,运行多个模块并将所有结果导出到一个目录(只有在按 CTRL + C 停止嗅探器时才会导出结果)。
BruteSharkCli -l Wi-Fi -m Credentials,NetworkMap,FileExtracting,DNS -o C:\Users\King\Desktop\Test Export
构建原理
所有BruteShark项目都是使用实现.Net Core
和.Net Standard
现代和跨平台的支持。该解决方案采用三层架构设计,每层包括一个或多个项目——DAL、BLL 和 PL。层之间的分离是由每个项目只引用它自己的对象这一事实造成的。
Pcap 处理器 (DAL)
作为数据访问层,该项目负责使用适当的驱动程序(WinPcap、libpcap)和Chris Morgan的惊人包装库SharpPcap读取原始 PCAP 文件。可以一次分析文件列表,并提供额外的功能,如重建所有 TCP 会话(使用令人敬畏的项目 TcpRecon)。
PcapAnalyzer (BLL)
业务逻辑层,负责分析网络信息(数据包、TCP Session 等),实现了可插拔机制。每个插件基本上都是一个实现接口IModule 的类。所有插件都使用反射加载:
private void _initilyzeModulesList() { // Create an instance for any available modules by looking for every class that // implements IModule. this._modules = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(s => s.GetTypes()) .Where(p => typeof(IModule).IsAssignableFrom(p) && !p.IsInterface) .Select(t => (IModule)Activator.CreateInstance(t)) .ToList(); // Register to each module event. foreach(var m in _modules) { m.ParsedItemDetected += (s, e) => this.ParsedItemDetected(s, e); } }
BruteSharkDesktop (PL)
基于 WinForms 的 Windows 桌面应用程序。使用交叉项目,意思是它同时引用 DAL 和 BLL 层。这是通过组合每一层来完成的,注册到它们的事件,当事件被触发时,将事件对象转换为下一层等效对象,并将其发送到下一层。
public MainForm() { InitializeComponent(); _files = new HashSet<string>(); // Create the DAL and BLL objects. _processor = new PcapProcessor.Processor(); _analyzer = new PcapAnalyzer.Analyzer(); _processor.BuildTcpSessions = true; // Create the user controls. _networkMapUserControl = new NetworkMapUserControl(); _networkMapUserControl.Dock = DockStyle.Fill; _sessionsExplorerUserControl = new SessionsExplorerUserControl(); _sessionsExplorerUserControl.Dock = DockStyle.Fill; _hashesUserControl = new HashesUserControl(); _hashesUserControl.Dock = DockStyle.Fill; _passwordsUserControl = new GenericTableUserControl(); _passwordsUserControl.Dock = DockStyle.Fill; // Contract the events. _processor.TcpPacketArived += (s, e) => _analyzer.Analyze(Casting.CastProcessorTcpPacketToAnalyzerTcpPacket(e.Packet)); _processor.TcpSessionArived += (s, e) => _analyzer.Analyze(Casting.CastProcessorTcpSessionToAnalyzerTcpSession(e.TcpSession)); _processor.FileProcessingStarted += (s, e) => SwitchToMainThreadContext(() => OnFileProcessStart(s, e)); _processor.FileProcessingEnded += (s, e) => SwitchToMainThreadContext(() => OnFileProcessEnd(s, e)); _processor.ProcessingPrecentsChanged += (s, e) => SwitchToMainThreadContext(() => OnProcessingPrecentsChanged(s, e)); _analyzer.ParsedItemDetected += (s, e) => SwitchToMainThreadContext(() => OnParsedItemDetected(s, e)); _processor.TcpSessionArived += (s, e) => SwitchToMainThreadContext(() => OnSessionArived(Casting.CastProcessorTcpSessionToBruteSharkDesktopTcpSession(e.TcpSession))); _processor.ProcessingFinished += (s, e) => SwitchToMainThreadContext(() => OnProcessingFinished(s, e)); InitilizeFilesIconsList(); this.modulesTreeView.ExpandAll(); }