windows信息搜集篇(二)之SPN

唔,上篇是自己找的资料写的,这篇按大佬的要求整理一下。

image

SPN

SPN概述

SPN(ServicePrincipal Names)服务主体名称,是服务实例(比如:HTTP、SMB、MySQL等服务)的唯一标识符。

Kerberos认证过程使用SPN将服务实例与服务登录账户相关联,如果想使用 Kerberos 协议来认证服务,那么必须正确配置SPN。如果在整个林或域中的计算机上安装多个服务实例,则每个实例都必须具有自己的 SPN。如果客户端可能使用多个名称进行身份验证,则给定服务实例可以具有多个SPN。SPN 始终包含运行服务实例的主机的名称,因此服务实例可以为其主机的每个名称或别名注册SPN。一个用户账户下可以有多个SPN,但一个SPN只能注册到一个账户。在内网中,SPN扫描通过查询向域控服务器执行服务发现。这对于红队而言,可以帮助他们识别正在运行重要服务的主机,如终端,交换机等。SPN的识别是kerberoasting攻击的第一步。

下面通过一个例子来说明SPN的作用:

当某用户需要访问MySQL服务时,系统会以当前用户的身份向域控查询SPN为MySQL的记录。
当找到该SPN记录后,用户会再次与KDC通信,将KDC发放的TGT作为身份凭据发送给KDC,并将需要访问的SPN发送给KDC。
KDC中的TGS服务对TGT进行解密。确认无误后,由TGS将一张允许访问该SPN所对应的服务的ST服务票据和该SPN所对应的服务的地址发送给用户,用户使用该票据即可访问MySQL服务。

SPN的两种类型:

一种是注册在活动目录的机器帐户(Computers)下,当一个服务的权限为 Local SystemNetwork Service,则SPN注册在机器帐户(Computers)下。

另一种是注册在活动目录的域用户帐户(Users)下,当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下。

SQLServer服务注册:

SQLServer在每次启动的时候,都会去尝试用自己的启动账号注册SPN。但是在Windows域里,默认普通机器账号有权注册SPN,但是普通域用户账号是没有权注册SPN的。这就会导致这样一个现象,SQL Server如果使用“Local System account”来启动,Kerberos就能够成功,因为SQL Server这时可以在DC上注册SPN。如果用一个域用户来启动,Kerberos就不能成功,因为这时SPN注册不上去。

解决办法:

  • 可以使用工具SetSPN -S来手动注册SPN。但是这不是一个最好的方法,毕竟手工注册不是长久之计。如果SPN下次丢了,又要再次手动注册。
  • 所以比较好的方法,是让SQL Server当前启动域账号有注册SPN的权力。要在DC上为域账号赋予 “Read servicePrincipalName” 和 “Write serverPrincipalName” 的权限即可。

SPN的配置

微软官方文档

在 SPN 的语法中存在四种元素,两个必须元素和两个额外元素,其中 为必须元素:

SPN格式:<service class>/<host>:<port>/<service name>

<service class>:标识服务类的字符串,可以理解为服务的名称,常见的有WWW、MySQL、SMTP、MSSQL等;必须元素
<host>:服务所在主机名,host有两种形式,FQDN(win7.21r000.com)和NetBIOS(win7)名;必须元素
<port>:服务端口,如果服务运行在默认端口上,则端口号(port)可以省略;额外元素
<service name>:服务名称,可以省略;额外元素

一些服务的SPN示例:
#Exchange服务
exchangeMDB/ex01.21r000.com
#RDP服务
TERMSERV/te01.21r000.com
#WSMan/WinRM/PSRemoting服务
WSMAN/ws01.21r000.com

使用SetSPN注册SPN

SetSPN是一个本地Windows二进制文件,可用于检索用户帐户和服务之间的映射。该实用程序可以添加,删除或查看SPN注册。

环境描述:

主机:win7.21r000.org

域控:win2012.21r000.org

当前用户:21r000/test

查看SPN是否已注册:

setspn -L sccmdb

查询是否有重复的SPN存在:

setspn -X

在运行sql server的计算机上注册,setspn.exe工具包含在windows server2003 sp1 support tools中
使用域管理员登陆后,手动注册默认实例:

setspn -A MSSQLSvc/win7.21r000.com:1433 21r000\win7

注:使用 “-S”参数而不是用“-A”的话则会先验证其要注册的SPN是否已存在,如果已存在则提示,并终止操作。

注:注册SPN需要域管理员权限,普通域成员注册会提示权限不够!

image

以test用户的身份进行SPN服务的注册

setspn -S SQLServer/win7.21r000.com:1433 21r000    #21r000必须是当前的用户或setspn -U -A SQLServer/win7.21r000.com:1433 21r000    #21r000必须是当前的用户

image

以WIN7主机的身份在DC(win2012.21r000.org)上进行SPN服务(SQLServer)的注册

setspn -S SQLServer/win7.21r000.com:1533/MSSQL 21r000    #21r000必须是当前的主机名

image

如果提示重复,我们可以将端口修改为其他端口,就不是重复的SPN了。

SPN的发现

由于每台服务器都需要注册用于Kerberos身份验证服务的SPN,因此这为在不进行大规模端口扫描的情况下收集有关内网域环境的信息提供了一个更加隐蔽的方法。

使用SetSPN查询:

windows系统自带的setspn可以查询域内的SPN。

查看当前域内所有的SPN:setspn  -Q  */*
查看指定域xie.com注册的SPN:setspn -T xie.com -Q */*      如果指定域不存在,则默认切换到查找本域的SPN
查找本域内重复的SPN:setspn -X
删除指定SPN:setspn -D MySQL/win7.xie.com:1433/MSSQL hack
查找指定用户/主机名注册的SPN:setspn -L username/hostname

image

image

image

image

PowerShell-AD-Recon:

项目地址

该工具包提供了一些探测指定SPN的脚本,例如Exchange,Microsoft SQLServer,Terminal

image

#Discover-PSMSSQLServers.ps1的使用,扫描MSSQL服务
Import-Module .\Discover-PSMSSQLServers.ps1;Discover-PSMSSQLServers

#Discover-PSMSExchangeServers.ps1的使用,扫描Exchange服务
Import-Module .\Discover-PSMSExchangeServers.ps1;Discover-PSMSExchangeServers

#扫描域中所有的SPN信息
Import-Module .\Discover-PSInterestingServices.ps1;Discover-PSInterestingServices

下面由于靶机文件传输问题盗用一下佬的图,勿怪。

GetUserSPNs.ps1:

GetUserSPNsKerberoast 工具集中的一个 powershell 脚本,用来查询域内用户注册的 SPN。

项目地址

Import-Module .\GetUserSPNs.ps1

image

GetUserSPNs.vbs:

GetUserSPNsKerberoast 工具集中的一个 vbs 脚本,用来查询域内用户注册的 SPN

项目地址

cscript .\GetUserSPNs.vbs

image

PowerView.ps1:

PowerViewPowerSpolitRecon目录下的一个powershell脚本,PowerView 相对于上面几种是根据不同用户的 objectsid 来返回,返回的信息更加详细。

项目地址

Import-Module .\PowerView.ps1
Get-NetUser -SPN

image

PowerShellery:

PowerShellery下有各种各样针对服务SPN探测的脚本。其中一些需要PowerShell v2.0的环境,还有一些则需要PowerShell v3.0环境。

#Powershellery/Stable-ish/Get-SPN/ 下Get-SPN.psm1脚本的使用,需要powershell3.0及以上版本才能使用
Import-Module .\Get-SPN.psm1
Get-SPN -type service -search "*"
Get-SPN -type service -search "*" -List yes | Format-Table
#Powershellery/Stable-ish/ADS/ 下Get-DomainSpn.psm1脚本的使用
Import-Module .\Get-DomainSpn.psm1
Get-DomainSpn

image

RiskySPN中的Find-PotentiallyCrackableAccounts.ps1:

该脚本可以帮助我们自动识别弱服务票据,主要作用是对属于用户的可用服务票据执行审计,并根据用户帐户和密码过期时限来查找最容易包含弱密码的票据。

项目地址

Import-Module .\Find-PotentiallyCrackableAccounts.ps1;Find-PotentiallyCrackableAccounts -FullData -Verbose

image

该脚本将提供比klist和Mimikatz更详细的输出,包括组信息,密码有效期和破解窗口。

image

使用domain参数,将返回所有具有关联服务主体名称的用户帐户,也就是将返回所有SPN注册在域用户下的用户。

Import-Module .\Find-PotentiallyCrackableAccounts.ps1;Find-PotentiallyCrackableAccounts -Domain "xie.com"

image

CMD命令查看WiFi密码

CMD命令查看WiFi密码

使用CMD命令查看WiFi密码

运行CMD(命令提示符) (确保无线网卡启用状态)
输入命令查看WiFi配置文件:

使用命令:

# 列出所有连接过的WiFi的配置文件  
netsh wlan show profiles
# 查看到某个具体WiFi的配置详情,包括密码:
netsh wlan show profiles name="XXXXXX" key=clear
# XXXXXX 代替自己的WiFi名称即可

示例:

netsh wlan show profiles name="21r000" key=clear

image

image

即可看到WiFi密码。

图形界面查看WiFi密码

image

双击后点击“无限属性”进入“安全”目录显示字符即可查看WiFi密码。

image

感言:

emmmmm,杰哥不要啊!!!

image

参考链接:

内网渗透(一) | 域渗透之SPN服务主体名称

CMD命令查看WiFi密码

posted @ 2021-11-29 20:59  404p3rs0n  阅读(1047)  评论(0编辑  收藏  举报