学习sql注入已经有段时间了,大部分还是mysql的注入。今天做个总结,最近的学习中记录的一些知识也可以帮助一些和我一样的小白。
首先针对各种注入方法和类型,理解起来很繁琐,容易混乱,下面是我的记忆框架,不是很全面,欢迎大佬指出。
注入类型:
(下方为举例,,实际上任何我们可控,过滤不严且带入数据库执行)
?id=1' 字符型 主要有单引号闭合,双引号闭合,取决与后台语句的书写方法
?id=1 数字型号 大部分不用加闭合,后台是修改语句,并且id在最后一位的个别时可能要闭合一下括号
注入位置:
http头注入 在http头的的注入点,常出现在UA,referer,cookie
二次注入 特殊字符被过滤后失去作用但保留下来存储到数据库里,再次被调用时未经过过滤使用
post注入 表单提交后带入数据库时没有经过过滤
注入方式:
联合注入 联合查询注入
报错注入 利用extractvalue,updatexml等语句
布尔型盲注 利用length,substr,ascii进行注入
时间注入 利用if,sleep搭配布尔注入执行,在页面无错误显示,但确实存在注入点时使用
堆叠注入 限制比较多mysql支持,但是需要php函数支持
基础绕过类型:
二次编码注入 后台代码错误的对参数进行了二次url解码时,过滤在第一次时使用导致过滤不完全并在第二次解码时产生的漏洞
base64编码 后台先过滤再解码产生漏洞
宽字节注入 数据库为gbk编码,利用gbk汉字编码绕过转义符号
相互组合使用,也可能单个出现,以上不是全部但大体的记忆方式是一样的。
waf基础绕过:
/*!*/ 内联注释
/**/注释代替空格
--+dddddd%0a 参数污染,注释后换行
&& 代替and
|| 代替or
以上就是对mysql注入的学习总结,越学习越发觉得闭合才是最关键的地方,可能是因为我太菜了吧;