记一次流量分析题—Fernet

原题如下:

hacker传输了一段数据,分析并回答一下个问题:

  • 传输信息过程中一共用到了几个key值?(答案示例1)

  • hacker获取到的第一个人的信息。其中含有公民个人信息。以得到的顺序。个人信之间用_"连接,进行md5加密得到md5值是(答案示例若得到信息为小明,男,11111111111,md5(小明_男_11111111111),则答案9caf9eaca7973c4ee20d13acfaeb16d)

  • hacker传输的flag的值是多少?(答案示例:flag{[b9c4b20e-3314-40b0-af89-ab6b878eebf4)

  • 注意:flag格式满足flag{uuid}


分析:

1.首先打开fernet.pcapng,乍一看貌似没什么发现。

d8523e3bc89b403990ca0bdd3a1d5bf0.png

 2.通过数据包长度Length,从小到大筛选,发现后面的包的Data部分都带有Text和Payload MD5 hash。

7c1aa8860e2640f2929f08e8ab82f485.png

 3.将Text部分显示出来,方便进一步分析和后续导出。

2ceb1e93138048ebb248cac20641a81e.png

 4.分析发现前几行的Text字符串最后都带有=号,确认是Base64编码,那gAAAA开头的一大串字符又是什么东西呢?由于涉及到我的知识盲区,直接上搜索引擎!

a12ea7ceb1c54d0cb5dc81d2c0e37c48.png

 5.根据题目Fernet的提示,需要了解一下Fernet是个什么东西。

  • Fernet令牌是一种用于计算机系统中的身份验证和加密的安全令牌。它们是使用Fernet对称加密算法创建的,该算法是Python中密码库的一部分。

  • Fernet令牌是通过使用密钥加密消息而生成的字符串。使用相同的密钥来解密令牌并验证其真实性。这允许Fernet令牌用于数据的安全传输以及身份验证目的。

  • Fernet令牌通常用于web应用程序中,用于对用户进行身份验证,并确保客户端和服务器之间数据传输的安全性。它们还用于API和其他需要安全通信和数据传输的系统。

  • Fernet Token是使用Fernet加密算法加密的令牌(token),该算法是对称密钥加密算法的一种实现,可以用于加密、解密和签名验证。由于Fernet Token是加密的,因此无法通过简单的反向解析来恢复原始数据。只有拥有正确密钥的人才能解密Fernet Token并获得原始数据。

根据上面分析可得fernet token是被对称加密算法加密后所形成的一串字符串,也就是gAAAA开头的字符串,那么Text中的Base64编码极有可能就是解密token的密钥。同时题目提到了hadker获取到的第一个人的信息其中含有公民个人信息。所以fernet token里极有可能包含着公民个人信息。

6.那如何对其进行解密获取关键信息呢?此时需要用到Python的Fernet加密库,以下是Fernet的相关介绍:

Fernet是Python中的一个加密库,它可以用于生成加密密钥和加密数据。它是基于对称加密算法的一种实现,特别是使用了AES(Advanced Encryption Standard)算法。Fernet库提供了一种简单的方式来加密和解密数据,同时提供了数据完整性验证的功能。

Fernet库的主要包括以下功能:

  • 生成随机密钥

  • 使用密钥加密数据

  • 使用密钥解密数据

  • 对加密数据进行数据完整性验证

7.安装Fernet包,建议Python版本为3.11.0以上版本,否则fernet会安装失败。

79454523910f466680f5d022e8718085.png

8.将Text的数据导出来,那如何快速导出呢?总不能一个一个包导吧,效率很慢。选择文件——导出分组解析结果——为纯文本保存为txt格式。

f144b6a9151043969176cb2ae569d974.png

 9.由于导出来的数据包含数据包所有字段信息,所以需要进一步提取Text的数据,本人使用的是功能强大的Sublime Text 3,点击查找,通过Text:.* 找到开头为Text:的数据(.*意思是匹配所有)。

157b189e5c7c42d2b93c0e9cb480229a.png

 10.查找所有后复制到一份新的txt文件,将Text:前缀去掉,可以使用替换为空,得到纯数据。

4a96e4980d5142219d510a64f7a11240.png

 11.为了能够快速解密,需要编写一个Python脚本。

import cryptography.exceptions      
from cryptography.fernet import Fernet   # 导入包

text = []      # 定义一个text列表,用来存放Fernet Token
key = []       # 定义一个key的列表,用来存放用于解密Token的Base64编码
with open("C:/data/data.txt", "r") as file:   # 创建一个data.txt 存放以上数据
    for line in file:       # for循环遍历将两种数据分别存入text列表和key列表
        if line.startswith("g"):   # 把开头为g的字符串存入text
           text.append(line.strip())
        else:
           key.append(line.strip())  # 把除了开头为g的字符串存入key
    for i in key:          # 外层循环为key,先取一个base64编码对text中的token进行逐个解密
        ff = Fernet(i)     # 创建Fernet对象
        for j in text:     # 内层循环为text 
            try:           # 异常处理
               decryted_text = ff.decrypt(j)   # 解密数据
               print(decryted_text.decode('utf-8'))  # 打印解密后的数据,格式为utf-8
            except cryptography.fernet.InvalidToken:  # 如果key和token不匹配,打印mismatching,然后继续进行解密操作
              print(f"mismatching")
            continue

12.测试结果如下,得到两条公民个人信息。

c9b1935fe7c14e85bddded4b5a8c5c82.png

13.这时候key多少个就显而易见了,可以直接使用Sublime统计出个数,也可以使用python脚本统计,同时得出来的个人信息根据题目要求进行md5运算即可。


注:本人菜鸡一个,编写脚本能力还有待提高,如果有不足之处各位大佬可以指出,本人将不胜感激! 

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值