当前位置: 首页 > news >正文

别再只盯着MSF了!用Python脚本+Wireshark亲手抓包,带你一步步拆解永恒之蓝的SMB协议攻击流程

从协议层拆解永恒之蓝:Python+SMB组合拳实战分析

当安全从业者谈论永恒之蓝漏洞时,大多数人会立即想到Metasploit框架的自动化攻击流程。但真正的技术深度,往往隐藏在底层协议的交互细节中。本文将带你用工程师的显微镜,通过Python脚本和Wireshark的组合,逐帧分析SMBv1协议在漏洞利用过程中的异常数据包构造。

1. 为什么需要从协议层理解漏洞?

传统漏洞复现教程往往停留在工具操作层面,这就像只学习驾驶汽车而不了解发动机原理。当我们用Python直接构造SMB协议数据包时,会发现:

  • 协议设计缺陷可视化:SMBv1的NT Trans请求中存在的内存越界问题会直接体现在数据包结构中
  • 攻击流量特征识别:恶意构造的Transaction Secondary数据包具有独特的字段组合模式
  • 防御策略精准制定:基于协议分析的防护规则比单纯封堵445端口更有效

提示:实验环境建议使用隔离的虚拟网络,靶机选择未打补丁的Windows 7 SP1 x64系统

2. SMB协议精要解析

在动手编写探测脚本前,需要掌握SMB协议的核心要素:

# SMB协议基础头结构示例 class SMBHeader: def __init__(self): self.protocol_id = b'\xffSMB' # 固定标识 self.command = 0x25 # NT Trans命令码 self.status = 0 # 状态码 self.flags = 0x18 # 标志位 self.flags2 = 0xc007 # 扩展标志 self.pid_high = 0 # 进程ID高位 self.signature = b'\x00'*8 # 签名 self.reserved = 0 # 保留字段

关键协议特征对比:

字段正常请求攻击载荷
NT Trans MaxSetupCount≤5通常设置为0
NT Trans TotalParameterCount与实际匹配远大于实际值
NT Trans TotalDataCount与实际匹配异常超大值
NT Trans MaxParameterCount合理范围设置为0xFFFFFFFF

3. Python实现SMB探测脚本

下面是我们实现的核心探测逻辑:

import socket import struct def build_negotiate_protocol(): # 构造SMBv1协商请求 netbios = b'\x00\x00\x00\x85' # 长度字段 smb_header = SMBHeader() smb_header.command = 0x72 # Negotiate Protocol # 协议列表包含NT LM 0.12 dialects = [ b'\x02NT LM 0.12\x00', b'\x02SMB 2.002\x00' ] return netbios + bytes(smb_header) + b''.join(dialects) def check_vulnerability(target_ip): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((target_ip, 445)) # 发送协商请求 s.send(build_negotiate_protocol()) response = s.recv(1024) if b'SMB' not in response: return False # 构造异常NT Trans请求 malicious_nttrans = build_malicious_nttrans() s.send(malicious_nttrans) # 分析响应特征 return analyze_response(s.recv(4096)) except Exception as e: print(f"检测异常: {str(e)}") return False

典型漏洞利用流程中的关键操作:

  1. 协议协商阶段

    • 强制降级到SMBv1协议
    • 确认目标支持NT Trans命令
  2. 内存探测阶段

    • 发送异常参数大小的NT Trans请求
    • 观察响应中的内存布局信息泄露
  3. Shellcode投递阶段

    • 利用Transaction Secondary分片发送载荷
    • 触发缓冲区溢出执行流程劫持

4. Wireshark流量分析实战

在脚本运行同时启动Wireshark捕获,重点关注以下过滤条件:

smb && smb.cmd == 0xa0 || smb.cmd == 0x25 # NT Trans和Trans2命令

异常流量特征示例:

  • 畸形长度字段

    SMB: NT Trans Request, TotalParameterCount=0x0000FFFF (实际参数仅16字节)
  • 异常分片组合

    SMB: Transaction Secondary (FID: 0x4000) with invalid DataDisplacement
  • 内存布局泄露

    SMB: NT Trans Response containing kernel address 0xfffff8000287a000

分析技巧:

  1. 使用Statistics > Protocol Hierarchy查看SMB各命令分布
  2. 对异常数据包右键选择Follow > TCP Stream观察完整会话
  3. 使用Edit > Preferences > Protocols > SMB启用深度解析

5. 现代环境下的防御思考

基于协议分析的防护方案比传统方案更有效:

主机层防护

  • 禁用SMBv1协议组策略:
    Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol
  • 启用SMB签名要求

网络层检测

  • 深度包检测规则示例:
    alert tcp any 445 -> any any (msg:"SMB可疑NT Trans请求"; flow:established; content:"|FF 53 4D 42|"; depth:4; byte_test:1,&,0x18,4,relative; content:"|A0 25|"; distance:0; byte_test:4,>,1024,24,relative; sid:1000001;)

企业级防护架构

[图表已移除]

替代方案描述:

  1. 网络边界部署支持SMB深度解析的NGFW
  2. 终端安装具有行为检测能力的EDR产品
  3. 定期进行协议级漏洞扫描

6. 拓展实验:手工构造攻击载荷

对于想深入理解漏洞利用原理的读者,可以尝试手工构造攻击数据包:

def build_exploit_payload(target_os): # 根据不同系统版本调整偏移量 offsets = { 'win7_sp1_x64': { 'KernelBase': 0xfffff80002800000, 'HalDispatchTable': 0x0000000000034f30 } } # 精确计算ROP链地址 rop_chain = construct_rop_chain(offsets[target_os]) # 组装最终攻击载荷 payload = ( b'\x00\x00\x01\x00' + # NetBIOS长度 build_nt_trans_exploit(rop_chain) + build_trans_secondary_fragments(rop_chain) ) return payload

关键注意事项:

  • 不同系统版本需要精确调整内存偏移
  • 载荷需要严格对齐内存页边界
  • 分片传输时需要控制每个数据块的大小

在实验室环境中成功触发漏洞时,Wireshark会捕获到以下典型事件序列:

  1. 初始协商协议请求/响应
  2. 会话建立和树连接
  3. 异常的NT Trans主请求
  4. 多个Transaction Secondary分片
  5. 异常的服务器响应或连接中断

这种基于协议层的分析方法,同样适用于分析其他SMB相关漏洞如:

  • CVE-2017-0143 (EternalRomance)
  • CVE-2017-0144 (EternalChampion)
  • CVE-2017-0146 (EternalSynergy)

通过本次实验,最大的收获是理解到真正的安全研究不在于工具的使用,而在于对底层原理的透彻掌握。当你能用Python重现漏洞利用过程时,对防御方案的设计自然会有更清晰的思路。

http://www.jsqmd.com/news/542551/

相关文章:

  • 专利数据挖掘与商业价值转化:开源工具驱动的技术创新与决策变革
  • 雷诺运输定理可视化教程:用Python模拟动态物质传输过程
  • 深入解析IIR与FIR滤波器的典型应用场景
  • 基于Matlab的转子系统临界转速与主振型求解:传递矩阵法及其参数涉及等截面、材料与轮盘参数的...
  • SEER‘S EYE预言家之眼模型服务化:使用.NET Core构建高性能API网关
  • 别再死记命令了!用EVE-NG模拟器5分钟搞定思科GRE隧道(附OSPF联动配置)
  • PyTorch 2.8镜像实战手册:从零开始构建私有大模型API服务(含端口配置)
  • 802.1AS时钟同步中的延迟测量与驻留时间解析
  • Python实战:基于leidenalg与igraph的知识图谱社区发现与可视化布局
  • 从‘它怎么又挂了’到‘服务真稳’:我是如何用PM2守护我的Node.js生产环境的
  • 财咖分析云联系方式:面向企业财务数字化需求的全面预算与合并报表解决方案使用指南 - 品牌推荐
  • 保姆级教程:在Hi3516CV610开发板上跑通YOLOv8,从模型转换到RTSP推流全流程
  • 从if-else到assign:聊聊RTL代码风格如何影响X态传播与电路质量
  • RDT-1B数据集处理实战:如何用生产者-消费者模式加速21TB具身智能训练
  • 熟食气调包装机哪家好?精选2026食品包装机厂家推荐/牛排贴体包装机厂家推荐 - 栗子测评
  • Ubuntu 18.04下搞定OpenCV2与OpenCV3共存,手把手教你编译Kalibr标定工具
  • 告别Mock数据烦恼:用这个开源JavaFX工具批量模拟REST API响应
  • Obsidian移动端深度评测:安卓/iOS同步技巧+5个必装生产力插件
  • 2025年项目管理工具革新趋势:从代码托管到全栈协作的范式转移
  • OpenClaw技能市场挖掘:GLM-4.7-Flash加持的5个实用自动化
  • Labelme不止能画多边形:解锁矩形框、关键点标注,为你的CV项目打造专属数据集
  • esxi9.0新版安装部署教程、集成驱动教程、集成驱动包分享、常见问题解答等问题一文解答
  • [认知计算] 神经网络架构:从生物启发的神经元到现代激活函数演进
  • 2026年市场技术好的木片机直销厂家分析,布料制粒机/自动化颗粒机/制粒机/水产饲料搅拌机,木片机直销厂家分析 - 品牌推荐师
  • 指尖藏趣,抽享惊喜——扭蛋机抽赏盲盒小程序前端功能详解
  • Python张量计算性能翻倍的4个反直觉技巧(第3个让CUDA利用率从41%飙升至98%)
  • MedGemma-X功能详解:对话式阅片、结构化报告、一键导出全解析
  • vLLM-v0.17.1快速部署:GitHub Actions自动构建vLLM Docker镜像
  • 财咖分析云联系方式查询:面向企业数字化转型的全面预算与合并报表软件使用指南与风险提示 - 品牌推荐
  • 财咖分析云联系方式查询:面向企业财务数字化转型的全面预算与合并报表解决方案使用指南 - 品牌推荐