第三届“数信杯”数据安全大赛wp之流量分析
本文介绍了第三届"数信杯"数据安全大赛中一道特殊的流量分析题目。该题提供了500个流量包文件和一个包含RSA参数的文件,要求选手根据指定ID的p、q参数计算n值,找到能解密的对应流量包。作者详细分析了题目要求,通过Python脚本使用pyshark库批量处理流量包,提取TLS握手过程中的模数n,与计算值进行比对,最终找到匹配的流量包文件。文章分享了解决思路和完整代码,为处理大规
第三届“数信杯”数据安全大赛wp之流量分析
缘起
流量分析题很常见,但是一个题目有500个流量包文件的,就不常见了,所以想记录一下。
题干
请根据题目提供的证书关键参数,合成私钥解密证书。请选手找到id为285的参数合成的证书(参考附件params.csv),可以解密哪个流量包(参考附件:pcap.zip)。并将其流量包名称作为答案提交。
【答案标准】
若id为285的参数合成证书,可以解密"UT5NHVWo2Z.pcap",则答案提交为UT5NHVWo2Z.pcap
分析
先看看重点:

整整有500个流量包文件,所以,平时使用wireshark来分析的方法,就不适用了,只能使用代码带分析了。
先使用wireshark看一下流量包内容:

单个流量包内容很简单:TLS密钥交换,然后用加密形式传数据
再看看一下params.csv文件:

就是提供了e、p、q
分析: 密钥交换的公钥,公钥=(n, e),而n=p*q
所以,只要取params.cvs的id=285的p和q,计算后和流量包的n比对,相等的就是。
看一下流量包的n的位置:

开始准备脚本
python语言处理流量包有2个选择,一个是pyshark,一个是scapy,今天使用pyshark来处理。
先上完整的代码:
# 完整代码如下:
import pyshark,os
from Crypto.Util.number import bytes_to_long
current_dir="./caps"
e = 65537
p = 177264302295959185550899884811457697789837321132319354039496340545988969470422347313577084568610012957139649359576035974322283705879187577664768699213211347033624840318251940972496063336844685896882713624561971974788692556498019960846465311267474369690812099681875735569564330504277517754796899917257323134723
q = 143990163909936129648804807321551478733567016733642335522156625973321506509458427490929508866189002322826874210961910641865602374675333206288577734876005828016379170951078934469472423840724164310343028554942665656763806178050620857070820746559094989518930589089970082522430002916286799917078785172333647028571
n = p * q
for capfile in os.listdir(current_dir):
if capfile.endswith('.pcap'):
cap = pyshark.FileCapture(
input_file=os.path.join(current_dir, capfile),
display_filter='tls',
keep_packets=False
)
for packet in cap:
if 'TLS' not in packet:
continue
if hasattr(packet.tls, 'handshake_type') and packet.tls.handshake_type=='11':
modulus_hex = packet.tls.pkcs1_modulus.replace(':', '').replace('\n', '')
modulus_int = bytes_to_long(bytes.fromhex(modulus_hex))
if modulus_int == n:
print(f"Found the matching packet in {capfile}!")
break
cap.close()
配合wireshar的图片,来简单解释一下代码:
在TLS层的,Handshake Type是Certificate(type=1)的,就是交互tls密钥公钥的包,可以在里面找到n
分享一个小代码,用于当你不知道包里面有哪些字段的是可以查找:
for packet in cap:
# 打印packet.tls的所有成员,以便查看有哪些字段可用
if hasattr(packet, 'tls'):
print("TLS Layer Fields:")
for field in packet.tls.field_names:
print(f" {field}: {getattr(packet.tls, field)}")
测试结果
跑一下:

完事大吉!
小结
一直都是分析一个流量包文件,有1000+的数据包,还是第一次遇到500个流量包文件需要分析。
所以使用脚本就成了必须的,记一下pyshark的使用方法
题目附件见:
https://download.csdn.net/download/Casablanca1983/92697436
第三届数信杯的其他题目wp:
欢迎关注:
更多推荐
所有评论(0)