Go-SMB

      最后更新:2022-02-28 10:50:46 手机定位技术交流文章

      文章目录

      • 1. 理解SMB
        • Token
        • 混合编码
        • 元数据和引用字段
      • 2. 域内密码猜解
      • 3. Pass The Hash
      • 3. 恢复NTLM密码

      SMB协议常用于windows后渗透,该协议通常用于网络共享资源,如文件、打印机和串行端口,并允许通过命名管道在分布式网络节点之间进行进程间通信。使用SysInternals的PsExec(注意带微软签名)工具可以做到远程命令执行。

      另外,SMB还可以处理NTLM验证,如远程密码猜解、基于散列的身份验证(pass the hash)、SMB中继,和NBNS/LLMNR欺骗。

      NL LAN Manager(NTLM) 是windows上使用的质询-响应安全协议,

      GO的SMB包:

      • github.com/stacktitan/smb/smb
      • github.com/blackhat-go/bhg/ch-6/smb/smb

      以上两个库非官方、非标准可靠,相比之下,python倒是有pysmb库。

      SMB协议比较复杂,这里至少要了解的是,运用 反射 在运行时检查接口数据类型,定义结构体将数据序列化、反序列化。

      1. 理解SMB

      • 类似于HTTP的应用层协议;
      • 二进制协议,而HTTP是ASCII可读文本协议;
      • 版本(又叫方言,dialect)有2.0,2.1,3.0,3.0.2,3.1.1等,C/S两边要事先约定好版本,windows会选择两边均支持的最新版本(win7开始是2.1);

      Token

      SMB消息会包含与身份验证相关的安全令牌。身份验证机制有两种:

      • NtlmSSP,即lsass.exe, Local Security Authority Service,本地安全授权服务;
      • Kerberos

      难以实现的原因:

      • 身份验证机制和SMB规范是分开的
      • 混合编码:身份验证令牌还使用了ASN.1(Abstract Syntax Notation One,抽象语法标记)编码,

      相关规范:

      • MS-SMB2 , 关注最多:
      • MS-SPNG , RFC 4178
      • MS-NLMP , 与NtlmSSP令牌结构以及质询-响应格式相关;
      • ASN.1

      混合编码

      本部分依赖的库:

      • https://golang.google.cn/pkg/encoding/asn1/
      • https://golang.google.cn/pkg/encoding/binary/

      先看一个结构体:

      其中,B需要ASN.1编码,A和C则是二进制编码,这就是混合编码。像是json和xml,则编码所有字段,简单直接。

      元数据和引用字段

      关注:

      • encoder.go, parseTags()
      • encoder.go, unmarshal,switch typev.Kind()各种case,包括struct, uint, slice及array

      2. 域内密码猜解

      如果测试机器是32位,记着设置一下GOARCH:

      powershell则是这样设置:

      源码:

      普通机器:

      域内:

      3. Pass The Hash

      PTH攻击比一般AD域入侵更便捷,可以提权、横移等。

      利用漏洞进行AD域入侵路线:

      1. 利用漏洞exp获得网络立足点;
      2. 提权;
      3. 从lsass提取hash或明文凭证;
      4. 尝试离线破解hash获取管理员密码;
      5. 尝试使用管理员凭证对其他主机进行身份验证,查找可能的密码重用;
      6. 反复尝试,直到拿下域管理员。

      但如果使用NtlmSSP身份验证机制,即使在3、4步没能破解,也能在第5步直接使用NTLM散列进行SMB身份验证,即PTH,本质是因为PTH能使hash计算独立于质询-响应令牌计算。

      现在基本都使用kerberos身份验证机制

      NtlmSSP规范定义了两个函数:

      • NTOWFv2,相关链接: NTLM v2 Authentication | Microsoft Docs
      • CompeteResponse,它使用NTLM hash, 质询、时间戳、目标服务器名称等,生成GSS-API 令牌,相关链接:
        • GSS-API GSSAPI 介绍 通用的安全机制_whatday的专栏-CSDN博客_gssapi

      源码:github.com/blackhat-go/bhg/ch-6/smb/ntlmssp

      pth源码:

      与猜解不同的是,option填充的字段为hash。

      不过测试使用mimikatz获取ntlm后,没有成功建立会话。。。

      3. 恢复NTLM密码

      有些服务,比如RDP, Outlook等,不支持hash验证,必须用明文密码。这时还是需要破解hash。

      源码:github.com/blackhat-go/bhg/ch-6/smb/ntlmssp, NewAuthenticatePass(), NewAuthenticateHash()

      下面是根据明文字典暴力破解hash源码:

      测试还是失败了,经过调试(或print大法),Ntowfv2计算出来的字符串和mimikatz提取出来的ntlm不一样…

      —_—|

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/19188.html

          热门文章

          文章分类