SQL 注入原理与防御

学习SQL注入

    • 书单
      • 原理
      • 危害
      • SQL注入流程
      • 分类及常用工具
      • 防御
      • 实战

书单

《SQL注入攻击与防御第2版》

原理

注入攻击的本质,是吧用户输入的数据当做代码执行。这里有两个关键条件,第一个是用户能控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。当然,想要研究SQL注入需要深入了解每种数据库的SQL语法及特性。

危害

通过SQL注入攻击,可以获取、删除、修改数据库信息,并提供提权来控制web服务器等其他操作,数据库信息泄露的话,用户信息被泄露,非法倒卖,危害企业政府,国家安全。《刑法》、《网络安全法》都有明确提到计算机危害的严重性。

SQL注入流程

  1. 判断注入类型
  2. 判断注入字段数
  3. 查询回显位
  4. 查询数据库
  5. 查询表,字段名(列名)
  6. 查询对应内容
测试注入:sqlmap.py -u "url"

注数据库:sqlmap.py -u "url" --dbs

注当前数据库:sqlmap.py -u "url" --current-db

注表名:sqlmap.py -u "url" -D 库名 --tables

注列名:sqlmap.py -u "url" -D 库名 -T 表名 --columns

注数据:sqlmap.py -u "url" -D 库名 -T 表名 -C 列名,列名 --dump

分类及常用工具

以注入技术分类:错误注入,布尔注入,UNION注入,时间盲注,ASCII逐字解码
常用工具:SQLmap,Havij(胡萝卜),Pangolin(穿山甲)

防御

  1. 不要信任用户的输入,对用户输入进行检测,通过正则表达式,限制输入长度,对单引号和双“_”等进行转换
  2. 不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取
  3. 不要使用管理员等高级权限的数据库连接,为每个应用使用单独的,权限有限的账号
  4. 不要吧机密信息明文存放,采用加密或哈希(加盐)处理敏感信息
  5. 应用的异常信息应该给出尽可能少的提示,最好使用自定义错误信息对原始错误信息进行包装

实战

零基础学习手工SQL注入

你可能感兴趣的:(WEB安全)