内网探测之SPN服务扫描及相关利用
在写下一个大块之前,补充一些小知识点,也没啥新东西
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服务扫描及相关利用的更多相关文章
- ssrf漏洞利用(内网探测、打redis)
摘要:存在ssrf漏洞的站点主要利用四个协议,分别是http.file.gopher.dict协议. file协议拿来进行本地文件的读取,http协议拿来进行内网的ip扫描.端口探测,如果探测到637 ...
- Nginx代理实现内网主机访问公网服务
通过Nginx代理实现内网主机访问公网和接口服务 1.需求: m2.test.com为公司测试环境的微信测试域名,因为要调用微信服务接口需要访问外网,现通过Nginx代理现实此功能. 2.环境如下: ...
- 内网安全工具之hscan扫描
工具下载地址:hscan1.2.zip 界面简单,看配置: 这里我们主要需要配置的是模块和参数 模块,按照默认配置就行,取消 check HTTP vulnerability(漏洞检测) 会更快一点. ...
- 记一次metasploitable2内网渗透之samba服务的攻击
80端口中对应一些web靶场,在这里不记录 111端口的利用是向rpcbind服务的UDP套接字发送60字节载荷,便可填充目标内存,搞崩主机系统.在这里也不记录 Samba服务简介 Samba是在Li ...
- php内网探测脚本&简单代理访问
<?php $url = isset($_REQUEST['u'])?$_REQUEST['u']:null; $ip = isset($_REQUEST['i'])?$_REQUEST['i' ...
- 内网学习之MySQL服务提权
利用MySQL提权原理: 1.具有mysql的root权限,且mysql以system权限运行. 2.具有执行sql语句的权限,webshell或者外连皆可 UDF提权 UDF(user define ...
- docker frps 内网穿透容器化服务
准备 域名解析 将frp.xx.com解析到服务器ip,将泛域名 *.frp.xx.com解析到frp.xx.com即可 https证书申请 泛域名证书现在可以用acme.sh申请Let's Encr ...
- wooyun内网渗透教学分享之内网信息探测和后渗透准备
常规的,从web业务撕开口子url:bit.tcl.comgetshell很简单,phpcms的,一个Phpcms V9 uc api SQL的老洞直接getshell,拿到shell,权限很高,sy ...
- Linux 通过rinetd端口转发来访问内网服务
可以通过端口映射的方式,来通过具有公网的云服务器 ECS 访问用户名下其它未购买公网带宽的内网 ECS 上的服务.端口映射的方案有很多,比如 Linux 下的 SSH Tunnel.rinetd,Wi ...
随机推荐
- Auto update Python 2.x to 3.x
1, How to check the python version import sys if sys.version_info < (3.0) print ("python ...
- java中使用for循环删除List集合的陷阱
一直以为是数据库的数据取错了,导致后面for循环出错.慢慢调试之后,发现这原来是一个坑.回到正题 (错误示范:使用for循环删除list集合) for(int i=0;i<list.size() ...
- [转]12个scp传输文件的命令栗子
原文地址: https://www.cnblogs.com/voidy/p/4215891.html copy原文是为了修改部分错误以及便于记录自己的笔记.英文原文点:这里 安全复制 Scp(Secu ...
- Java多线程事务管理
今天要讨论的是"Java实现多线程单条数据事务管理",在此之前,顺便回顾一下实现多线程的几种方式 实现多线程的三种方式 一.继承Thread类 第一种方法是继承Thread类,重写 ...
- U149791 正多边形变换
原博客网页--洛谷博客 题目地址 如果您对群论有所了解,那么本题就是对二面体群 \(D_{2n}\) 的简单实现,您可以直接跳到代码部分.下面的解题思路只是对二面体群 \(D_{2n}\) 的构造思路 ...
- ARTS第一周
开始进行的第一周. 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有观点和思 ...
- python使用笔记004-冒泡排序
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小.首字母从Z到A)错误就把他们交换过来.走访元素 ...
- python 子类调用 父类的构造函数
class A(object): def __init__(self): self.nameaa = 'aa' def funca(self): print('function a %s' % sel ...
- DataFrame的创建
DataFrame的创建从Spark2.0以上版本开始,Spark使用全新的SparkSession接口替代Spark1.6中的SQLContext及HiveContext接口来实现其对数据加载.转换 ...
- react应用(基于react脚手架)
使用create-react-app创建react应用 react脚手架 1) xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 a. 包含了所有需要的配置 b. 指定好了所有的依赖 ...