一个萌新对web常见漏洞认识的记录,若有不对的地方,望各路大佬指正。
这些都是从各个博客上摘抄的,为了加深记忆吧
-
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无法语义分析
防御措施具体后续学习过程中会再补充。