当前位置: 代码网 > it编程>编程语言>正则表达式 > Snort中pcre和正则表达式的使用详解

Snort中pcre和正则表达式的使用详解

2024年05月18日 正则表达式 我要评论
1. 题目描述if snort see two packets in a tcp flow withfirst packet has “login” or “ini

1. 题目描述

if snort see two packets in a tcp flow with

first packet has “login” or “initial” in payload, destination port is 3399;and second packet has a “ipv4address:port”string(e.g. 123.45.6.7:8080) in payload. destination port is 3399;output an alert with msg “bot founded” and sid 1000001

2. 解决方案

题目要求检测包含两个包的特定流,需要通过设置标记位,即flowbits来实现。另外,题目中均要求检测特定的字符串或模式,所以还需要在pcre字段中通过正则表达式实现。

2.1 第一条检测规则

匹配特定字符串

pcre:"/login|initial/";

正则表达式的两端需要加上限界符/

设置标志位,同时不发出警报。

flowbits:set,login_initial;flowsbits:noalert;

2.2 第二条检测规则

2.2.1 匹配模式ipv4address:port

ipv4address

ipv4地址使用点分十进制表示时,分为4组,每组的范围均为[0,255]。即从0.0.0.0到255.255.255.255。

我们先分析单独一组的特点:

区间限制表示
0~99没有任何限制\d{1,2}
100~199后两位也没有任何限制1\d{2}
200~249十位限制在0~4,个位没有限制2[0-4]\d
250~255个位限制在0~525[0-5]

可以发现表格中前两种情况可以合并为1?\d{1,2},所以可以用25[0-5]|2[0-4]\d|1?\d{1,2}来匹配0~255;

将其作为一个分组,再考虑到.,我们可以写出如下正则表达式匹配ipv4地址:

((25[0-5]|2[0-4]\d|1?\d{1,2})\.){3}(25[0-5]|2[0-4]\d|1?\d{1,2})

值得说明的是:

这里我们认为数字前出现填充0的情况与非填充状态等价:

如:192.01.00.1等价于192.1.0.1

这种情况下才能使用\d{1,2},因为可能会出现00的情况。

正则表达式的短路性质:

|运算符分隔的多个表达式有一个匹配成功时,该表达式之后的表达式将不会继续匹配。

如:a|b|c|db匹配成功了,将不会再看cd

所以上面匹配ipv4地址时,我们单独一个分组写成25[0-5]|2[0-4]\d|1?\d{1,2}而不是1?\d{1,2}|2[0-4]\d|25[0-5]

后者匹配255时,只会匹配到255,而不会匹配到255

同样后者构造的正则表达式去匹配255.255.255.255,只会匹配到255.255.255.25,缺少最后一个5

因为它匹配到最后一组的25时就判定匹配成功,直接跳到末尾,结束匹配。而前面几组255正确匹配的原因是:如果只匹配25,发现剩下的5.不匹配,之后会进行回溯,继续检查后面的条件,发现255匹配成功且.也匹配成功,不再回溯。

  • port

端口号的范围是0~65535,我们同样可以分成不同的区间来匹配端口号。

区间限制表示
0~9999没有任何限制\d{1,4}
10000~59999后四位没有任何限制[1-5]\d{4}
60000~64999千位限制在0~4,后三位没有任何限制6[0-4]\d{3}
65000~65499百位限制在0~4,后两位没有任何限制65[0-4]\d{2}
65500~65529十位限制在0~4,个位没有任何限制655[0-2]\d
65530~65535个位限制在0~56553[0~5]

同样,我们可以将表格前两种情况合并为[1-5]?\d{1,4}。结合上面提到的短路性质,我们可以写出最终用于匹配端口号的正则表达式:

6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]?\d{1,4}

2.2.2 检查标志位

flowbits:isset,bot_founded;

3. 检测规则

通过上述分析,我们可以写出如下检测规则:

alert tcp any any -> any 3399 (pcre:"/login|initial/";flowbits:set,login_initial;flowbits:noalert;sid:1000000)
alert tcp any any -> any 3399 (msg:"bot founded";pcre:"/((25[0-5]|2[0-4]\d|1?\d{1,2})\.){3}(25[0-5]|2[0-4]\d|1?\d{1,2}):(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]?\d{1,4})/";flowbits:isset,bot_founded;sid:1000001)

到此这篇关于snort中pcre和正则表达式的使用的文章就介绍到这了,更多相关snort pcre 正则表达式使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • 利用正则表达式匹配浮点型数据

    利用正则表达式匹配浮点型数据

    前言:在开发中我们常常会使用到正则表达式,但很奇怪的是,每次你在使用正则表达式的时候你都发现你不会写,不知道语法,可能你大概还记得一部分,但很模糊,对于正则表达... [阅读全文]
  • 常用正则表达式之密码格式验证大全

    常用正则表达式之密码格式验证大全

    前言这里有你想要的正则表达式。网上这方面的内容比较分散,本文将尽量写出验证各种密码格式的正则表达式,漏了的情况请留言提示我进行添加,如果对你有帮助,麻烦给我一个... [阅读全文]
  • JavaScript正则表达式实现注册信息校验功能

    JavaScript正则表达式实现注册信息校验功能

    java和javascript正则表达式的对比 java中也有正则表达式,默认情况下必须要精确匹配 ;而在js中默认是模糊匹配,只要字符串包含了正则表达式的内容... [阅读全文]
  • 正则表达式详析+常用示例

    正则表达式详析+常用示例

    一、正则的含义正则表达式就是用来操作字符串的一种逻辑公式二、正则表达式的应用场景数据分析时数据获取的文本筛选进行爬虫时,网页数据的匹配写前端代码的时候,用户输入... [阅读全文]
  • 使用正则表达式从链接中获取图片名称

    使用正则表达式从链接中获取图片名称

    需求介绍后端的数据接口返回图片链接列表,前端将图片列表渲染出来,展示的时候,需要显示图片名称。如以下的图片链接,那么怎么比较快速的从链接中获取图片的名称呢?链接... [阅读全文]
  • 正则表达式用法详解

    正则表达式之基本概念在我们写页面时,往往需要对表单的数据比如账号、身份证号等进行验证,而最有效的、用的最多的便是使用正则表达式来验证。那什么是正则表达式呢?正则表达式(regula…

    2024年05月18日 编程语言

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com