本文内容:
~什么是bypass
~Waf检测机制
~常见绕Waf手法
~建议
每日一次:
一定要在合法的情况下进行渗透测试,不要越界!!!
一、什么是bypass?
0,安装安全狗
没啥说的,直接百度安全狗,下载安装
注意的是:安装狗的时候,PHP study运行模式一定要跳到“系统服务”
1,什么是Waf
WAF是一个缩写,他的全名叫做Web应用防护系统(Web Application
Firewall),是通过通过执行一系列针对HTTP/HTTPS的安全策略来
专门为Web应用提供保护的一款产品。
在互联网快速发展的今天,网站安全问题屡见不鲜,
于是乎WAF类产品开始走红。
2,Waf分类
~硬件Waf
较贵,这样的网站,尽量还是避免。除非拿到授权
~软件Waf
常见:安全狗、云锁、悬镜、护卫神、云盾
Waf的核心就是正则匹配
3,Bypass是什么?
Bypass他就是绕过的意思呀,我们渗透测试人员通过特殊语句的构建
进行渗透测试,然后达到绕过WAF的手法
二、Waf检测机制
1,Dom型 XSS的绕过
~原理就是Waf不会解码
//Xss的常用编码是native
2,先了解的知识
记住一句话,安全和客户体验都是需要平衡的,
特别是对于WAF而言,你想想,用了WAF之后,然后网页动不动就拦截,
比如我是用户,然后因为我用户名叫and然后我就被拉黑了,
因为我不小心输了个'页面就出问题,这个当然不可以,
所以WAF一般都是通用的,并不是单独定制的,既然是通用的,
那么他在拦截上会比较谨慎,所以WAF的正则一般是搭配式的。
三、常见绕Waf手法
1,and 与 1=1一般是拦截的
~但是and 可以试试-1 = -1,若返回正常
~接着在 试试-2 = -1 ,若报错,则说明,这存在注入点
2,数据库的逻辑符号
& 的作用和 and 就差不多
我们可以试试 & 1=1或者& 1=2 //当然换成负数也行
但是 “&” 在url中特殊的含义,所以服务器有时候会搞不清
这个时候 我们只需要对 “&” 进行url编码
3,更简单的
我们直接试试“+、-、*”等等运算符号
一半“-”被执行,直接运行“*”
比如:id=1*1 //看看返回是否正常,正常的话
在id=1*0 //这个时候若返回异常,则这个页面基本存在sql注入
或者试试id=1*2 与 id=2页面是否相等
4,绕waf的时候不要想着编码select等等,
服务器怎么之后你是对select编码呢
做什么事,你得有一定得道理
编码绕过是waf是很少见的
5,mysql的内联注释
~什么是内联注释?
内联注释是MySQL为了保持与其他数据兼容,
将MySQL中特有的语句放在/!...*/中,
这些语句在不兼容的数据库中不执行,
而在MySQL自身却能识别,执行。
补充:
/**/ 数据库注释
/*!/ 内联注释 --> 这是可以运行的
/*!50001*/
//表示数据库版本>=5.00.01时中间的语句才能被执行
//所以有的版本被狗拦截,我们打开burp稍微爆破配合本地mysql
//验证一下 直接会发现 漏网之鱼不是一般的多
说明:Waf一般默认注释的东西是安全的,即很多东西不进行拦截
5+,内联注释可以套内联注释
写入联合语句,被狗拦截,可以稍微减去点语句,看看是什么被拦截了
6,简单总结补充
大小写绕过 (很老的WAF才有用)
替换绕过 (很老的WAF才有用)【和上传文件那个pphphp一样】
特殊字符绕过 (%0a换行)``
编码绕过 (比如会多次解码的东西,例如我们DOM XSS绕狗那个)
等价替换 (利用其它函数替代)[union #%0aselect 拦截][union all #%0aselect 不拦截]
//需要一定的数据库功底
容器特性(例如Apache的Hpp,或者是IIS的%分割)
IIS的容器:
s%e%l%e%c%t ==> select
apache容器:
url id=1&id=2 //显示出id=2的内容,这类似覆盖的意思
利用这一特性:
url id=1/*&id=2 union select 1,2 from admin limit 1,1 %23*/
//%23即# 这其实也算是参数污染
白名单(管理员权限或者是127.0.0.1本地访问不拦截)
可以X-Forwarded-For伪造IP,简称XFF,代表客户端的真实IP
缓冲区 (数据太多了,超出了WAF检测的范围)
简单说,Waf仅仅是个门卫,不敢随意丢弃你发送给服务器的数据
但是数据太多,他也不能一一的检查完毕,所以仅仅检测开头的一些
数据,对后边的数据直接放行
至于多少数据会溢出,这得自己检测了:
burp,抓包,在下边直接添加数据-->
id=2 /*很多字符*/ union select 1,2 from admin limit 1,1
填充字符一般4000多长度就可以了
对于get的方法,也可以在下边直接加数据,因为post传参的优先级
比get要高在很多网页 //可以自己测试 get id=1,下边post id=2
//看看返回界面是id=1,还是id=2
注意:
~在多说一下,并不是填充的越多越多,有的太多,数据库执行不了了
~get那传参长度是有限制的,所以。。。
四、建议
1,有很多同学有自己的想法
建议自己去挨边的试试,有想法就去做
下载一个win server 200x 的安装一个狗,自己多试
2,多说一下
有些同学看到有的网站有狗,开始按照上边的方式去测试
还说,IP被Ban了怎么办
。。。。。。你们不会在自己的虚拟机上搭建狗,进行测试吗
等测试成功了,就一条语句打出去,怎么会被Ban掉IP
知识要活学活用~~~