暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

扫盲帖 | SQL注入简介

第59号 2021-05-11
408

什么是SQL?

结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。



什么是SQL注入? 

SQL注入一种代码注入技术,用于攻击基于数据库的应用,基本原理是将SQL语句插入到参数位置,后台将该参数与SQL语句拼接后对数据库进行操作而导致的漏洞。

1、web服务器将表格发送给用户

2、攻击者将带有SQL注入特征的参数发送给web服务器(user=” “ ;pass=” ‘ or 1=1 – “)

3、web服务器利用用户输入的数据构建SQL串(select * from user where user=’ ‘ and pass=’’ or 1=1– ‘)

4、web服务器将SQL发送给数据库服务器

5、数据库服务器执行被注入的SQL,返回结果给服务器

6、web服务器将数据返回给用户 



SQL注入类型 


按数据库执行结果是否显示在页面上分类

  • SQL回显注入(数据库的执行结果直接显示在页面上)

    SQL回显注入可再分为:

    a. union联合查询注入:通过union联合查询数据,回显数据在正常页面

    b. 报错注入:通过报错页面回显数据库的敏感信息


  • SQL盲注(不显示在页面上)

    SQL盲注有可以分为:

    a. 布尔盲注:通过页面的变化判断注入语句的正确性,猜解数据

    b. 时间注入:通过页面的返回时间猜解数据 


按注入点类型来分类

  • 数学型注入点

    在web端大概是http://www.xxx.com/news.php?id=1 这种形式,其注入点id类型为数字,因此为数字型注入。其SQL语句原型大致为 :select * form 表名 where id=1 

  • 字符型注入点

    在web端大概是http://www.xxx.com/news.php?name=admin,其注入点name为字符类型,因此为字符型注入。其SQL语句原型大致为: select * form 表名 where name=’admin’。有时候为双引号:where name=”admin” 

  • 搜索型注入点

    这是一类特殊的注入点,主要是因为在数据搜索时没过滤搜索参数,一般在链接地址中存在”keyword=关键字”,有的不显示在链接地址里面,而是通过搜索框表单提交。其SQL语句原型大致为:select * from 表名 where 字段 like ‘%关键字%’ 


按提交数据的方式和位置来分类

  • GET注入

    提交数据的方式是GET,注入点的位置在GET参数部分,如http://www.xxx.com/news.php?id=1,id为注入点 

  • POST注入

    使用POST方式提交数据,注入点位置在POST的BODY部分,常发生在表单处 

  • Cookie注入

    HTTP请求的时候header部分的Cookie信息存在注入点 

  • HTTP注入

    注入点在header的其他字段,如User-Agent字段,Cookie注入其实也是HTTP注入的一部分 



SQL注入的主流防御方法


代码层防御方法 

  1.  严格检查用户输入的数据类型

  2. 限制用户输入长度

  3. 对敏感字符进行转义,如单引号,双引号

  4. 对特殊字符进行过滤,如(select;union;and;or)

  5. 参数化语句,使用占位符或绑定变量向SQL查询提供参数

  6. 数据库控制,如使用权限有限用户连接数据库;机密数据加密后存入数据库

  7. 错误返回统一化:应用报错时,使用统一页面返回,并尽可能给出少的提升 


平台层防御方法 

  1.  web应用防火墙(WAF)

  2. 数据库防火墙 


文章转载自第59号,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论