SPN扫描–无需网络端口扫描的进行信息收集

32 篇文章 10 订阅
17 篇文章 7 订阅

目录

讲在前面

简介SPN的知识点:

SPN命名实例

SPN默认实例

部分查询SPN脚本

windows自带setspn.exe,部分命令如下:

GetUserSPNs.ps1

GetUserSPNs.vbs

PowerView.ps1

总结:


讲在前面

在Active Directory环境中发现服务的最佳方法是通过所谓的“ SPN扫描”。攻击者进行SPN扫描的主要好处是,SPN扫描不需要连接到域内网络上的每个IP即可检查服务端口。SPN扫描通过对域控制器的LDAP查询执行服务发现。由于SPN查询是正常Kerberos票证行为的一部分,因此即使是攻击者,检测也很难发现是善意还是恶意的查询,而netowkr端口扫描非常明显。

发现利用Kerberos身份验证的服务时需要服务主体名称(SPN: Service Principal Names

简介SPN的知识点:

SPN 是服务使用 Kerberos 身份认证协议在网络上的唯一标识符,它由服务类、主机名和端口组成。在使用 Kerberos 身份认证的网络中,必须在内置计算机帐户(如 NetworkService 或 LocalSystem)或用户帐户下为服务器注册 SPN。对于内置帐户,SPN 将自动进行注册。但是,如果在域用户帐户下运行服务,则必须要使用其帐户手动注册SPN,一个用户账户下可以有多个SPN,但一个SPN只能注册到一个账户

我们处于Active Directory环境中。要了解什么是SPN,我们必须了解Active Directory中的服务概念是什么。服务实际上是一种功能,一种软件,可以由AD(Active Directory)的其他成员使用。例如,你可以拥有Web服务器,网络共享,DNS服务,打印服务等。要识别服务,我们至少需要知道两件事。相同的服务可以在不同的主机上运行,​​因此我们需要指定host,而计算机可以承载多个服务,因此显然需要指定service

SPN命名实例

  • MSSQLSvc / <FQDN>:[<端口> | <instancename>],其中:

    • MSSQLSvc是正在注册的服务。

    • <FQDN>是服务器的标准域名。

    • <port>是TCP端口号。

    • <instancename>是SQL Server实例的名称。

SPN默认实例

  • MSSQLSvc / <FQDN>:<端口> | MSSQLSvc / <FQDN>,其中:

    • MSSQLSvc是正在注册的服务。

    • <FQDN>是服务器的标准域名。

    • <port>是TCP端口号。

注意:新的SPN格式不需要端口号。这意味着多端口服务器或不使用端口号的协议可以使用Kerberos身份验证。

MSSQLSvc/<服务器的标准域名>:<TCP端口>使用TCP时,提供程序生成的默认SPN。<port>是一个TCP端口号
MSSQLSvc/<服务器的标准域名>当使用TCP以外的协议时,提供程序为默认实例提供的默认SPN。<FQDN>是完全限定的域名。
MSSQLSvc/<服务器的标准域名>:<实例的名称>当使用TCP以外的协议时,提供商为命名实例生成的默认SPN。<instancename>是MSSQLSvc实例的名称。

部分查询SPN脚本

注意:域内普通用户可以查询,但只有域管理权限才可以增改删SPN

windows自带setspn.exe,部分命令如下:

查看当前域内所有的SPN:setspn -q */*

查看指定域pig.com注册的SPN:setspn -T pig.com -q */*   如果指定域不存在,则默认切换到查找本域的SPN

查找本域内重复的SPN:setspn -X

删除指定SPN:setspn -D MSSQLSvc/WIN-6IKRAED2RMI.pig.com:hello Administrator   需要域管理员权限

查找指定用户/主机名注册的SPN:setspn -L username/hostname

在指定账户或主机名下注册SPN: setspn -U -A VNC/DC1.test.com Administrator     需要域管理员权限

查看当前域内所有的SPN:setspn -q */*

查看指定域pig.com注册的SPN:setspn -T pig.com -q */*

查找本域内重复的SPN:setspn -X

删除指定SPN:setspn -D MSSQLSvc/WIN-6IKRAED2RMI.pig.com:hello Administrator 

查找指定用户注册的SPN:setspn -L username

查找指定主机名注册的SPN:setspn -L hostname

在指定账户或主机名下注册SPN: setspn -U -A VNC/DC1.test.com Administrator 

GetUserSPNs.ps1

GetUserSPNs.vbs

PowerView.ps1

总结:

在实战中,我们可以通过SPN扫描,避免内网中的某些防火墙的检测。望各位结合实战环境和自己的偏好进行使用,当然impacket和Empire的工具集内已集成了收集SPN的脚本和模块,您可以深入研究其用法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值