内网协议
内网协议
SMB
SMB(全称是Server Message Block)是网络文件共享协议,用于在计算机间共享文件、打印机、串口等,电脑上的网上邻居由它实现,端口445。在很早期的windows中(windows2000以下),文件共享服务是利用TCP的139端口实现的,服务名是SMB。后来,微软又把SMB改名为CIFS协议,并且使用的是TCP的445端口。
- 域内SMB走kerberos
- 其它SMB走NTLM
LLMNR
LLMNR(Link-Local Multicast Name Resolution),链路本地多播名称解析 (LLMNR) 和 NetBIOS 名称服务 (NBT-NS) 是 Windows 机器在 DNS 解析失败时用于识别网络上的主机地址的两个名称解析服务。现代 Windows 计算机上默认启用 LLMNR 和 NetBIOS。
- 数据格式
NetBIOS
NetBIOS,为网络基本输入输出系统(英语:Network Basic Input/Output System)的缩写,它提供了OSI模型中的会话层服务,让在不同电脑上运行的不同程序,可以在局域网中,互相连线,以及分享资料。严格来说,NetBIOS不是一种网络协议,而是应用程序接口(API)。较古老的操作系统,使用IEEE 802.2与IPX/SPX协议,可以使用NetBIOS Frames协议或NetBIOS over IPX/SPX协议来运作。现代操作系统,多数都使用TCP/IP协议,则可透过NetBIOS over TCP/IP协议来相互通信,广播包。
- NetBIOS提供三种软件服务:
Service Name | Port | Protocol | Short Name |
---|---|---|---|
NetBIOS Name Service | 137 | UDP/TCP | NBNS |
NetBIOS Datagram | 138 | UDP | NBND |
NetBIOS Session Service | 139 | TCP | NBSS |
SSDP
SSDP(Simple Sever Discovery Protocol),简单服务发现协议,采用基于通知和发现路由的多播发现方式实现。
MDNS
mNDS(multicast DNS),发现主机IP地址。
NBNS
NBNS是NetBIOS name service的缩写,是NetBIOS的命名服务,用于将NetBIOS名称映射到IP地址上,是NetBIOS-over-TCP(NBT)协议族的一份子。NBNS是动态DNS的一种,Microsoft的NBNS实现称为WINS。路由器可以通过发送NBNS状态请求以获取设备名,windows PC 接收到后通过WINS或将本地缓存发送命名信息给路由器。
WPAD
网络代理自动发现协议(Web Proxy Auto-Discovery Protocol,WPAD)是一种客户端使用DHCP和/或DNS发现方法来定位一个配置文件URL的方法。在检测和下载配置文件后,它可以执行配置文件以测定特定URL应使用的代理。
sc query winhttpautoproxysvc
function FindProxyForURL(url, host) {
if (host == "127.0.0.1" || isPlainHostName(host) || shExpMatch (host, "(192.168.253.15)")) {
return "DIRECT";
}
return "PROXY 192.168.253.15:8080";
}
NTLM
Windows New Technology LAN Manager (NTLM) 是问询/应答(Challenge/Response)身份验证协议,如果 Kerberos 无法对用户进行身份验证,系统将尝试改用 NTLM。
- LM Hash
299BD128C1101FD6
- NTLM Hash(NTHash)
e02bc503339d51f71d913c245d35b50b
- NTLMv1(Net-NTLMv1)
- NTLMSSP(NTLMSecurity Support Provider)
netntlm::kNS:338d08f8e26de93300000000000000000000000000000000:9526fb8c23a90751cdd619b6cea564742e1e4bf33006ba41:cb8086049ec4736c
- NTLMv2(Net-NTLMv2)
vagrant::UA-COMPUTER:a1e7b994fceaf520:DEF951B748B1BD0EA53056B8394ADE8F:010100000000000000B288B74DEAD8017F0B6B94E20909E90000000002000800480032005000490001001E00570049004E002D004F003300460031005A004600560034005A004800440004003400570049004E002D004F003300460031005A004600560034005A00480044002E0048003200500049002E004C004F00430041004C000300140048003200500049002E004C004F00430041004C000500140048003200500049002E004C004F00430041004C000700080000B288B74DEAD80106000400020000000800300030000000000000000000000000300000AC9FBB1C666A6A6D9DEEF6E44868B3432CD364FA736028D0AB1E5E9BD40CDB360A001000000000000000000000000000000000000900100063006900660073002F006100620063000000000000000000
NTLM认证流程
客户端向服务器发送HTTP请求,请求获得服务器资源,如访问邮件服务器资源
服务器由于开启了NTLM认证,所以返回401的错误码(未授权),提示需要NTLM认证
客户端发起NTLM认证,向服务器发送协商消息
服务器收到消息后,生成一个随机数Challenge,明文发送回客户端
客户端接收到Challenge后,使用密码hash对Challenge加密,生成Response并发送给服务器
服务器接收到Response后,会向DC(Domain Controller)发送针对客户端的验证请求,该请求主要包含以下三方面的内容:客户端用户名,客户端密码哈希值加密的Challenge和原始的Challenge
DC根据用户名获取该帐号的密码哈希值,对原始的Challenge进行加密。如果加密后的Challenge和服务器发送的一致,则意味着用户拥有正确的密码,验证通过,否则验证失败。DC将验证结果发给服务器,并最终反馈给客户端
安全标识符
SID安全标识符SID (Security identifier) 用于唯一标识安全主体或安全组。安全主体可以表示任何可由操作系统进行身份验证的实体,例如用户帐户、计算机帐户或在用户或计算机帐户的安全上下文中运行的线程或进程。
- 获取SID
WMIC useraccount get name,sid
S-1-5-21-1004336348-1177238915-682003330-512
MSV & NTLM & LM
DPAPI
DPAPI(Data Protection API)是一种简单的加密 应用程序编程接口,可作为Windows 2000和更高版本的Microsoft Windows 操作系统中的内置组件使用。理论上,数据保护 API 可以对任何类型的数据进行对称加密;实际上,它在 Windows 操作系统中的主要用途是执行非对称私钥的对称加密,使用用户或系统机密作为熵的重要贡献。
用于加密用户RSA密钥的 DPAPI 密钥存储在%APPDATA%\Microsoft\Protect{SID}目录下,其中 {SID} 是该用户的安全标识符。DPAPI 密钥与保护用户私钥的主密钥存储在同一文件中。它通常是 64 字节的随机数据。
DPAPI MasterKey
Vault
Windows stores credentials in special folders that they call "vaults" to help users login to websites and other computers.