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. 企业面试题:Buffer与cache的区别?

    buffer缓冲 cache是缓存. 写缓冲,读缓存.简单点说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的.缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行 ...

  2. Mac下安装Apache

    没错,这一篇又是因为头头给我安排的任务得出来的总结. 本身Mac是有自带的Apache,但是对并发量有限制,这个可以在系统的配置参数里面看,所以本人决定重新安装一个,来,请按照下面的流程来走: 一.下 ...

  3. Alpha 冲刺 (10/10)

    Alpha 冲刺 (10/10) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务: 文字/口头描述: 1.和愈明.韫月一起对接 2 ...

  4. SQL-61 对于employees表中,给出奇数行的first_name

    题目描述 对于employees表中,给出奇数行的first_nameCREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` ...

  5. man 命令帮助文件输出乱码

    man 命令重定向的时候有写控制字符再直接显示的时候没有问题, 但是重定向到文件中的时候,被解释错误,显示为 ^H 或者乱码 解决方法: man ps | col -b >a.txt 可以消除所 ...

  6. HashMap & Hashtable & CocurrentHashMap 与 ArrayList & CopyOnWriteArrayList

    1. 同步集合类如Hashtable和Vector虽能做到线程安全,但分别使用Collections.synchronizedMap()方法和Collections.synchronizedList( ...

  7. css.aa

    出的不同(面是必考) 因为浏览器在解析第二个p的时候,因为字母之间没有空格,他会以为是是一个单词所以不会换行. 列表 1.无序列表ul 第一内部必须含有子标签<li></li> ...

  8. Mac 下配置Lua环境

    1.下载LUA源码包 curl -R -O http://www.lua.org/ftp/lua-5.3.1.tar.gz 2.解压并进入目录 tar -xvf lua-.tar.gz cd lua- ...

  9. 线性表seqList类及其父类list,模板类

    seqList模板类,线性表代码 # include "list.h" //代码清单2-2 顺序表类的定义和实现 // The Definition of seqList temp ...

  10. cocos2dx创建win32项目一般步奏

    1.导入一个新项目步奏:解决方案:右键->添加->添加现有项目->添加依赖项目libCocoStudioD:\work\CannonDefender\cocos2d\cocos\ed ...