http request

http request请求包括请求行、请求头、空行和内容。一个普通的request请求如下:

http response

http response应答包括应答行,头部,空行和内容,整体结构和request差不多,下图是针对上节request的应答包

HTTP关键字

之前的常用关键字中介绍了content以及许多修饰它的关键字,除此之外,http协议中还有一些修饰content的关键字,也是由于http协议使用量较大,关键字较多,因此单独拿出来学习。

1、http_method

http_method是content的修饰符,表示其所修饰的content只匹配http method部分。http可以使用的方法包括:GET, POST, PUT, HEAD, DELETE, TRACE, OPTIONS, CONNECT和PATCH。下面这个例子匹配GET方法,无论是否加http_method都能匹配:

但是下面这种情况就必须加http_method关键字,因为在http的uri部分也有GET:

2、http_uri和http_raw_uri

http_uri和http_raw_uri这两个关键字都是说明所修饰的content是用来匹配http uri部分的内容。所不同的是http_uri指在匹配之前先对URI进行标准化,所谓的标准化就是对数据包中的uri按照RFC文档规定进行一定的转化,包括保留语义转化、一般保留语义转化、改变语义转化。保留语义转化有以下几种,详细的解释参考URL标准化-维基百科,而http_raw_uri则是直接对uri进行匹配。下面这两个关键字用法的一个例子:

3、uricontent

uricontent的作用和http_uri相同,都是匹配uri部分的,不同的是uricontent可以独立使用,相当于content+http_uri的效果。但是官方文档里说明这个关键字已经被弃用,但目前还对其进行支持

4、urilen

urilen关键字用于匹配请求URI的长度。可以使用<>运算符,分别表示小于和大于

5、http_protocol

该http_protocol关键字用于匹配http协议部分

alert http any any -> any any (flow:to_server; http_protocol; content:"HTTP/1.0"; sid:1;)

6、http_request_line和http_response_line

该http_request_line关键字用于匹配 http request的request_line部分,该http_response_line关键字用于匹配 http request的request_line部分,

alert http any any -> any any (http_request_line; content:"GET / HTTP/1.0"; sid:1;)

7、http_header和http_raw_header

和http_uri一样,http_header也是只匹配http的header部分的内容(不包括cookie),http_raw_header则是匹配没有标准化过的header(参考HTTP header),简单来说就是标准化的header在每个字段的结尾\r\n之前都会去掉其余的空白字符。两个简单的例子

8、http_cookie

http_cookie从http_header中独立出来,但其使用方法和前几个关键字并无区别,这里就直接贴出例子

9、http_user_agent

http_user_agent用于匹配http的User-Agent字段的内容,它是http_header的一部分,但是把它单独拿出来说明其出现的频率比较高,用法与前几个没什么差别。关于http_user_agent和http_header的性能对比可以参考Suricata http_user_agent vs http_header,得出的结论是http_user_agent比http_header要快大约10%,除此之外规则中使用http_user_agent的可读性也比较好。例子如下:

10、http_client_body和http_server_body

使用了这两个修饰符的content表示只匹配http包中的内容部分,前者值匹配request包,而后者只匹配response。用法很简单:

11、http_accept

匹配http_header中的accept部分

alert http any any -> any any (http_accept; content:"image/gif"; sid:1;)

12、http_accept_enc

匹配http_header中的HTTP Accept-Encoding部分

alert http any any -> any any (http_accept_enc; content:"gzip"; sid:1;)

13、http_accept_lang

匹配http_header中的HTTP Accept-Language部分

alert http any any -> any any (http_accept_lang; content:"en-us"; sid:1;)

14、http_connection

匹配http_header中的Connection部分

alert http any any -> any any (http_connection; content:"keep-alive"; sid:1;)

15、http_content_type

匹配http_header中的Content-Type部分

alert http any any -> any any (flow:to_client; http_content_type; content:"text/javascript"; sid:2;)

16、http_content_len

匹配http_header中的 Content-Length部分,并配合flow:to_server 或者 flow:to_client来表明是请求包还是响应包

alert http any any -> any any (flow:to_server; http_content_len; content:"666"; sid:1;)

alert http any any -> any any (flow:to_client; http_content_len; content:"555"; sid:2;)

17、http_referer

匹配http_header中的Referer部分

alert http any any -> any any (http_referer; content:".php"; sid:1;)

18、http_stat_code和http_stat_msg

这两个content修饰符分别匹配response应答包返回的状态码和状态信息,例子如下:

19、file_data

file_data的作用和http_server_body差不多,都是使content匹配response body中的内容,唯一不同的是使用了file_data关键字的规则,其在file_data之后的content都会受到它的影响。比如下面这条规则,值为”abc”和”xyz”的content都必须在response body里面匹配:

alert http any any -> any any (file_data; content:"abc"; content:"xyz";)

suricata HTTP关键字的更多相关文章

  1. suricata学习笔记1--初步认识

    1.前言  最近工作需要对网站的关键字进行检测,找出敏感词.这个过程需要对报文进行收集.解码.检测和记录日志.当前只是简单实现功能,根据关键字进行简单的匹配,而没有进行关键字的语义分析.导致的结果就是 ...

  2. Suricata是什么?

    不多说,直接上干货! 见Suricata的官网 https://suricata.readthedocs.io/en/latest/what-is-suricata.html snort.suirca ...

  3. python中的GIL(全局解释锁)多线程能够提升效率

    预启动的时候,应用程序仍然会调用 OnLaunched 方法的,在 OnLaunched 方法调用之后,会马上发生 Suspending 事件,随后应用就会暂停. 我先基于develop主分支拉出一个 ...

  4. suricate学习笔记1--初步认识(转)

    最近在研究关于dpi网卡采集的代码重组这块,公司一个同事,简单的用CPP讲解了suricata内部的一些处理逻辑,,,其中大部分代码是用C语言写的,对于用C重构代码有很好的借鉴作用,,,如果有相关工作 ...

  5. 作为一个新手的Oracle(DBA)学习笔记【转】

    一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...

  6. Suricata规则编写——常用关键字

    本篇转载自:http://blog.csdn.net/wuyangbotianshi/article/details/44775181 1.简介 现在的NIDS领域snort一枝独秀,而suricat ...

  7. suricata 关键字补充说明

    基本关键字 1.msg(对匹配到的规则的说明,第一部分约定用大写字母表示,msg始终是签名的第一个关键字) 注意:msg中必须转义以下字符: ; \ " msg :“ATTACK-RESPO ...

  8. Suricata配置文件说明

    本系列文章是Suricata官方文档的翻译加上自己对其的理解,部分图片也是来自那篇文章,当然由于初学,很多方面的理解不够透彻,随着深入后面会对本文进行一定的修正和完善. Suricata使用Yaml作 ...

  9. Suricata默认规则集相关

    Suricata规则集 Suricata 基于规则检测和控制数据流量,所有规则的配置文件保存在rules目录内 .这些是已知和确认的活动僵尸网络和其C&C(command and contro ...

随机推荐

  1. .net core WebApi Mutex实现并发同步

    Mutex,中文译为互斥体,在.net中也是作为一种线程或进程之间的互斥体存在.即在同一时刻,一个共享资源只允许被某一个线程或进程访问,其他线程或进程需要等待(直至获取互斥锁为止). Mutex的使用 ...

  2. Problem B: 平面上的点和线——Point类、Line类 (II)

    Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定,两点确定一条线段.现在我们封装一个“Point类”和“Line类”来实现平面上的点的操作. 根据“append ...

  3. GitHub入门与实践 读书笔记二:Git的导入

    1.诞生背景 Linux的创始人Linus Torvalds 在2005年开发了Git的原型程序,后随着众多开发者的共同努力,现在他已经被大量的程序员采用. 2.什么是版本管理 版本管理:管理软件在开 ...

  4. 读取txt数据存入数据库中

    http://blog.csdn.net/daditao/article/details/18899469

  5. groupadd语法

    groupadd [选项] 组 创建一个新的组.Groupadd命令使用命令行中指定的值加上系统默认值创建新的组账户.新组将根据需要输入系统. (1).选项 1 2 3 4 5 6 7 -f,--fo ...

  6. tp5 Excel导入

    /** * 导入Excel功能 */ public function import(){ if (!empty($_FILES)) { $file = request()->file('impo ...

  7. 【转载】 强化学习(九)Deep Q-Learning进阶之Nature DQN

    原文地址: https://www.cnblogs.com/pinard/p/9756075.html ------------------------------------------------ ...

  8. Python pip源更改

    将pip源设置为阿里源 windows 打开文件资源管理器(文件夹地址中) 地址栏上面输入 %appdata% 在这里面新建一个文件夹pip 在pip文件夹里面新建一个文件叫做 pip.ini,内容如 ...

  9. 【Keil5 MDK】armar工具的基本用法(armar --help)

    ARM Librarian, 5.03 [Build 76] - archive creation and maintenance tool Command format: armar options ...

  10. 《Linux内核原理与分析》第三周作业

    实验:基于kernel的简单的时间片轮转多道程序内核 1.实验要求 完成一个简单的时间片轮转多道程序内核代码 2.实验过程 进入实验楼的linux环境,打开shell,输入以下代码: cd Linux ...