0x00 背景知识


  1. 一说到WAF,在我们安全工作者,或者作为普通的白帽子来说,就很头疼,因为好多时候,我们发到服务端的恶意流量都被挡掉了,于是就产生了各种绕“WAF”的话题,绕来绕去,也就无非那么多种,而且大多都是基于URLDecode的方式。

  2. 虽然我的文章也会讲绕过,虽然也是那么几种,但是我会从防御的方面展示WAF规则的强大。

  3. 笔者再次强调,如果你只是想学习WAF的绕过,我建议还是不要跟我的帖子了,我的目的还是主要帮助好多人去搭起整个框架,从而在谈绕过。

0x01 从Modsecurity模块谈起


  1. 问过圈内的好多朋友“知道WAF吗?”,他们会明确告诉我,“知道”。但是当我给他们说起,Modsecurity这个Apache的模块的时候,他们就开始摇头。其实WAF的事实标准就是开源的Modsecurity。并且Modsecurity已经被开发成了Apache的一个模块,而且这个模块在反向代理的工作状态下,实际上是可以保护任何Web程序的。

  2. 其实,Modsecurity的威力就在于它的规则语言上,这种语言是配置指令和应用到HTTP请求和响应的一种简单编程语言的组合,其实按理说这种语言应当被称作Lua。一般情况下,Modsecurity的最终结果都是具体到一个动作的执行,比如允许请求通过,或者将日志记录到Modsecurity_audit.log或者httpd的log文件中。

  3. 以下就是我本地的Modsecurity模块,具体如下图所示

  4. 从上图就可以得知,这些规则库(只是截取了一部分)几乎构成了Modsecurity的全部,其中红箭头所指的方向,就是防止我们SQL注入的一些规则,其中的规则多达100多条,我们先大体看下他的规则,从宏观上有个大体的认识,为后期的SQL注入绕过储备必要的知识。

  1. 从上图中我们也可以轻易看到,我们进行SQL注入攻击时常用的payload,不好意思这些都在规则库考虑之内。下面先说下Modsecurity的规则库吧。

0x02 Modsecurity 处理事件的5个阶段


  1. 请求头阶段(Request-Headers) 请求头阶段,又称作“Phase 1”阶段。处于在这个阶段的Modsecurity规则,会在Apache完成请求头后,立即被执行。到这个时候还没有读取到请求体,意即并不是所有的请求的参数都可以被使用。

  2. 请求体阶段(Request-Body) 请求体阶段,又称作“Phase 2”阶段。这个阶段属于输入分析阶段,大部分的应用规则也不会部署于这个阶段。这个阶段可以接收到来自于正常请求的一些参数。在请求体阶段,Modsecurity支持三种编码方式,具体编码方式如下:

(1)Application/x-www-form-urldecode

(2) Multipart/form-data

(3) Text/xml

  1. 响应头阶段(Response_Headers) 相应头阶段,又称作“Phases3”阶段。这个阶段发生在响应头被发送到客户端之前。在这个阶段,一些响应的状态码(如404)在请求的早起就被Apache服务器管理着,我们无法触发其预期的结果。

  2. 响应体阶段(Request_Body) 响应头阶段,又称作“Phase4”阶段。这个阶段可以运行规则截断响应体。

  3. 记录阶段(Logging) 记录阶段,又称作“Phase5”阶段,写在这个阶段的规则只能影响日志记录器如何执行,这个阶段可以检测Apache记录的错误信息,在这个阶段不能够拒绝或者阻断连接。因为在这个阶段来阻断用户的请求已经太晚了。

  4. 为了更加直观的展示Apache加载上Modsecurity模块后,运行阶段,我做了一个流程图:

0x03 Modsecurity的Rule规则详解


一、为了更好的了解Modsecurity的工作机制,我们来分析下SecRule的规则,具体规则如下: SecRule variable operator [Actions] 1 variable变量:用来描述哪个变量应当被检查; 2 operator变量:用来描述如何检查。Operator实际上正则表达式,但是Modsecurity自身会提供很多的Operator,利用的时候直接使用”@operator”即可。 3 Actions:第三部分为可选的部分。描述当操作进行成功的匹配一个变量变量时,下一步该如何去处理。

二、为了更直观的表现SecRule的规则,给出一个具体的事例如下这条规则取自Modsecurity_crs_41_sql_injection_attacks.conf中:

SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|!REQUEST_COOKIES:/_pk_ref/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "(?i:(?i:\d[\"'`´’‘]\s+[\"'`´’‘]\s+\d)|(?:^admin\s*?[\"'`´’‘]|(\/\*)+[\"'`´’‘]+\s?(?:--|#|\/\*|{)?)|(?:[\"'`´’‘]\s*?\b(x?or|div|like|between|and)\b\s*?[+<>=(),-]\s*?[\d\"'`´’‘])|(?:[\"'`´’‘]\s*?[^\w\s]?=\s*?[\"'`´’‘])|(?:[\"'`´’‘]\W*?[+=]+\W*?[\"'`´’‘])|(?:[\"'`´’‘]\s*?[!=|][\d\s!=+-]+.*?[\"'`´’‘(].*?$)|(?:[\"'`´’‘]\s*?[!=|][\d\s!=]+.*?\d+$)|(?:[\"'`´’‘]\s*?like\W+[\w\"'`´’‘(])|(?:\sis\s*?0\W)|(?:where\s[\s\w\.,-]+\s=)|(?:[\"'`´’‘][<>~]+[\"'`´’‘]))" "phase:2,capture,t:none,t:urlDecodeUni,block,msg:'Detects basic SQL authentication bypass attempts 1/3',id:'981244',tag:'OWASP_CRS/WEB_ATTACK/SQL_INJECTION',logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',severity:'2',setvar:'tx.msg=%{rule.id}-%{rule.msg}',setvar:tx.sql_injection_score=+1,setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:'tx.%{tx.msg}-OWASP_CRS/WEB_ATTACK/SQLI-%{matched_var_name}=%{tx.0}'"

2.1 该规则请求的参数包括所有的Cookie信息(Request_Cookies以及!Request_Cookies)以及cookie的名称(Request_name),Post参数(Args)以及Post参数的名称(Args_names),当然还有其中的XML文件(XMLL:/*)

2.2 其中最多的还是那一堆的正则表达式,正则表达式我就不给大家分析了。算了还是贴个图吧:

2.3 使用到请求体阶段“Phase2”阶段

2.4 根据正则表达式来匹配每个对象,并且已经为正则表达式开启了捕获的状态(capture)

2.5 匹配之前先让请求数据经历多种变换(t:none来表示)。经过的主要变换有urlDecode Unicode。前者的主要作用是清除之前设置的所有转换的函数和规则。后者主要是进行URL的编码。

2.6 如果匹配成功后,将会阻塞这个请求(block)。并且抛出提示信息(msg)。一次表明这是一个SQL注入的攻击,并且将这条注入攻击添加到规则当中。同时区分攻击类型的唯一性的标签(tag)也将添加到日志当中。

2.7 该规则同时还被分配了一个唯一性的ID(ID:981244)

Modsecurity原理分析--从防御方面谈WAF的绕过(一)的更多相关文章

  1. 148.CSRF攻击原理分析、防御、装饰器、中间件、IFrame以及js实现csrf攻击

    CSRF攻击概述: CSRF(Cross Site Request Forgery 跨站域请求伪造)是一种网站攻击的方式,它在2007年曾被列为互联网20大安全隐患之一.其他的安全隐患,比如SQL脚本 ...

  2. Azure WAF防火墙工作原理分析和配置向导

    Azure WAF工作原理分析和配置向导 本文博客地址为:http://www.cnblogs.com/taosha/p/6716434.html ,转载请保留出处,多谢! 本地数据中心往云端迁移的的 ...

  3. Junit 注解 类加载器 .动态代理 jdbc 连接池 DButils 事务 Arraylist Linklist hashset 异常 哈希表的数据结构,存储过程 Map Object String Stringbufere File类 文件过滤器_原理分析 flush方法和close方法 序列号冲突问题

    Junit 注解 3).其它注意事项: 1).@Test运行的方法,不能有形参: 2).@Test运行的方法,不能有返回值: 3).@Test运行的方法,不能是静态方法: 4).在一个类中,可以同时定 ...

  4. 转载:AbstractQueuedSynchronizer的介绍和原理分析

    简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...

  5. web压测工具http_load原理分析

    一.前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_load: http://www.acme.com/software/http_load/ ...

  6. 转载:solr MoreLikeThis的原理分析

    转载地址:http://blog.sina.com.cn/s/blog_5ddc071f0101muos.html 在solr中有两种方式实现MoreLikeThis:MoreLikeThisHand ...

  7. WebViewJavascriptBridge 原理分析

    WebViewJavascriptBridge 原理分析 网上好多都是在介绍 WebViewJavascriptBridge如何使用,这篇文章就来说说 WebViewJavascriptBridge ...

  8. Java NIO使用及原理分析 (四)

    在上一篇文章中介绍了关于缓冲区的一些细节内容,现在终于可以进入NIO中最有意思的部分非阻塞I/O.通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据.同样,写入调用将会阻塞直至 ...

  9. Android平台APK分析工具包androguard的部署使用和原理分析

    原创文章,转载请注明出处,谢谢. Android应用程序分析主要有静态分析和动态分析两种,常见的静态分析工具是Apktool.dex2jar以及jdgui.今天突然主要到Google code上有个叫 ...

随机推荐

  1. org.hibernate.MappingException: An association from the table order_intem_inf refers to a unmapped

    执行一个HIbernate的演示样例时出现例如以下错误信息 Exception in thread "main" java.lang.ExceptionInInitializerE ...

  2. Android多点触控技术,实现对图片的放大缩小平移,惯性滑动等功能

    首先推荐一下鸿洋大大的打造个性的图片预览与多点触控视频教程,这套教程教我们一步一步实现了多点触控实现对图片的平移和缩放的功能.这篇文章我将在鸿洋大大的基础之上做了一些扩展功能: 1.图片的惯性滑动 2 ...

  3. C#基础视频教程6.3 如何简单读写数据库

    在继续往下做之前,我们需要把之前的代码尽可能的精简(会对后面很有好处,而且读者也应该仔细比对这一部分的代码和上一部分哪里真正得到了优化,从而提高编程水平). 首先数据库的操作类有哪些是可以做的更加普遍 ...

  4. zoj3662Math Magic

    Math Magic Time Limit: 3 Seconds       Memory Limit: 32768 KB Yesterday, my teacher taught us about ...

  5. es5 - array - concat

    /** * 描述:数组元素合并 * 使用:arr1.concat(arr2) * 参数:arr1.concat(arr2,arr3,arr...) * 说明: * 该concat方法创建一个新数组,该 ...

  6. nginx-rtmp流媒体服务器搭建【转】

    nginx-rtmp https://github.com/pengqiuyuan/nginx-rtmp nginx-rtmp 流媒体服务器的搭建(采集桌面,手机直播) 在线Demo,直播自己的pc机 ...

  7. 使用SimHash进行海量文本去重

    阅读目录 1. SimHash与传统hash函数的区别 2. SimHash算法思想 3. SimHash流程实现 4. SimHash签名距离计算 5. SimHash存储和索引 6. SimHas ...

  8. 有关索引的DMV(转)

    转自:http://www.cnblogs.com/CareySon/archive/2012/05/17/2505981.html 1.查看那些被大量更新,却很少被使用的索引 SET TRANSAC ...

  9. Sublime Text 包管理工具及扩展大全

    Sublime Text 是程序员们公认的编码神奇,拥有漂亮的用户界面和强大的功能,例如代码缩略图,多重选择,快捷命令等.还可自定义键绑定,菜单和工具栏.Sublime Text 的主要功能包括:拼写 ...

  10. oracle 存储过程 示例

      oracle 存储过程 示例 CreationTime--2018年9月4日09点49分 Author:Marydon 1.情景展示 对VIRTUAL_QRCODELOG表的静态二维码,动态二维码 ...