corCTF 2024-the-conspiracy writeup

WriteUp 3个月前 admin
151 0 0

这道题目做出来的人挺多的

corCTF 2024-the-conspiracy writeup

大概意思就是作者开发了一个加密聊天程序,并且提供了一个pcap和聊天程序源代码。

corCTF 2024-the-conspiracy writeup

程序的代码逻辑很简单。

1. 从一个csv里读取源地址,目的地址,需要发送的消息。第一列源ip,第二列为目的ip,第三列为明文消息。
2. 通过encrypt函数加密消息,加密函数逻辑也很简单,读取消息中每个字符将其转换为ascii码,然后随机生成一个1-100的整数key,每个字符的密文=明文字符ascii码*随机key。
3. 每给对方发送一个消息后,需继续在把对应的key发送给对方

这里等于给消息接受者写一个解密程序就行了.

corCTF 2024-the-conspiracy writeup

逻辑很简单,先用scapy读取pcap,过滤出目的端口为80的所有数据包。因为发送题目给我们的source.py中就是将消息发送到目的的80端口。

corCTF 2024-the-conspiracy writeup

因为source.py中发送的数据是list类型,所以只需要检索出包内容为List的数据就行。我这里用try catch来完成检索。

try:
  x = list(payload)
  if num % 2 != 0:
      message_num_list.append(eval(payload.decode('utf-8')))
  else:
      key_list.append(eval(payload.decode('utf-8')))
  num+=1
except:
  pass

之后我得到两个列表,一个是所有聊天的加密消息ascii码list,一个是所有对应的key list

message_num_list = [[1234,578,325],[5958,4828,1234,2222],[2222]]
key_list = [[10,20,30],[11,24,32,13],[42]]

这里message_num_list[i]和key_list[i]的长度是一样的,message_num_list[i]代表这一条消息有几个字符,key_list[i] 表示每个字符对应的密钥

然后读取message_num_list[i]中的每一个元素以及key_listp[i]中的每个元素。

message_num_list[0][0] = 3104
key_list[0][0] = 32
3104 / 32 = 97
97对应的字符是a

执行解题程序,找到flag

corCTF 2024-the-conspiracy writeup

这题目也可以靠手搓(用wireshark观察数据包,找到每个聊天数据包和密钥数据包,然后相除就可以了)

可以看到这个TCP Stream有6个数据包。

奇数行为加密消息

corCTF 2024-the-conspiracy writeup

偶数行为key

corCTF 2024-the-conspiracy writeup


手搓花的时间至少是写代码的好几倍。比赛中如果可以访问互联问,直接GPT。不允许访问互联网的话,就得提前安装好scapy库,了解其用法。既然是搞安全的,我相信应该不会有人不会写代码吧


原文始发于微信公众号(信息安全笔记):corCTF 2024-the-conspiracy writeup

版权声明:admin 发表于 2024年7月27日 下午2:27。
转载请注明:corCTF 2024-the-conspiracy writeup | CTF导航

相关文章