记某工控CTF比赛一道ICMP隧道题

本文记录了一次工控CTF比赛中遇到的ICMP隧道题目,详细描述了解题过程。通过分析ICMP数据包,发现填充方式不寻常,尝试解密未果。最终通过关注ICMP包头长度找到了关键线索,揭示了数据隐藏的方式。虽然此类通信隐蔽性强,但效率较低,作者还分享了构造此类流量的脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

某塔的线上比赛平台,最后一道一堆蜜罐,听说没flag,反正没找到。然后看一下其中一道ICMP隧道的题目。
数据包如图:
数据包
当时的考量:
响应包有的,请求包也有,并且都一样,所以请求包的数据是最全的,可以不看响应包。
考虑到填充不符合正常的ICMP请求应答的填充方式,也尝试了对数据进行解密,但都无果。
两个通信IP没有什么有用信息。
考虑过包长度转ASCII字符的这个问题,但是看到整个包的长度超过了127,觉得不太可能就放弃了。后来实在找不出来,看了下ICMP包头长度,然后明白了可能只是数据长度。

以下是解题脚本:

#!/usr/bin/python
# coding=utf8
# @Author:B1u3Buf4

import pyshark
import base64


L_flag= []
packets = pyshark.FileCapture('xxx.pcap')
for packet in packets:
    for pkt in packet:
        if pkt.layer_name == "icmp": 
            if int(pkt.type) != 0:
                L_flag.append(int(pkt.data_len))
print(base64.b64decode(''.join([chr(c) for c in L_flag])))

有老哥吐槽说这题太脑洞了,谁能构造这样的流量也是够煞费苦心了。没有直接的文本特征,识别起来比较麻烦的,确实有一定的隐蔽性,但是作隧道可能通信效率太低了。然后无聊就写了一个构造这样发包的。

#!/usr/bin/python
# coding=utf8
# @Author:B1u3Buf4

import string
import time
import random
from 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值