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

 「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。

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()函数猜表名和列名

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日wyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值