SQL注入原理/利用方式/应对方案
SQL注入被称为漏洞之王,是最常用的漏洞之一
SQL注入原理
SQL注入是指用户在参数中插入恶意的SQL语句 , 破坏原有的SQL语法结构,从而执行攻击者的操作
触发点/检测
SQL注入常出现在登录,搜索等功能,凡是与数据库交互的地方都有可能发生SQL注入
SQL注入利用方式
SQL注入根据注入点可以分为数值型注入和字符型注入
根据注入方式可以分为联合注入,报错注入,布尔盲注,时间盲注,二次注入,堆叠注入,宽字节注入和HTTP Header注入
其中HTTP Header注入又分 Referer注入 , Cookie注入 和 User-agent注入
时间盲注又有一种替代方式,叫DNSlog注入,也叫带外注入
SQL注入应对方案
分为三个方面: 参数过滤 , 预编译 以及 限制权限和报错
参数过滤以各种厂商以及代码的WAF为主,比如替换空格,关键字,双写,大小写,特殊字符转义
预编译主要依赖各种框架,比如Java的mybatis框架 和 PHP的 thinkphp框架
限制权限和报错是指限制数据库的权限,以及控制数据库的报错信息,报错信息不要对外展示
报错注入函数
MySQL
- updatexml(); 第二个参数包含特殊字符会报错
- extractvalue(); 第二个参数包含特殊字符会报错
- floor(); 用来取整,不是数值就会报错
SQLserver
- convert(); 用来类型转换,第二个参数包含特殊字符会报错
- cast(); 用来类型转换,参数包含特殊字符会报错
Oracle
- 没有报错函数,可以用比较运算符报错
Access
- 不支持报错注入,只能使用枚举
MySQL和SQLserver的区别
- MySQL脱库时使用information_schema默认数据库,其中schemata存数据库,tables存表,columns存字段;SQLserver脱库时使用系统表,databases存数据库,objects存表,columns存字段
- MySQL支持limnt分页,SQLserver只能用top来替代分页
- MySQL支持双系统,SQLserver只能支持Windows系统
注释
- MySQL: -- , /**/ , #
- SQLserver -- , /**/
- Oracle -- , /**/
- Access 没有注释
Access数据库
Access是文件型数据库,不需要端口号,它没有数据库的概念,所有表都在同一个数据库下,没有注释,不支持报错注入,也不能执行系统命令,有一个默认表msysobjects,可以用来判断数据库类型,Access脱库时只能用枚举,也就是配合exists()函数猜表名和列名
文章来源: blog.csdn.net,作者:士别三日wyx,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/wangyuxiang946/article/details/118369428
- 点赞
- 收藏
- 关注作者
评论(0)