Snort中pcre和正则表达式的使用
Snort中pcre和正则表达式的使用
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]\d250~255 个位限制在0~5 25[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|D,B匹配成功了,将不会再看C和D。所以上面匹配IPv4地址时,我们单独一个分组写成
25[0-5]|2[0-4]\d|1?\d{1,2}而不是1?\d{1,2}|2[0-4]\d|25[0-5]。后者匹配
255时,只会匹配到25和5,而不会匹配到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]\d65530~65535 个位限制在0~5 6553[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和正则表达式的使用的更多相关文章
- ORACLE中的支持正则表达式的函数
ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBS ...
- js中几个正则表达式相关函数使用时g标志的作用
首先,javascript中涉及到正则表达式的函数总共有6个,可分为两种: 1.第一种是作为字符串对象的方法,即以 String.fun(); 形式调用,这里包括 split.search.match ...
- C#中Spli、正则表达式分解字符串详解
一.String.Split方法提供了如下6个重载函数: 名称 说明 String.Split (Char[]) 返回包含此实例中的子字符串(由指定 Char 数组的元素分隔)的 String 数组. ...
- php中常用的正则表达式函数
php中常用的正则表达式函数 * preg_match() * preg_match_all() * preg_replace() * preg_filter() * preg_grep() * pr ...
- C#中,使用正则表达式匹配获取所需数据
.NET中,使用正则表达式匹配获取所需数据 需求:获取一串字符串中,正则匹配出需要的数据. 例如以下字符串: string temp ="ErrorCode:-1,Message:{&quo ...
- * 和 ?在 shell 命令行中与在正则表达式中的区别
Linux 正则表达式 你有没有想过,在 shell 命令行中的 *,?和正则表达式中的*,?是否一样? 自打好多年前接触 DOS,就知道了* 和?这两个通配符(Wildcard),象 dir *.* ...
- PHP中的常用正则表达式集锦
PHP中的常用正则表达式集锦: 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xf ...
- Visual Studio 中使用的正则表达式 说明
Visual Studio 中使用的正则表达式 说明 2013-10-11 21:10:12| 分类: VB和VBA知识|举报|字号 订阅 参考:详解Visual Studio正则替换大 ...
- 在C语言中利用PCRE实现正则表达式
1. PCRE简介 2. 正则表达式定义 3. PCRE正则表达式的定义 4. PCRE的函数简介 5. 使用PCRE在C语言中实现正则表达式的解析 6. PCRE函数在C语言中的使用小例子 1. P ...
随机推荐
- RTP包中timestamp的间隔问题
概述 近期在和同事调试G729的编解码库时碰到一个语音质量的问题,问题产生的原因和RTP包中的时间戳设置有关,特此记录下来. 问题现象,1001和1002账号注册在fs,媒体设置为G729并通过fs中 ...
- .NET 6学习笔记(1)——通过FileStream实现不同进程对单一文件的同时读写
会写这篇纯属机缘巧合,虽然一直以来认为对单一文件的读.写操作是不冲突,可并行的,但实际并未实践过.正好有个UWP的程序要并行读取由Desktop Extension创建的文本,需要有个原型程序来验证, ...
- Win10系统下WampServer运行之后显示橙色如何变成绿色的方法
我们可能会安装wampserver在本地环境下测试网站,不过wampserver运行之后,wampserver的图标呈现出橙色,而不是绿色,这就说明了wampserver在本地环境没有启动成功.那么我 ...
- PON/产线测试解决方案
第一章 方案背景与概述1.1 方案背景随着网络的高速发展与网络速率的不断提升,用户对网络产品的可靠性要求也越来 越高.网络产品的故障符合"浴盆曲线"规律,生产过程中的严格测试能够及 ...
- 【Windows 操作系统】 内核对象|句柄
内核对象简介 内核对象就是 一些数据结构该结构用来描述存储内核中的一个内存块中的数据信息. 内存块是一种数据结构,其中的数据成员负责维护该对象的相应信息,这个数据结构以及其中的数据成员只能由内核访 ...
- 4.Profile(多环境配置)
在实际的项目开发中,一个项目通常会存在多个环境,例如,开发环境.测试环境和生产环境等.不同环境的配置也不尽相同,例如开发环境使用的是开发数据库,测试环境使用的是测试数据库,而生产环境使用的是线上的正式 ...
- CPU长指令(VLIW)失败的主要原因是什么,VLIW真的无药可救吗?
software和hardware之间总是存在tradeoff:要么是hardware结构复杂,software灵活.要么是hardware结构保持简洁清晰,software干一些脏活累活.VLIW就 ...
- Python——序列与字符串
序列与字符串 一. 列表 列表是Python的内置可变序列,是包含若干元素的有序连续内存空间.同一列表元素的数据类型可以各不相同,可以分别为整数.实数.字符串等基本类型,也可以是列表.元组.字典.集合 ...
- BUG | ValueError: Shape mismatch: The shape of labels (received (320,)) should equal the shape of logits except for the last dimension (received (64, 5)).
1 TensorFlow报错 报错信息: 2 报错原因 字面原因: 这个问题是由于输出层的类别数和训练数据shape不同导致. 底层原因: Step1 : 代码中,我通过ImageDataGenera ...
- tp5 ajax单文件上传
HTML代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

