2026SUCTF SU_LightNovel WriteWp
字数 5664
更新时间 2026-05-10 17:02:45

2026 SUCTF SU_LightNovel 流量分析与域渗透解密教学文档

一、题目背景与核心考点

本题为2026 SUCTF AD类题目,融合了NTLM身份验证Windows RPC计划任务流量Kerberos协议(含U2U机制)PKINIT证书认证TimeRoasting攻击等域渗透核心技术,难度较往年SU_AD系列显著提升。流量包主要包含两部分:前期NTLM验证流量(无效干扰项)和后期Kerberos加密的RPC计划任务流量(核心有效内容)。

二、环境准备与工具清单

工具/资源 用途 备注
Wireshark 流量分析与协议解析 需配置NTLMSSP首选项、Kerberos keytab
tshark 命令行提取流量字段 用于批量提取解密后的RPC stub数据
hashcat NTLM Hash破解 配合ntlmrawunhide.py提取Hash
impacket Kerberos票据(ccache)解析 提取TGT Session Key
steghide 图片隐写提取 处理cert.jpg中的藏头诗隐写
Python脚本 AES-CBC解密、Base64解码、流量拼接 自定义脚本处理RPC加密stub数据
官方WP与附件 参考解法与流量包 链接:https://blog.0ran9e.cn/posts/ctf/suctf2026/;附件:https://img.enxiaohao.cn/CTFAttachments/SU_LightNovel.zip

三、Step 1:NTLM Hash解密(干扰项排除)

3.1 流量特征与Hash提取

流量初期(frame 42、759)为NTLM身份验证流量,可通过ntlmrawunhide.py提取NTLM Hash,再用hashcat破解:

# 提取NTLM Hash(示例)
ntlmrawunhide.py suctf-ad.pcapng > ntlm_hash.txt
# hashcat破解(模式3000为NTLM)
hashcat -a 0 -m 3000 ntlm_hash.txt rockyou.txt

破解结果:91kanna.seto::wire.com:e9b597a6e03a5122:c4ec074163bee82d9f829d1aa22de185(密码taylorswift<3)。

3.2 干扰项验证

该NTLM验证为无效干扰,后续有效流量均基于Kerberos加密,需忽略此部分结果。

四、Step 2:Windows RPC计划任务流量分析

4.1 RPC操作类型识别

流量中涉及Task Scheduler RPC(端口135/593),核心操作类型及含义:

opnum 函数名 作用 流量特征
1 SchRpcRegisterTask 创建/覆盖计划任务 大包,含完整任务XML
2 SchRpcRetrieveTask 取回任务XML 小包,返回任务配置
13 SchRpcDelete 删除任务 无数据载荷
14 SchRpcRename 重命名任务 含新旧任务名
19 SchRpcEnableTask 启用/禁用任务 含任务状态标志

4.2 流量流程还原

客户端与目标主机(DC01.wire.com)的交互流程:

  1. 远程连接任务计划服务(TCP三次握手);
  2. SchRpcRegisterTask(opnum 1):注册任务(frame 881-2572,大包含任务XML);
  3. 运行任务并轮询状态;
  4. SchRpcRetrieveTask(opnum 2):取回任务结果XML(frame 2636-2644);
  5. SchRpcDelete(opnum 13):删除任务(清理痕迹)。

4.3 任务XML提取与解密

4.3.1 Wireshark自动解密(小包)

配置NTLMSSP首选项(Edit → Preferences → Protocols → NTLMSSP → NT Password设为taylorswift<3),可直接解密frame 42、759的任务XML,提取task description字段(Base64编码)。

4.3.2 手动提取(大包)

注册任务的RPC包(frame 881-2572)过大,Wireshark无法自动重组,需用tshark提取解密后的stub数据:

tshark -o "ntlmssp.nt_password:taylorswift<3" -r suctf-ad.pcapng -Y "frame.number==42" -T fields -e frame.number -e dcerpc.decrypted_stub_data | xxd -r -p > task_xml.bin

解码task description

import base64
payload = "..."  # 从XML中提取的Base64字符串
decoded = base64.b64decode(payload).decode("utf-16le")  # UTF-16LE为Windows默认编码

4.3.3 核心函数分析

任务XML中调用DownloadByPs($taskname),其逻辑为:

  1. 将目标文件Base64编码;
  2. 存入task description字段;
  3. 上传至客户端。

提取frame 759的task description,Base64解码后得到ZIP包,密码仍为taylorswift<3,但hint.zip无有效信息,确认NTLM部分为干扰。

五、Step 3:Kerberos通信解密与RPC流量重组

5.1 Kerberos流量筛选

过滤kerberos协议,发现两次通信:

  • 第一次(tcp.stream=5,frame 844-2652):核心有效流量,申请host/dc01.wire.com服务票据;
  • 第二次(frame 2671后):后续RPC操作,需导入keytab解密。

5.2 Keytab制作与Wireshark配置

5.2.1 Keytab生成

已知Kerberos认证密码为taylorswift<3,使用ktutil生成keytab:

ktutil
ktutil: addent -password -p administrator@WIRE.COM -k 1 -e aes256-cts-hmac-sha1-96
Password for administrator@WIRE.COM: taylorswift<3
ktutil: wkt admin.keytab
ktutil: quit

5.2.2 Wireshark导入Keytab

Edit → Preferences → Protocols → KRB5 → Keytab Files添加admin.keytab,Wireshark会自动解密Kerberos票据。

5.3 RPC Stub数据解密(Packet Privacy)

SchRpcRegisterTask启用Packet Privacy(RPC加密),需从Kerberos的AP-REQ中提取subkey(frame 876):

  1. 在Wireshark中找到KRB5 → AP-REQ → Authenticator → subkey
  2. 复制subkey的十六进制值(如0x1a2b3c...);
  3. 使用Python脚本拼接RPC分段包并解密(示例代码):
from Crypto.Cipher import AES
import binascii

subkey = binascii.unhexlify("1a2b3c...")  # 从frame 876提取的subkey
iv = binascii.unhexlify("...")  # 从RPC stub中提取的IV
ciphertext = binascii.unhexlify("...")  # 加密的RPC stub数据

cipher = AES.new(subkey, AES.MODE_CBC, iv)
plaintext = cipher.decrypt(ciphertext)

六、Step 4:Cert.zip提取与隐写分析

6.1 Cert.zip解密

从RPC解密后的数据中,提取cert.zip(Base64编码→解码),密码仍为taylorswift<3

6.2 隐写破解(cert.jpg)

cert.zip中含cert.jpg,使用steghide提取隐写文件:

steghide extract -sf cert.jpg

提示输入密码,根据“藏头诗”线索(cert.jpg内容为濑户环奈相关),密码为濑户环奈倾城绝色,提取得到poem.txt

七、Step 5:Administrator NTHash与明文密码破解

7.1 U2U机制与TGT Session Key提取

7.1.1 U2U原理

攻击者使用U2U(User-to-User)机制:拿Administrator的TGT,向KDC请求“发给Administrator自己”的票(enc-tkt-in-skey: True),KDC返回用Administrator的TGT Session Key加密的TGS票据。

7.1.2 TGT Session Key提取

使用impacket解析Administrator@WIRE.COM.ccache(从cert.zip提取):

impacket-ccache2john Administrator@WIRE.COM.ccache > ccache.hash
john --show ccache.hash  # 提取TGT Session Key

7.2 PAC_CREDENTIAL_INFO解密

7.2.1 AS Reply Key获取

cert.zip中含key文件(01ea8c39173e5e4afbb5a6580b118e4cc21b16d399b8e2322b9090e68acd080a),此为PKINIT AS Reply Key(KDC与客户端通过证书协商生成,用于加密AS-REP的enc-part)。

7.2.2 NTLM Hash提取

解密TGS票据的enc-ticket,提取authorization-data → PAC → PAC_CREDENTIAL_INFO(用AS Reply Key,key usage 16解密),其中包含NTLM_SUPPLEMENTAL_CREDENTIAL,最终得到Administrator的NTLM Hash:xxxxxx(对应明文密码Talor@1989)。

八、Step 6:TimeRoasting攻击与Flag解密

8.1 TimeRoasting原理

Kerberos时间同步(NTP)时,DC返回的时间响应包含认证MACMAC = MD5_HMAC(客户端NT Hash, NTP数据)。攻击者枚举NT Hash,与MAC碰撞即可破解密码。

8.2 哈希提取与爆破

从流量中提取TimeRoast哈希(服务端响应frame 775、789),使用timeroast.py爆破:

timeroast.py -r suctf-ad.pcapng -o timeroast.hash
hashcat -a 0 -m 9600 timeroast.hash rockyou.txt

破解结果:明文密码*joker*123

8.3 Flag解密

使用密码*joker*123的SHA256作为AES-CBC的key和IV,解密flag.txt

import hashlib
from Crypto.Cipher import AES

password = "*joker*123"
key_iv = hashlib.sha256(password.encode()).digest()  # SHA256(password)作为key和IV
cipher = AES.new(key_iv, AES.MODE_CBC, key_iv)
flag = cipher.decrypt(encrypted_flag).strip(b"\x00")
print(flag.decode())

九、关键知识点总结

技术点 核心原理
NTLM身份验证 基于挑战-响应的哈希认证,Hash格式为LMHash:NTHash
RPC计划任务流量 Task Scheduler RPC的opnum对应不同操作,任务XML含Base64编码的文件数据
Kerberos U2U 请求“发给自己的票”,用TGT Session Key加密TGS票据,绕过服务密钥
PKINIT认证 证书预认证,协商AS Reply Key加密AS-REP enc-part
PAC_CREDENTIAL_INFO 存储NTLM Hash,用AS Reply Key加密,需结合PKINIT证书解密
TimeRoasting 利用NTP时间响应的HMAC碰撞,枚举客户端NT Hash

十、常见问题与解决方案

  1. Wireshark无法解密RPC stub:需手动提取subkey(frame 876),用Python脚本拼接分段包并解密;
  2. steghide提取失败:确认密码为“藏头诗”(濑户环奈倾城绝色),而非taylorswift<3
  3. TimeRoast哈希提取错误:过滤ntp协议,提取服务端响应包(frame 775、789)中的authenticator mac字段。

通过以上步骤,可完整还原题目流量中的域渗透路径,最终解密Flag。

相似文章
相似文章
 全屏