SQL注入原理/利用方式/应对方案

举报
士别三日wyx 发表于 2021/12/23 01:23:26 2021/12/23
【摘要】 SQL注入被称为漏洞之王,是最常用的漏洞之一 SQL注入原理 SQL注入是指用户在参数中插入恶意的SQL语句 , 破坏原有的SQL语法结构,从而执行攻击者的操作 触发点/检测 SQL注入常出现在登录,搜索等功能,凡是与数据库交互的地方都有可能发生SQL注入 SQL注入利用方式 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

  1. updatexml();        第二个参数包含特殊字符会报错
  2. extractvalue();     第二个参数包含特殊字符会报错
  3. floor();                 用来取整,不是数值就会报错

SQLserver

  1. convert();   用来类型转换,第二个参数包含特殊字符会报错
  2. cast();        用来类型转换,参数包含特殊字符会报错

Oracle

  1. 没有报错函数,可以用比较运算符报错

Access

  1. 不支持报错注入,只能使用枚举

MySQL和SQLserver的区别

  1. MySQL脱库时使用information_schema默认数据库,其中schemata存数据库,tables存表,columns存字段;SQLserver脱库时使用系统表,databases存数据库,objects存表,columns存字段
  2. MySQL支持limnt分页,SQLserver只能用top来替代分页
  3. MySQL支持双系统,SQLserver只能支持Windows系统

注释

  • MySQL:        -- , /**/ , #
  • SQLserver    -- , /**/
  • Oracle           -- , /**/
  • Access          没有注释

Access数据库

Access是文件型数据库,不需要端口号,它没有数据库的概念,所有表都在同一个数据库下,没有注释,不支持报错注入,也不能执行系统命令,有一个默认表msysobjects,可以用来判断数据库类型,Access脱库时只能用枚举,也就是配合exists()函数猜表名和列名

文章来源: blog.csdn.net,作者:士别三日wyx,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/wangyuxiang946/article/details/118369428

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。