免责声明
该文章仅用于信息防御技术的交流和学习,请勿用于其他用途; 在未得到网站授权前提下,禁止对政府、事业单位、企业或其他单位网站及系统进行渗透测试;技术是把双刃剑,请遵纪守法,做一名合格的白帽子安全专家,为国家的网络安全事业做出贡献
SQL注入-防御绕过
WAF概念
WAF是英文”Web Applicaton Firewall“的缩写,中文意思是”Web应用防火墙“,也称为”网站应用级入侵防御系统“。WAF是集WEB防护、网页保护、负载均衡、应用交付于一体的WEB整体安全防护设备。WAF需要部署在Web服务器的前面,串行接入,不仅在硬件上性能要求高,而且不能影响web服务,所以HA功能、Bypass功能都是必须的,而且还要与负载均衡、WebCache等Web服务器入侵的检测能力。常见的实现形式包括代理服务、特征识别、算法识别、模式匹配。
WAF分类
安全防护软件划分为:云WAF、硬件WAF、主机防护软件、软件waf等。在攻防实战中,我们往往需要掌握一些特征,比如服务器、数据库、编程语言等等,以便更灵活的去构造payload,从而绕过安全防护进行漏洞利用
SQL注入绕过常见方式
1、绕过空格(注释符/**/,%a0)
2、括号绕过空格
3、引号绕过(使用十六进制)
4、逗号绕过(limit使用from或者offset)(substr使用from for属于逗号)
5、比较符号(< >)绕过(使用greatest())
6、or and 绕过
7、绕过注释符号(#,–)过滤
8、= 绕过 like
9、绕过union,select,where等
(1)使用注释符绕过
(2)使用大小写绕过
(3)内联注释绕过
(4)双关键字绕过
10、通用绕过(编码)
11、等价函数绕过
12、宽字节绕过
大小写绕过
使用注释绕过
空格绕过
垃圾数据绕过
跟换提交方式绕过
使用hackbar插件
双写绕过
思路讲解:··举例:?id=1··访问?id=1 and 1=1 页面报错 1=1,发现and被过滤,这时候尝试使用双写的方式绕过,例如:anandd 1=1(切记不是 aa nn dd,是 an and d)变成了and,所以这时传输数据库的语句时and 1=1,如果当访问order by错误信息为‘der by’这发现过滤了or,这双写or,后面注入和union注入的一致。其他关键字也是,如果过滤select关键字,可以使用selselectect,双写绕过。
双写绕过始终都是头跟尾双写,例:sel select ect、p php hp,过滤后变成sel ect、p hp
HTTP参数污染绕过
思路讲解:HTTP参数污染,简单的讲就是给相同名称参数附上两个或者两个以上的值,导致应用程序以意外方式解释而出现漏洞,现在的HTTP标准没有提及在遇到相同参数多个赋值时应该怎样处理,因此web程序组件在遇到这类问题时采取的方法也不完全相同。
如以下案例:search.php?id=110&id=911这就是典型的相同参数,多个赋值的情况,针对于这种情况,由于HTTP标准没有规定如何处理,是由Werserver来护理这个事情,但是每个Webserver处理时又不相同,针对于这种情况我们可以进行攻击。语法:?id=1&id=2′ and 1=1 –+
URL编码绕过
一次不行,可使用Burp Suite多次编码
等价函数绕过
思路讲解:hex()、bin() ==> ascii()sleep() ==>benchmark()concat_ws ==> group_concat()mid()、substr() ==> substring()@@user ==>user()@@datadir ==> datadir()
举例:substring()和substr()无法使用时:?id=1+and+ascii(lower(min((select+pwd+from+users+limit+1,1),1,1))) = 74或者:substr((select’passwordd’),1,1)=0x70 strcmp(left(‘password’,1),0x69) = 1strcmp(left(‘password’,1),0x70)=0 strcmp(left(‘password’,1),0x71) = -1
云锁及安全狗绕过
绕过原理与上面类似,利用各种绕过方法即可实现云锁绕过和安全狗绕过
SQL注入防御
1、普通用户与系统管理员用户的权限要有严格区分。在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的建立,删除等权限。那么即使在它们使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。故应用程序在设计的时候,最好把系统管理员的用户与普通用户区分开来。如此可以最大限度的减少注入式攻击对数据库带来的危害;
2、强迫使用参数化语句。如果在编写SQL语句的时候,用户输入的变量不是直接嵌入到SQL语句。而是通过参数来传递这个变量的话,那么就可以有效的防治SQL注入式攻击。
3、加强对用户输入的验证。总体来说,防止SQL注入式攻击可以采用两种方法,一是加强对用户输入的内容的检查与验证;二是强迫使用参数化语句来传递用户输入的内容。
4、多层环境如何防治SQL注入式攻击?在多层应用环境中,用户输入的所有数据都应该在验证之后才能被允许进入到可信区域。未通过验证过程的数据应被数据库拒绝,并向上一层返回一个错误信息。实现多层验证。
5、增加专业的WAF设备
来源:freebuf.com 2021-06-01 21:47:47 by: iamYit
请登录后发表评论
注册