嗅探端口上的 SSH 流量22
以确定服务器 IP 地址对于任何防火墙/DPI 系统来说都不难。
我想知道端口是否随机的因此,我们有大约 60k 种可能性,防火墙/DPI 系统可以多快找到 SSH 服务器 IP 地址。
答案1
这不是一个 100% 正确的答案,但我更愿意把它放在这里,以防其他人有这个问题
我们知道 SSH 是使用 TCP 连接到服务器的,并且我们知道 TCP 具有有效负载,即发送给对等方的实际数据。SSH 的第一个有效负载似乎说明了其版本。例如SSH-2.0。 因此
- 如果我们捕获第一个数据包,其有效载荷不为 0,并且
- 该有效载荷包含“SSH-2.0”
我们可以告诉这是一个 SSH 隧道,并确定 SSH 服务器的 IP 地址
让我们看看它的实际效果
字符串“SSH-2.0”到hax
echo "SSH-2.0" | hexdump -C -n 7
00000000 53 53 48 2d 32 2e 30 |SSH-2.0|
00000007
捕获第一个非零有效载荷(仅 1 个数据包)
tcpdump -vv -X -n -i wlp2s0 -c 1 "tcp[tcpflags] & (tcp-push) != 0 and port 22"
tcpdump: listening on wlp2s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
13:27:32.609719 IP (tos 0x48, ttl 64, id 19848, offset 0, flags [DF], proto TCP (6), length 73)
192.168.1.109.47574 > ADDRESS:PORT Flags [P.], cksum 0x1dc7 (correct), seq 3554308024:3554308045, ack 3135539829, win 502, options [nop,nop,TS val 2550455211 ecr 2971629478], length 21
0x0000: 4548 0049 4d88 4000 4006 3fbc c0a8 016d EH.IM.@.@.?....m
0x0010: 576b 93a2 b9d6 03dd d3da 6fb8 bae4 8a75 Wk........o....u
0x0020: 8018 01f6 1dc7 0000 0101 080a 9804 dbab ................
0x0030: b11f 77a6 5353 482d 322e 302d 4f70 656e ..w.SSH-2.0-Open <== here
0x0040: 5353 485f 392e 350d 0a SSH_9.5..
1 packet captured
3 packets received by filter
0 packets dropped by kernel
我们可以看到这些序列5353 482d 322e 30
用 ASCII 表示“SSH-2.0”。这里我们依靠端口 22 来捕获数据。
我最初的问题是,如果端口是随机的怎么办?如何在不知道端口的情况下确定 SSH 流量?
tcpdump 有效载荷过滤器
我发现,要确定 SSH 连接,我们不需要端口。我们可以直接匹配/过滤有效负载中的“SSH-2.0”字符串
tcpdump -vv -X -n -i wlp2s0 -c 1 'tcp[32:4] = 0x5353482d'
这里我们只匹配 1 个数据包,如果有效载荷的 4 个字节包含0x5353482d
ASCII 中的“SSH-”。结果是一样的。查找5353 482d
0x0000: 4548 0049 e6fe 4000 4006 a645 c0a8 016d EH.I..@[email protected]
0x0010: 576b 93a2 aa4e 03dd 349a 8f97 c475 a3f3 Wk...N..4....u..
0x0020: 8018 01f6 f39e 0000 0101 080a 9859 2657 .............Y&W
0x0030: b173 c254 5353 482d 322e 302d 4f70 656e .s.TSSH-2.0-Open <== here
0x0040: 5353 485f 392e 350d 0a SSH_9.5..
1 packet captured
2 packets received by filter
0 packets dropped by kernel
结论(我的)
对于防火墙/DPI 系统来说,SSH 端口无关紧要,我们可以保留原样(22)或将其更改为随机端口,因为通过查看第一个非零有效负载,我们可以找到 SSH 连接
如果你发现更好的测试/解释,请纠正我