2024强网杯—谍影重重5.0
😉🌃⛅😉
乍一看,有arp、smb、tls等协议流量
先过滤出smb2流量看看
smb协议主要用于在计算机间共享文件、打印机、串口等
NTLM是一种身份验证机制
smb2爆破
Wireshark分析–SMB2协议包及hashcat爆破_wireshark smb-CSDN博客
通过文章了解到需要构造hash文件
username::domain:NTLM Server Challenge:ntproofstr:不包含ntproofstr的ntlmv2_response值
双击打开这条流量
session id 在header里面
上一条流量
拿到NTLM Server Challenge
ntlmssp.ntlmv2_response:ca32f9b5b48c04ccfa96f35213d63d75010100000000000040d0731fb92adb01221434d6e24970170000000002001e004400450053004b0054004f0050002d004a0030004500450039004d00520001001e004400450053004b0054004f0050002d004a0030004500450039004d00520004001e004400450053004b0054004f0050002d004a0030004500450039004d00520003001e004400450053004b0054004f0050002d004a0030004500450039004d0052000700080040d0731fb92adb0106000400020000000800300030000000000000000100000000200000bd69d88e01f6425e6c1d7f796d55f11bd4bdcb27c845c6ebfac35b8a3acc42c20a001000000000000000000000000000000000000900260063006900660073002f003100370032002e00310036002e003100300035002e003100320039000000000000000000
ntlmssp.ntlmv2_response.ntproofstr:
ca32f9b5b48c04ccfa96f35213d63d75
Server response challenge
ntlmssp.ntlmserverchallenge:
c1dec53240124487
ntlmssp.ntlmv2_response.challenge:
221434d6e2497017
ntlmssp.auth.domain:
.
ntlmssp.auth.username:
tom
组合
tom::.:c1dec53240124487:ca32f9b5b48c04ccfa96f35213d63d75:010100000000000040d0731fb92adb01221434d6e24970170000000002001e004400450053004b0054004f0050002d004a0030004500450039004d00520001001e004400450053004b0054004f0050002d004a0030004500450039004d00520004001e004400450053004b0054004f0050002d004a0030004500450039004d00520003001e004400450053004b0054004f0050002d004a0030004500450039004d0052000700080040d0731fb92adb0106000400020000000800300030000000000000000100000000200000bd69d88e01f6425e6c1d7f796d55f11bd4bdcb27c845c6ebfac35b8a3acc42c20a001000000000000000000000000000000000000900260063006900660073002f003100370032002e00310036002e003100300035002e003100320039000000000000000000
hashcat爆破
hashcat -O -a 0 -m 5600 1.hash rockyou.txt
字典大家随意
#解释
攻击模式 (-a 0): 使用字典攻击模式,逐个尝试字典文件中的密码。
哈希类型 (-m 5600): 指定哈希类型为 NTLMv2,这是 Windows 系统中常用的一种哈希类型。
哈希文件 (1.hash): 指定要破解的哈希文件。
字典文件 (rockyou.txt): 指定用于破解的字典文件,这个文件通常包含大量的常见密码。
#这里当个破解用不着--show
显示结果 (--show): 在破解过程中实时显示破解进度和结果。
babygirl233
要获取这些字段值
必要的信息
用户的明文密码。
用户名 (username) 和域名 (domain)。
捕获的网络包中的 ntProofStr(客户端提供的证明字符串)和 serverChallenge(服务器挑战值)。
加密的会话密钥 (sessionKey)。
获取到了密码然后破解出session key
脚本利用
上面得到sessionkey:5643a37f253b00b2f52df1afd48c1514
from Crypto.Cipher import ARC4
from Crypto.Hash import MD4, MD5, HMAC
password = 'babygirl233'
passwordHash = MD4.new(password.encode('utf-16-le')).hexdigest()
username = 'tom'
domain = '.'
ntProofStr = 'ca32f9b5b48c04ccfa96f35213d63d75'
serverChallenge = 'c1dec53240124487'
sessionKey = '5643a37f253b00b2f52df1afd48c1514'
responseKey = HMAC.new(bytes.fromhex(passwordHash), (username.upper()+domain.upper()).encode('utf-16-le'), MD5).digest()
keyExchangeKey = HMAC.new(responseKey, bytes.fromhex(ntProofStr), MD5).digest()
decryptedSessionKey = ARC4.new(keyExchangeKey).decrypt(bytes.fromhex(sessionKey))
print('Decrypted SMB Session Key is: {}'.format(decryptedSessionKey.hex()))
大致思路
从密码到哈希
用户的明文密码通过特定算法(如MD4)转换成一个固定的哈希值。
这个哈希值将作为后续计算的基础。
生成响应密钥 (Response Key)
使用用户密码的哈希值作为密钥,结合用户名和域名生成一个新的密钥——响应密钥。
生成密钥交换密钥 (Key Exchange Key)
使用上一步生成的响应密钥,结合客户端提供的证明字符串(ntProofStr),生成用于解密会话密钥的密钥——密钥交换密钥。
解密会话密钥 (Session Key)
使用密钥交换密钥作为解密密钥,对加密的会话密钥进行解密,得到最终的明文会话密钥。
#基于对称加密和哈希函数
明文密码 → 哈希
将用户的明文密码通过特定算法(如MD4)转换为一个固定长度的哈希值。
这个哈希值用于后续步骤中的密钥生成。
哈希 → 响应密钥
使用用户密码的哈希值作为输入,结合用户名和域名等信息,通过HMAC-MD5算法生成响应密钥。
响应密钥是一个临时密钥,用于进一步的密钥交换。
响应密钥 → 密钥交换密钥
使用响应密钥和客户端提供的证明字符串(ntProofStr),通过HMAC-MD5算法生成密钥交换密钥。
密钥交换密钥用于解密会话密钥。
密钥交换密钥 → 解密会话密钥
使用密钥交换密钥作为解密密钥,对加密的会话密钥进行解密,得到最终的明文会话密钥。
注意wireshark里面的大小端问题
session key:a3abe4d64394909a641062342ffe291b
session id:0900000000100000
smb流量解密了
发现敏感文件flag.7z
右键追踪tcp流
全部导出
压缩包要密码
还有证书没用上,所以返回去看看rdp和tls流量
1. RDP 中的证书
目的:当您连接到一台 RDP 服务器时,服务器会向客户端发送一个数字证书以证明其身份。如果客户端信任该证书,则可以安全地建立连接。
操作:如果您是服务器管理员,需要将有效的证书安装到 RDP 服务器上,以便客户端能够验证服务器的身份。这通常涉及到从受信任的证书颁发机构(CA)获取证书,并将其安装到服务器的证书存储中。
2. TLS 中的证书
目的:在 TLS 握手过程中,服务器会向客户端发送一个数字证书以证明其身份。客户端会检查该证书是否由可信的 CA 签发,并且证书中的信息是否匹配预期的服务器。
操作:对于 TLS 服务(如 Web 服务器),您需要将证书安装到服务器上,并配置服务以使用这些证书进行 TLS 握手。对于客户端(如浏览器),则需要确保操作系统或应用程序的信任库中包含所有必要的根证书。
注意wireshark的tls证书支持的是.pem格式,用openssl转换
一个 PEM 文件,其中包含用于 RDP 会话的 TLS 加密的 SSL/TLS 证书。
更改文件所有者: 你可以将文件的所有者更改为自己,这样就可以导出到windows中了
Enter Import Password:
:当您创建或导出.pfx
文件时,通常会设置一个导入/导出密码以保护其中的私钥。在这里,系统提示您输入这个密码,以便能够读取并转换.pfx
文件的内容。
密码尝试后mimikatz是对的
#不清楚为什么
有位师傅这么说:通过阅读其他师傅的wp,知道这里出题人是用了mimikatz一把梭,所以用mimikatz来作为密码得到密钥文件
可以查看rdp流量了
未解密的状态
解密后状态
可以使用pyrdp工具
但是我没有装成功所以用其他方法,提取加脚本分析
参考链接如下
例如这里的,可以右键scancode,复制,选里面的列出选中树的所有项目
里面的 rdp.fastpath.scancode.keycode 是对应的键盘码
rdp.fastpath.scancode.release是是否按着,true代表是
tshark -r 1.pcapng -Y "rdp.fastpath.action == 0" -o "tls.keylog_file:./rdp.pem" -T fields -e frame.time -e rdp.fastpath.scancode.keycode -e rdp.fastpath.scancode.release > keyboard_data.txt
解析脚本
def map_keycode(key_code):
"""根据扫描码返回相应的字符或描述"""
# 特殊键的映射
special_keys = {
0x00: 'None', # No key
0x01: 'Esc', # Esc
0x02: '1', # 1
0x03: '2', # 2
0x04: '3', # 3
0x05: '4', # 4
0x06: '5', # 5
0x07: '6', # 6
0x08: '7', # 7
0x09: '8', # 8
0x0A: '9', # 9
0x0B: '0', # 0
0x0C: '-', # -
0x0D: '=', # =
0x0E: 'Backspace', # Backspace
0x0F: 'Tab', # Tab
0x10: 'Q', # Q
0x11: 'W', # W
0x12: 'E', # E
0x13: 'R', # R
0x14: 'T', # T
0x15: 'Y', # Y
0x16: 'U', # U
0x17: 'I', # I
0x18: 'O', # O
0x19: 'P', # P
0x1A: '[', # [
0x1B: ']', # ]
0x1C: 'Enter', # Enter
0x1D: 'Left Ctrl', # Left Control
0x1E: 'A', # A
0x1F: 'S', # S
0x20: 'D', # D
0x21: 'F', # F
0x22: 'G', # G
0x23: 'H', # H
0x24: 'J', # J
0x25: 'K', # K
0x26: 'L', # L
0x27: ';', # ;
0x28: "'", # '
0x29: 'Grave', # `
0x2A: 'Left Shift', # Left Shift
0x2B: 'Backslash', # \
0x2C: 'Z', # Z
0x2D: 'X', # X
0x2E: 'C', # C
0x2F: 'V', # V
0x30: 'B', # B
0x31: 'N', # N
0x32: 'M', # M
0x33: ',', # ,
0x34: '.', # .
0x35: '/', # /
0x36: 'Right Shift', # Right Shift
0x37: 'Keypad *', # Keypad *
0x38: 'Alt', # Alt
0x39: 'Space', # Space
0x3A: 'Caps Lock', # Caps Lock
0x3B: 'F1', # F1
0x3C: 'F2', # F2
0x3D: 'F3', # F3
0x3E: 'F4', # F4
0x3F: 'F5', # F5
0x40: 'F6', # F6
0x41: 'F7', # F7
0x42: 'F8', # F8
0x43: 'F9', # F9
0x44: 'F10', # F10
0x45: 'F11', # F11
0x46: 'F12', # F12
0x47: 'Num Lock', # Num Lock
0x48: 'Keypad 7', # Keypad 7
0x49: 'Keypad 8', # Keypad 8
0x4A: 'Keypad 9', # Keypad 9
0x4B: 'Keypad -', # Keypad -
0x4C: 'Keypad 4', # Keypad 4
0x4D: 'Keypad 5', # Keypad 5
0x4E: 'Keypad 6', # Keypad 6
0x4F: 'Keypad +', # Keypad +
0x50: 'Keypad 1', # Keypad 1
0x51: 'Keypad 2', # Keypad 2
0x52: 'Keypad 3', # Keypad 3
0x53: 'Keypad 0', # Keypad 0
0x54: 'Keypad .', # Keypad .
0x5B: 'Left Win', # Left Windows
0x5C: 'Right Win', # Right Windows
0x5D: 'Menu', # Menu
0x5E: 'Right Ctrl', # Right Control
0x5F: 'Right Alt', # Right Alt
}
return special_keys.get(key_code, f"Unknown key code: {key_code}")
def process_keyboard_data(data):
"""处理键盘输入数据,返回对应的按键描述"""
output = []
for entry in data:
# 分割扫描码并转换为整数
key_codes = entry.split(',')
mapped_keys = [map_keycode(int(code, 16)) for code in key_codes]
output.append(' '.join(mapped_keys))
return output
# 示例键盘输入数据
keyboard_data = [
"0x0f,0x2a,0x36,0x1d,0x1d,0x0f,0x38,0x0f,0x38,0x0f",
"0x0f,0x2a,0x36,0x1d,0x1d,0x0f,0x38,0x0f,0x38,0x0f",
"0x0f,0x5b,0x5c,0x2a,0x36,0x1d,0x1d,0x0f,0x38,0x0f,0x38,0x0f",
"0x14",
"0x23",
"0x12",
"0x2a",
"0x39",
"0x08",
"0x2c",
"0x39",
"0x19",
"0x1e",
"0x1f",
"0x1f",
"0x11",
"0x18",
"0x13",
"0x20",
"0x39",
"0x17",
"0x1f",
"0x39",
"0x21",
"0x28",
"0x1a",
"0x2a",
"0x11",
"0x17",
"0x31",
"0x20",
"0x18",
"0x11",
"0x1f",
"0x0c",
"0x2a",
"0x19",
"0x1e",
"0x1f",
"0x1f",
"0x11",
"0x18",
"0x13",
"0x20",
"0x1b",
"0x2a",
"0x0a",
"0x04",
"0x05",
"0x08",
"0x0b",
"0x02",
"0x04",
"0x02",
"0x09",
"0x03",
"0x28",
"0x1f",
"0x1d",
"0x0f,0x2a,0x36,0x1d,0x1d,0x0f,0x38,0x0f,0x38,0x0f"
]
# 处理每行数据
keyboard_output = process_keyboard_data(keyboard_data)
# 将结果写入文本文件
with open('keyboard_output.txt', 'w') as file:
for entry in keyboard_output:
file.write(entry + '\n')
print("结果已写入 keyboard_output.txt")
不知道为什么我的kali上的wireshark解析不了证书,rdp流量一直处于加密状态,所以我用windows
tshark -r "1.pcapng" -Y "rdp.fastpath.action == 0" -o "tls.keylog_file:rdp.pem" -T fields -e frame.time -e rdp.fastpath.scancode.keycode -e rdp.fastpath.scancode.release > "keyboard_data.txt"
tshark.exe -r "D:\桌面\1.pcapng" -Y "rdp.fastpath.action == 0" -o "tls.keylog_file:"D:\桌面\rdp.pem"" -T fields -e frame.time -e rdp.fastpath.scancode.keycode -e rdp.fastpath.scancode.release > "D:\桌面\keyboard_data.txt"
#注意路径一定要写对
处理一下,不要时间
成功拿到
最后的答案就是7z的密码是之前windows的密码加上这一串,也就是babygirl2339347013182
花了很久才复现了这道题,只能说菜就多练吧。
环境一直是最烦的,哭了😣😣😣
参考链接👇🏻
SMB Decryption - TryHackMe :: MWLab — Ladislav’s Malware Lab
2024强网杯-谍影重重5.0_2024强网杯wp-CSDN博客
Analyzing captured RDP sessions | haxor.no
工具安装