WAF分类

0x01 云waf

在配置云waf时(通常是CDN包含的waf),DNS需要解析到CDN的ip上去,在请求uri时,数据包就会先经过云waf进行检测,如果通过再将数据包流给主机。

0x02 主机防护软件

在主机上预先安装了这种防护软件,可用于扫描和保护主机(废话),和监听web端口的流量是否有恶意的,所以这种从功能上讲较为全面。这里再插一嘴,mod_security、ngx-lua-waf这类开源waf虽然看起来不错,但是有个弱点就是升级的成本会高一些。

0x03 硬件ips/ids防护、硬件waf

使用专门硬件防护设备的方式,当向主机请求时,会先将流量经过此设备进行流量清洗和拦截,如果通过再将数据包流给主机。

02

WAF身份认证阶段的绕过

WAF有一个白名单,在白名单内的客户请求将不做检测

0x01 伪造搜索引擎

早些版本的安全狗是有这个漏洞的,就是把User-Agent修改为搜索引擎,便可以绕过,进行sql注入等攻击,这里推荐一个谷歌插件,可以修改User-Agent,叫User-Agent Switcher

0x02 伪造白名单特殊目录

360webscan脚本存在这个问题,就是判断是否为admin dede install等目录,如果是则不做拦截,比如

GET /pen/news.php?id=1 union select user,password from mysql.user

可以改为

GET /pen/news.php/admin?id=1 union select user,password from mysql.user

或者

GET /pen/admin/..\news.php?id=1 union select user,password from mysql.user

0x03 直接攻击源站

这个方法可以用于安全宝、加速乐等云WAF,云WAF的原理通过DNS解析到云WAF,访问网站的流量要经过指定的DNS服务器解析,然后进入WAF节点进行过滤,最后访问原始服务器,如果我们能通过一些手段(比如c段、社工)找到原始的服务器地址,便可以绕过。

03

WAF数据包解析阶段的绕过

0x01 编码绕过

最常见的方法之一,可以进行urlencode。

0x02 修改请求方式绕过

大家都知道cookie中转注入,最典型的修改请求方式绕过,很多的asp,aspx网站都存在这个问题,有时候WAF对GET进行了过滤,但是Cookie甚至POST参数却没有检测。还有就是参数污染,典型例子就是multipart请求绕过,在POST请求中添加一个上传文件,绕过了绝大多数WAF。

0x03 复参数绕过

例如一个请求是这样的

GET /pen/news.PHP?id=1 union select user,password from MySQL.user

可以修改为

GET /pen/news.php?id=1&id=union&id=select&id=user,password&id=from%20mysql.user

很多WAF都可以这样绕。

04

WAF触发规则的绕过

WAF在这里主要是针对一些特殊的关键词或者用法进行检测。绕过方法很多,也是最有效的。

0x01 特殊字符替换空格

用一些特殊字符代替空格,比如在mysql中%0a是换行,可以代替空格,这个方法也可以部分绕过最新版本的安全狗,在sqlserver中可以用/**/代替空格

0x02 特殊字符拼接

把特殊字符拼接起来绕过WAF的检测,比如在Mysql中,可以利用注释/**/来绕过,在mssql中,函数里面可以用+来拼接,例如

GET /pen/news.php?id=1;exec(master..xp_cmdshell 'net user')

可以改为

GET /pen/news.php?id=1; exec('maste'+'r..xp'+'_cmdshell'+'"net user"')

0x03 注释包含关键字

在mysql中,可以利用/*!*/包含关键词进行绕过,在mysql中这个不是注释,而是取消注释的内容。

例如,GET /pen/news.php?id=1 union select user,password from mysql.user

可以改为

GET /pen/news.php?id=1 /*!union*/ /*!select*/ user,password /*!from*/ mysql.user

05

常见绕过WAF方法总结

0x01 大小写转换法

把大写的小写,小写的大写。比如:

SQL:sEleCt vERsIoN();

‍‍XSS:

出现原因:在waf里,使用的正则不完善或者是没有用大小写转换函数。

0x02 干扰字符污染法

空字符、空格、TAB换行、注释、特殊的函数等等都可以。比如下面的:

SQL:sEleCt+1-1+vERsIoN /*!*/ ();`yohehe‍‍

‍‍SQL2:select/*!*/`version`();

出现原因:利用网站使用的语言函数特性来绕过waf的规则或者使用会无视的字符。

0x03 字符编码法

就是对一些字符进行编码,常见的SQL编码有unicode、HEX、URL、ascll、base64等,XSS编码有:HTML、URL、ASCII、JS编码、base64等等

SQL:load_file(0x633A2F77696E646F77732F6D792E696E69)

‍‍‍‍XSS:rip>

出现原因:利用waf的不完整性,只验证一次字符串或者过滤的字符串并不完整。

本来想给大家分享个不错的免杀PHP大马基本无视各类waf,因为是最新放出来的,而且后门我还没分析成功,不知道有没有后门,就先不放给大家了。如果大家需要的话,可以后台留言,我私发给你。

常见WAF绕过思路的更多相关文章

  1. 16. 再说 WAF 绕过

    1,大小写混排 这可以算最容易想到的方式了.大小写绕过用于只针对小写或大写的关键字匹配技术,正则表达式 /express/i 大小写不敏感即无法绕过,这是最简单的绕过技术. 举例: z.com/ind ...

  2. 渗透测试学习 二十八、WAF绕过详解

    大纲: WAF防护原理讲解 目录扫描绕过WAF 手工注入绕过WAF sqlmap绕过WAF 编写salmap绕过WAF 过WAF一句话编写讲解 菜刀连接绕过WAF webshell上传绕过WAF 提权 ...

  3. 24:WEB漏洞-文件上传之WAF绕过及安全修复

    本课重点 案例1:上传数据包参数对应修改测试 案例2:safedog+云服务器+uploadlabs测试 案例3:safedog+云服务器+uploadlabs_fuzz测试 案例4:文件上传安全修复 ...

  4. 从偶然的机会发现一个mysql特性到wooyun waf绕过题

    从偶然的机会发现一个mysql特性到wooyun waf绕过题 MayIKissYou | 2015-06-19 12:00 最近在测试的时候,偶然的机会发现了一个mysql的特性, 为啥是偶然的机会 ...

  5. 28.【转载】挖洞技巧:APP手势密码绕过思路总结

    说到APP手势密码绕过的问题,大家可能有些从来没接触过,或者接触过,但是思路也就停留在那几个点上,这里我总结了我这1年来白帽子生涯当中所挖掘的关于这方面的思路,有些是网上已经有的,有些是我自己不断摸索 ...

  6. 基于HTTP协议的WAF绕过

    一,畸形包绕过 1.先关闭burpsuite长度更新,为get请求,先使用bp的method转换为POST请求 2.get请求中空格使用%20代替,Connection改为keep-alive 二,分 ...

  7. 各种WAF绕过手法学习

    原文:https://mp.weixin.qq.com/s/aeRi1lRnKcs_N2JLcZZ0Gg 0X00    Fuzz/爆破 fuzz字典 1.Seclists/Fuzzing https ...

  8. 文件上传之WAF绕过及相安全防护

    文件上传在数据包中可修改的地方 Content-Disposition:一般可更改 name:表单参数值,不能更改 filename:文件名,可以更改 Content-Type:文件 MIME,视情况 ...

  9. sqlmap之waf绕过

    #一点补充 在老版本的安全狗中,可通过构造payload: http://xx.xx.xx.xx/sqli-labs/Less-2/index.php/x.txt?id=1 and 1=1 可通过in ...

随机推荐

  1. JacksonConfig

    package org.linlinjava.litemall.core.config; import com.fasterxml.jackson.annotation.JsonInclude; im ...

  2. 吴裕雄--天生自然C语言开发:指针

    #include <stdio.h> int main () { int var1; ]; printf("var1 变量的地址: %p\n", &var1 ) ...

  3. 用logstash 作数据的聚合统计

    用logstash 作数据的聚合统计 以spark-streaming 处理消费数据,统计日志经spark sql存储在mysql中 日志写入方式为append val wordsDataFrame ...

  4. Object.prototype.toString.call(obj).slice(8,-1)

    1.Object.prototype.toString() 该方法返回描述某个对象数据类型的字符串,如自定义的对象没有被覆盖,则会返回“[object type]”,其中,type则是实际的对象类型. ...

  5. mysql命令运行sql文件

    navicat转储sql,cmd 打开运行 切换到mysql目录下:mysql -uroot -p  回车输入密码 创建数据库语句:  CREATE DATABASE `tcc` CHARACTER  ...

  6. UFT场景恢复

    场景恢复: 在脚本运行中可能会出现一些非预期事件.错误.程序崩溃等情况,阻止脚本继续执行下去,在此情况下脚本可能暂停执行, 直到某些界面被操作之后才会继续执行下去,为了处理这一类事件因此存在场景恢复. ...

  7. SHELL用法一(基本概念)

    1. SHELL 编程概念入门 1)一个完整 Linux 操作系统(Linux 内核),默认用户是不能直接操作 Linux 内核,需要借助第三方的程序或者软件去操作,例如桌面工具.命令行工具(SHEL ...

  8. leetcode 1.回文数-(easy)

    2019.7.11leetcode刷题 难度 easy 题目名称 回文数 题目摘要 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 思路 一些一定不为回文数的 ...

  9. DailyRollingFileAppender-设置文件大小和备份天数

    感谢:http://byx5185.iteye.com/blog/1616034 1.重写FileAppender : package com.bankht.cis.tps.apps.tps.util ...

  10. Mysql错误问题:ERROR 1005 (HY000): Can't create table 'crm_1.tbl_client' (errno: 150)

    MySQL外键创建条件: 1.两个表必须是InnoDB数据引擎2.外键表的外键字段必须是主键3.字段类型必须一致 创建表时创建外键: create table tbl_client(userName ...