在写下一个大块之前,补充一些小知识点,也没啥新东西

0x01简介

如果常规扫描服务,结果不理想,非常GG,可以考虑使用SPN进行服务扫描,这是为了借助Kerberos的正常查询行为(向域控发起LDAP查询)作掩护进行设备难以探测的扫描

SPN(服务主体名service principal name)是微软为了在域环境中方便管理资源而为每种资源分配设计的一种表示方法(或者说SPN是使用Kerberos身份验证的网络中唯一的标识

符),凡是使用Kerberos身份验证的网络中,都必须在机器账号或用户账号下为服务注册SPN(每个使用Kerberos的服务都需要一个SPN)

如果一个服务的权限是local system或者是network service,则SPN注册到机器账号下;

如果一个服务的权限是域用户,则SPN注册到用户账号下

如果是在域用户账号下运行服务必须要手动注册SPN,而Kerberos身份验证机制就是使用SPN将服务实例域服务登录账号关联起来的,即一个域中的计算机上安装了多个服务实例,则每个实例都有自己的SPN

格式如下:

serviceclass / host:port servicename

其中serviceclass为服务组件名

host 为计算机FQDN

port 为该服务监听的端口号

servicename 服务的专有名(distinguished name--DN)或者objectGUID或者Internet 主机名或者FQDN

其中serviceclass和host是必选参数,剩下的是可选可不选的

不同服务的这个服务组件名不一样,具体可以查查(列到下面了)

SetSPN是一个本地的windows二进制文件,用于检索用户账户与服务之间的映射,可用于添加删除查看SPN(win2003没有此功能)

在域用户下

setspn -q */*    (命令不要写错)

查看某指定域内SPN信息

setspn -T 域名 -q */*

(同理,要打的码太多不截图了)

从活动目录中发现服务可以通过SPN扫描,原因还是最先说的,和那些网络扫描相比,SPN服务扫描不会通过连接IP实现判断(这样可能会触发报警),而是通过Kerberos原理来向域控查询服务,域内任何用户都可以使用此方法

比如  setspn -q */* | findstr "MSSQL"

会查找域中所有服务名带"MSSQL"的SPN

或者找FQDN或者别的什么也行,改一下findstr"这里的内容"

https://www.cnblogs.com/wuxinmengyi/p/11601351.html

这篇文章中列举了一些SPN服务名

AcronisAgent:针对Acronis备份和数据恢复软件

AdtServer:带有ACS的Microsoft System Center Operations Manager(2007/2012)管理服务器

afpserver:Apple归档协议

AgpmServer:Microsoft高级组策略管理(AGPM)

aradminsvc - 任务主角色服务器

arssvc - 任务主角色服务器

bocms:商业化CMS

BOSSO:商业对象

CESREMOTE:与VMWare上的Citrix VDI解决方案有关,许多VDI工作站都有这个SPN。

cifs:通用Internet文件系统

CmRcService:Microsoft系统中心配置管理器(SCCM)远程控制

CUSESSIONKEYSVR:CiscoUnity VOIP系统

cvs:CVS库

Dfsr *:分布式文件系统

DNS:域名服务器

E3514235-4B06-11D1-AB04-00C04FC2DCD2:NTDS DC RPC复制

E3514235-4B06-11D1-AB04-00C04FC2DCD2-ADAM:ADAM实例

EDVR:ExacqVision服务

exchangeAB:Exchange通讯簿服务(通常是支持NSPI的域控制器,也通常是所有的GC)

exchangeMDB:RPC客户端访问服务器角色

exchangeRFR:交换通讯簿服务

fcsvr:Apple FinalCut Server

FileRepService:WSFileRepService.exe

FIMService:MicrosoftForefront标识管理器(FIM)

ftp:文件传输协议

GC:域控制器全局编录服务

HDFS:Hadoop(Ambari)

host:主机服务代表主机。HOSTSPN用于在创建服务票据时访问由Kerberos协议使用长期密钥的主机帐户。

http:支持Kerberos身份验证的http网络服务的SPN

Hyper-V副本服务:MicrosoftHyper-V的副本服务

IMAP:Internet消息访问协议

IMAP4:Internet消息访问协议版本4

ipp:Internet打印协议

iSCSITarget:iSCSI 配置

kadmin:Kerberos

ldap:LDAP服务,如域控制器或ADAM实例。

Magfs:MaginaticsMagFS

mapred:Cloudera

Microsoft虚拟控制台服务:HyperV主机

Microsoft虚拟系统迁移服务:P2V支持(Hyper-V)

mongod:MongoDBEnterprise

mongos:MongoDBEnterprise

MSClusterVirtualServer:Windows群集服务器

MSOLAPSvc:SQLServer分析服务

MSOLAPSvc.3:SQLServer分析服务

MSOLAPDisco.3:SQLServer分析服务

MSOMHSvc:Microsoft系统中心运营经理(2007/2012)管理服务器

MSOMSdkSvc:MicrosoftSystem Center Operations Manager(2007/2012)管理服务器

MSServerCluster:Windows群集服务器

MSServerClusterMgmtAPI:此群集API需要此SPN才能通过使用Kerberos向服务器进行身份验证

MSSQL:Microsoft SQLServer

MSSQLSvc:MicrosoftSQL Server

MSSQL $ ADOBECONNECT:支持Adobe Connect的Microsoft SQL Server

MSSQL $ BIZTALK:MicrosoftSQL Server支持Microsoft Biztalk服务器

MSSQL $ BUSINESSOBJECTS:支持Business Objects的Microsoft SQL Server

MSSQL $ DB01NETIQ:支持NetIQ的Microsoft SQL Server

nfs:网络文件系统

NPPolicyEvaluator:戴尔Quest审计员

NPRepository 4(CHANGEAUDITOR):戴尔Quest Change Auditor

NPRepository4(CAAD):戴尔Quest审核员

NPRepository4(默认):戴尔任务审计员

NtFrs *:NT文件复制服务

oracle:OracleKerberos身份验证

pcast:苹果播客制作人

PCNSCLNT:自动密码同步解决方案(MIIS 2003&FIM)

POP:邮箱协议

POP3:邮箱协议版本3

PVSSoap:Citrix ProvisioningServices(7.1)

RestrictedKrbHost:使用服务类字符串等于“RestrictedKrbHost”的 SPN的服务类,其服务凭单使用计算机帐户密钥并共享会话密钥。

RPC:远程过程调用服务

SAP:SAP /SAPService

SAS:SAS服务器

SCVMM:System Center虚拟机管理器

secshd:IBMInfoSphere

sip:会话启动协议

SMTP:简单邮件传输协议

SMTPSVC:简单邮件传输协议

SoftGrid: Microsoft应用程序虚拟化(App-V)以前的“SoftGrid”

STS:VMWare SSO服务

SQLAgent $ DB01NETIQ:NetIQ的SQL服务

tapinego:与路由应用程序相关联,例如Microsoft防火墙(ISA,TMG等)

TERMSRV:Microsoft远程桌面协议服务,又名终端服务。

tnetd:JuniperKerberos身份验证 “Tnetd是一个守护进程,用于路由引擎和数据包转发引擎等不同组件之间的内部通信”

vmrc:Microsoft VirtualServer 2005

vnc:VNC服务器

VPN:虚拟专用网络

VProRecovery Backup Exec系统恢复代理7.0

VProRecovery Backup Exec系统恢复代理8.0

VProRecovery Backup Exec系统恢复代理9.0

VProRecovery诺顿克隆代理12.0

VProRecovery诺顿

克隆代理14.0 VProRecovery诺顿克隆代理15.0

VProRecovery Symantec系统恢复代理10.0

VProRecovery Symantec系统恢复代理11.0

VProRecovery Symantec系统恢复代理14.0

vssrvc:微软虚拟服务器(2005)

WSMAN:Windows远程管理(基于WS-Management标准)服务

xmpp / XMPP:可扩展消息和呈现协议(Jabber)

xgrid:苹果的分布式(网格)计算/ Mac OS X 10.6服务器管理

等等

供参考

0x02 SPN服务扫描工具

1.PowerShell-AD-Recon工具包

链接奉上:https://github.com/PyroTek3/PowerShell-AD-Recon

后缀有问题的,自己加上.ps1即可

这个脚本可以查询域内所有SPN信息

看看哪些用户的计算机上有哪些SPNServices

这个脚本可以查域内的MSSQL服务

2.其他脚本(以下不演示了,具体使用方法请移步  https://www.freebuf.com/articles/system/174229.html  这篇文章)

(1)GetUserSPNs:属于Kerberos工具包的一部分

下载链接:https://github.com/nidem/kerberoast

(2)PowerShellery

下载链接:https://github.com/nullbind/Powershellery/blob/master/Stable-ish/Get-SPN/Get-SPN.psm1

(3)PowerView

老熟人了

里面也有类似功能的脚本powerview.ps1

下载链接:https://github.com/PowerShellEmpire/PowerTools

执行以下命令

Import-module .\powerview.ps1

Get-NetUser -SPN

即可

(4)Impacket

又一个老熟人

下载链接:https://github.com/SecureAuthCorp/impacket/tree/62162e0a1e0b55186ad0517e5b37532a06d9b70c

(5)Empire

嗯,里面也有内置模块

usemodule situational_awareness/network/get_spn

0x03 Kerberoast攻击

既然讲到SPN,那就离不开利用它的Kerberoast攻击,即破解Kerberos服务票据并重写,从而获得目标服务的访问权限(过程中是合法访问、离线破解服务票据,而完全不需要与服务目标有任何交互行为)

问:Kerberoast攻击总共分几步?

答:五步

SPN发现

请求服务票据

导出服务票据

破解服务票据

重写服务票据

妥了,按照步骤来(SPN在上一点讲过了),这里只是举个例子

1.请求服务票据

事先说明:域内任意主机都可以查询SPN,但是真正攻击可利用的只有域用户下注册的SPN

比如我findstr搜一下我的机器名(我是域用户登录的)

找一条现有的SPN服务(正常来说是,域用户账号下,要用setspn - A 为某个原本不存在SPN服务的服务账号手动注册SPN,然后利用的时候选这个手动注册的SPN )

在powershell中执行

Add-Type -AssemblyName System.IdentityModel

然后 New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "SPN服务名"

为我选择的SPN服务请求服务票据

klist查看一下结果

可用的缓存票据中存在我刚刚请求的票证

但是,这里存在一个问题,可以看到我这里的会话秘钥的类型是AES-256,这是一个不可利用破解的加密方式,需要改成RC4才能利用脚本破解

gpedit.msc组策略中修改

修改后再重新来一遍以上操作

2.导出服务票据

然后用mimikatz导出票据,mimikatz路径下 cmd窗口执行

mimikatz.exe "kerberos::list /export" "exit"

诶,这个就是刚刚的票据

3.破解服务票据

上面那个Kerberoast工具包中,有tgsrepcrack.py这个脚本,可用来破解

python tgsrepcrack.py dictionary.txt 选中的票据文件

不过需要python相关库和字典......

4.重写服务票据

这个密码破解出来了,可以利用上面的Kerberoast工具包中的kerberoast.py脚本进行票据重写

实现访问服务时的身份伪造,甚至提权

最后把新票据注入内存

详细内容请参考 : https://www.freebuf.com/articles/system/174967.html

参考文章:

https://www.freebuf.com/articles/system/174967.html

https://www.cnblogs.com/wuxinmengyi/p/11601357.html

这两篇文章写得比较全面,具体操作可以学习一下

随便转载,请标明作者出处

内网探测之SPN服务扫描及相关利用的更多相关文章

  1. ssrf漏洞利用(内网探测、打redis)

    摘要:存在ssrf漏洞的站点主要利用四个协议,分别是http.file.gopher.dict协议. file协议拿来进行本地文件的读取,http协议拿来进行内网的ip扫描.端口探测,如果探测到637 ...

  2. Nginx代理实现内网主机访问公网服务

    通过Nginx代理实现内网主机访问公网和接口服务 1.需求: m2.test.com为公司测试环境的微信测试域名,因为要调用微信服务接口需要访问外网,现通过Nginx代理现实此功能. 2.环境如下: ...

  3. 内网安全工具之hscan扫描

    工具下载地址:hscan1.2.zip 界面简单,看配置: 这里我们主要需要配置的是模块和参数 模块,按照默认配置就行,取消 check HTTP vulnerability(漏洞检测) 会更快一点. ...

  4. 记一次metasploitable2内网渗透之samba服务的攻击

    80端口中对应一些web靶场,在这里不记录 111端口的利用是向rpcbind服务的UDP套接字发送60字节载荷,便可填充目标内存,搞崩主机系统.在这里也不记录 Samba服务简介 Samba是在Li ...

  5. php内网探测脚本&简单代理访问

    <?php $url = isset($_REQUEST['u'])?$_REQUEST['u']:null; $ip = isset($_REQUEST['i'])?$_REQUEST['i' ...

  6. 内网学习之MySQL服务提权

    利用MySQL提权原理: 1.具有mysql的root权限,且mysql以system权限运行. 2.具有执行sql语句的权限,webshell或者外连皆可 UDF提权 UDF(user define ...

  7. docker frps 内网穿透容器化服务

    准备 域名解析 将frp.xx.com解析到服务器ip,将泛域名 *.frp.xx.com解析到frp.xx.com即可 https证书申请 泛域名证书现在可以用acme.sh申请Let's Encr ...

  8. wooyun内网渗透教学分享之内网信息探测和后渗透准备

    常规的,从web业务撕开口子url:bit.tcl.comgetshell很简单,phpcms的,一个Phpcms V9 uc api SQL的老洞直接getshell,拿到shell,权限很高,sy ...

  9. Linux 通过rinetd端口转发来访问内网服务

    可以通过端口映射的方式,来通过具有公网的云服务器 ECS 访问用户名下其它未购买公网带宽的内网 ECS 上的服务.端口映射的方案有很多,比如 Linux 下的 SSH Tunnel.rinetd,Wi ...

随机推荐

  1. 在Ubuntu 16.04中搭建RobotFramework环境

    1.搭建RF环境 2.安装RF相关库 3.查看RF case 4.设置环境变量 相关知识点:pip  --proxy=http://xx.xx.xx.xx:xx install 包名,使用pip的-- ...

  2. 使用xcode实现IM的那些坑

    想用xcode基于XMPP实现即时通讯,mac必须安装openfire(xmpp服务器),mysql(本地数据库,用于配置openfire),JDK(打开openfire必须本地具备java环境),x ...

  3. Word转PDF的VBA脚本

    将以下内容复制粘贴在一个txt中,修改txt后缀为".vbs" On Error Resume Next Const wdExportFormatPDF = 17 Set oWor ...

  4. .Net Core微服务——服务发现:Consul(二)

    今天有写文章的时间了,开心.延续上一篇的话题继续,顺便放上一篇的传送门:点这里. 服务调用 既然服务注册已经搞完了,那么现在就开始调用这些注册好的服务.先做一下准备动作,把consul容器跑起来: 打 ...

  5. python -- 面向对象编程(继承、重写)

    一.继承 子类可以继承父类的所有公有成员,但不能直接访问父类的私有成员,只能通过父类的公有方法间接访问私有属性或私有方法. 如: class DerviedClassName(BaseClassNam ...

  6. python里面的==,is的区别

    python中对象的三个要素:id(身份标示),type(数据类型).value(值) ==  比较操作符:用来比较两个对象值是否相等. is  同一性运算符:比较两个对象的id值是否相等,即是否是同 ...

  7. Django中F对象,Q对象与运算符

    在Django的模型中F对象与Q对象比较常用的,所以单独说一下: F对象 F对象位于django.dc.models模板下,使用的时候记得首先导入!!! 作用:F对象主要用于当模型的字段A与字段B进行 ...

  8. 【阅读笔记】Java核心技术卷一 #4.Chapter6

    6 接口.lambda 表达式与内部类 6.1 接口 6.1.1 接口概念 接口绝不能含有实例域:但在接口中可以定义常量,被自动设为 public static final 接口中的所有方法自动地属于 ...

  9. 在nodejs中利用 Proxy监听对象值的获取

    1 window = new Proxy(global, { 2 get: function (target, key, receiver) { 3 console.log("window. ...

  10. SQL根据两个日期生成年、月、日

    1 DECLARE @beginTime DATETIME, @endTime DATETIME 2 SET @beginTime ='2019-03-01' 3 SET @endTime ='201 ...