
BruteShark 是一款网络取证分析工具(NFAT),可对网络流量进行深度处理与检查(主要是 PCAP 文件,但也能直接从网络接口进行实时捕获)。其功能包括:提取密码、构建网络拓扑图、重建 TCP 会话、提取加密密码的哈希,甚至将它们转换为 Hashcat 格式,以便执行离线暴力破解攻击。
该项目的主要目标是为安全研究人员和网络管理员提供网络流量分析解决方案,帮助他们在分析网络流量时识别潜在攻击者可能利用的弱点,从而访问网络中的关键节点。
BruteShark 提供两个版本:基于 GUI 的应用程序(Windows)和命令行界面工具(Windows 和 Linux)。
解决方案中的各个项目也可以独立用作在 Linux 或 Windows 机器上分析网络流量的基础组件。更多细节请参阅“架构”部分。
这个项目是我在业余时间开发的,源于我的两大爱好:软件架构和网络数据分析。
我非常喜欢听取 BruteShark 用户的反馈,你的意见对我很重要! 欢迎通过 [email protected] 联系我,或创建新 issue。
如果这个项目对你有帮助,请给这个仓库点个 ⭐️!
wget https://github.com/odedshimon/BruteShark/releases/latest/download/BruteSharkCli
./BruteSharkCli
构建网络拓扑图
https://user-images.githubusercontent.com/18364847/131922221-5714f351-85f7-4490-bec9-8da4339b66b3.mp4
BruteSharkCli 使用示例 - 提取多个密码和哈希 (也可在 YouTube 上观看)
https://user-images.githubusercontent.com/18364847/131924013-8b2aa18b-0941-456e-a09d-799902554166.mp4





一般来说,建议先加载、运行,然后查看结果。
包含演示 BruteShark 所有功能的场景的示例 PCAP 文件可从此处下载。
请注意,分析网络流量是一项消耗时间和资源的操作,因此在加载大型文件时,建议只选择必要的模块。
应特别注意“Build TCP Sessions”/“Build UDP Sessions”选项。
GUI 非常直观,只需加载所需文件,配置所需模块,然后点击运行按钮即可。
BruteSharkCli 是 BruteShark 的 CLI 版本,适用于 Linux 和 Windows 用户。它具有 BruteSharkDesktop 的所有功能,并设计为从 shell 中操作。 作为一款经典的 CLI 工具,它的工作方式是获取所有相关的处理参数,然后将结果输出到 stdout 或文件。
打印帮助菜单:
BruteSharkCli --help
从目录中的所有文件获取凭据(密码和哈希将打印到 stdout):
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 是一个模块化工具,专为扩展而设计。
该模块负责提取和编码用户名、密码以及身份验证哈希。实际上,该模块负责更新两个显示表:密码表和哈希表。用户名和密码可直接使用,而哈希通常用于更复杂的攻击,如传递哈希(pass-the-hash)或通过暴力破解获取密码。BruteShark 已与 Hashcat 集成,因此所有提取的哈希都可以转换为 Hashcat 输入文件。
该模块通过识别网络中的组件以及它们之间的连接来构建网络拓扑图。网络拓扑图可以导出为两个 JSON 文件,其中一个文件包含网络中的所有连接,另一个包含所有端点及其相关信息(如开放端口、DNS 映射等)。这些文件可用于使用外部工具(如 Neo4j)进行分析。

该模块尝试从 UDP / TCP 会话中提取文件(因此,请注意,要使该模块生效,应开启“Build TCP Sessions”/“Build UDP Sessions”)。目前,该模块支持经典的文件雕刻取证技术,通过“Header-Footer”算法,该算法对具有已知文件头和文件尾的文件(如 JPG、PNG、PDF)有效。
该模块从 SIP 和 RTP 协议中提取 VoIP 通话。提取的通话可以导出为原始音频文件,并可使用合适的音频播放器(如 Audacity)播放。
所有 BruteShark 项目均使用 .Net Core 和 .Net Standard 实现,以支持现代和跨平台环境。
该解决方案采用三层架构设计,每一层包含一个或多个项目 - DAL、BLL 和 PL。
层与层之间的分离基于每个项目只引用自身对象这一原则。
作为数据访问层,该项目负责使用适当的驱动程序(WinPcap、libpcap)和 Chris Morgan 开发的出色的封装库 SharpPcap 来读取原始 PCAP 文件。 可以同时分析一组文件,并提供附加功能,例如重建所有 TCP 会话(使用优秀的项目 TcpRecon)。
业务逻辑层,负责分析网络信息(数据包、TCP 会话等),实现了可插拔机制。 每个插件基本上是一个实现 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);
}
}
基于 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();
}
首先,感谢你抽出时间贡献!BruteShark 欢迎每个人贡献。
在向此仓库贡献之前,请先通过 issue 或电子邮件讨论你希望进行的更改。
| 协议 | 哈希类型 | Hascat 模式 (-m) |
|---|
| HTTP | HTTP-Digest | 11400 |
| SMTP\IMAP | CRAM-MD5 | 16400 |
| NTLM (e.g. SMB) | NTLMv1 | 5500 |
| NTLM (e.g. SMB) | NTLMv2 | 5600 |
| Kerberos | AS-REQ etype 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 |