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

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. 12 shell case in语句

    Shell也支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句.当分支较多,并且判断条件比较简单时,使用 case in 语句就比较方便了. if else 语句与ca ...

  2. 在Redis中设置了过期时间的Key,需要注意哪些问题?

    熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过期时间需要注意的事项 1. DEL/SET/GETSET等 ...

  3. 【转载】每天一个linux命令(11):nl命令

    转载至:http://www.cnblogs.com/peida/archive/2012/11/01/2749048.html nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内 ...

  4. Parrot os 安装vmtools

    1.更新源(这步个人觉得官方源还可以,没网上说的那么慢) vim /etc/apt/sources.list.d/parrot.list linux命令 ,按i进入修改模式,修改结束,之后先按esc, ...

  5. 小程序textarea设置maxlength后不是你想的那样简单

    可能很多小伙伴们.看见这个标题后; 觉得作者是一个标题党. textarea设置maxlength后, 限制用户输入的字符呗! 还能怎么样呢? 恭喜你,说对了一半. 之前我也一直是这样想的. 知道今天 ...

  6. Redis的结构和运作机制

    目录 1.数据库的结构 1.1 字典的底层实现 2.过期键的检查和清除 2.1 定时删除 2.2 惰性删除 2.3 定期删除 2.4 对RDB.AOF和复制的影响 3.持久化机制 3.1 RDB方式 ...

  7. 题解 SP3591 PATHEADS - Patting Heads

    类似桶排 先看有多少头奶牛抽出这个数 再看这个数的奶牛能拍多少人的头(别忘了-1,自己不能拍自己) 最后根据输入输出 110ms #include<bits/stdc++.h> using ...

  8. GYM101471D「ICPC2017 WF」Money for Nothing

    「ICPC2017 WF」Money for Nothing 传送门 我们可将生产商和消费商都看成二维平面上的点,其坐标分别为 \((d_i,p_i)\),\((e_i,q_i)\). 那么问题转变为 ...

  9. python使用笔记24--面向对象编程2

    类方法 类里面自带的方法,不用实例化就可以调用,想象,模型上自带的功能 类方法是公共的,在实例方法里面可以随意调用 但是在类方法里不能调用实例方法,不能使用实例变量,但是他可以调用其他的类方法 1 @ ...

  10. 常见数据库SELECT结果只显示前几条记录方法汇总

    常见数据库SELECT结果只显示前几条记录方法汇总 为了查看数据表中的数据情况.经常会遇到想让查询结果只显示N行,比如只显示10行的情况.不同的数据库有不同的关键字和SELECT实现语法. 1.SQL ...