iptables 匹配模式,后跟 4 个随机值,然后是另一个模式

iptables 匹配模式,后跟 4 个随机值,然后是另一个模式

我正在尝试创建一个与此 UDP 数据包中的以下模式匹配的 iptables 规则:

0x0000:  0000 030a 0000 0000 0000 0000 0000 0800  ................
0x0010:  4500 0027 5d30 0000 6c11 232a 5164 585d  E..']0..l.#*QdX]
0x0020:  c0a8 6402 fe25 1e61 0013 b382 5341 4d50  ..d..%.a....SAMP
0x0030:  c063 ba71 e2ea 63                        .c.q..c

该模式|53414d50c063ba71|后面跟着一个随机十六进制数,在本例中|e2ea|是,后面跟着|63|

该规则必须确保 后面有 4 位数字|53414d50c063ba71|,并且这 4 位随机数字后面有一个|63|

现在我有这个,但我不知道如何相应地修改它:

iptables -I INPUT -p udp --dport 7777 -m string --algo kmp \
    --hex-string '|53414d50c063ba71????63|' -j DROP

???? -> 怎么办??

请帮我。

答案1

只要偏移量固定,就可以使用u32match 进行这种测试。如果有效载荷位于数据包末尾,则意味着数据包的大小也必须是恒定的u32没有任何用处。

为什么?因为u32只能添加无符号数字,因此无法匹配表示为“在位置(数据包大小 - 11)”的“最后 11 个字节”与u32因为有一个减法(或加一个负数)。

因此,对于这个有效载荷大小为 0x37 (55) 的具体示例,正如评论中所问,这里是u32要使用的匹配表达式(UDP 数据包之前已经通过 udp 匹配验证):

iptables -I INPUT -p udp --dport 7777 -m u32 --u32 "0x0>>0x16&0x3c@0x34=0x53414d50&&0x0>>0x16&0x3c@0x38=0xc063ba71&&0x0>>0x16&0x3c@0x3b&0xff=0x63" -j DROP

迭代解释(当然,理解u32 的手册页并需要示例):

0x0 >> 0x16 & 0x3c:已调整互联网标头长度 (IHL)<=> UDP 报头的
0x0 >> 0x16 & 0x3c @ 8开始:UDP 数据
0x0 >> 0x16 & 0x3c @ 0x34: 位置 (0x34-8) 处的 4 个字节 = UDP 数据的 0x2c
0x0 >> 0x16 & 0x3c @ 0x34 = 0x53414d50: 位置 0x2c 处的 4 个字节 == 0x53414d50
&&: 逻辑
0x0 >> 0x16 & 0x3c @ 0x38 = 0xc063ba71:位置 0x30 处的 4 个字节 == 0xc063ba71
0x0 >> 0x16 & 0x3c @ 0x3b:UDP 数据的位置 (0x3b-8) = 0x33 处的 4 个字节
0x0 >> 0x16 & 0x3c @ 0x3b && 0x000000ff:从位置 0x33 开始的 4 个字节的最后一个字节的内容,表示位置 0x36 处(此处为最后一个)的单个字节
0x0 >> 0x16 & 0x3c @ 0x3b && 0x000000ff = 0x63:位置 0x36 处的字节 ==0x63

相关内容