揭开SQL注入的神秘面纱

2020-02-27 193浏览

  • 1.揭开SQL注入的神秘面纱 IT运维中心数据库管理部 宋沄剑 2015.5.7
  • 2.攻击者 1. 2. 3. 4. 5. 6. APP将表格发送给用户. 攻击者将带有SQL注入的参数 发送给WEB服务器. APP利用用户输入的数据构建 SQL串. APP将SQL发送给DB. DB执行了被注入的SQL,返 回结果给APP. APP将数据返回给用户. Form User Pass ‘ or 1=1-- Firewall Web Server DB Server
  • 3.SQL注入? 可信部分http://www.mysite.com/Widget?Id=1 SELECT * FROM Widget WHERE ID = 1 不可信部分
  • 4.It's not just for SQL
  • 5.议程 什么是SQL注入 SQL注入的种类 SQL注入工具 如何防范SQL注入
  • 6.什么是SQL注入 SQL 注入是一种代码注入技术,用于攻击基于数据库的应 用,基本原理是将SQL语句插入到参数位置执行。SQL 注 入通过应用软件的安全漏洞(比如说用户输入的特殊字符 没有被转义、或用户输入不是强类型导致意外执行) 本质是用户输入作为SQL命令被执行
  • 7.SQL注入的危害 在数据库层面可以执行权限范围内的任意操作 绕过身份验证机制 读取本不应该读取的信息(传说中的开房库)( CSDN明文存用户密码) 修改数据库 数据丢失、数据库拒绝服务(由于没有经济利益 ,通常黑客不会这么做) 入侵数据库所在服务器(通过xp_cmdshell提权) 损害公司或者产品形象
  • 8.SQL注入的现实例子-请假条
  • 9.请假条-防注入方法1-强类型(参数化)
  • 10.请假条-防注入方法2-特殊字符过滤
  • 11.议程 什么是SQL注入 SQL注入的种类 SQL注入工具 如何防范SQL注入
  • 12.SELECT语句注入点 常见SQL注入点 SELECT columns FROM table WHERE expression ORDER BY expression 注入点最可能位置 – WHERE 之后 – ORDER BY 之后 – 表名称和列名称位置
  • 13.Insert语句注入点 插入语句 INSERT INTO table (col1, col2, ...) VALUES (val1, val2, ...) 要求 – 插入列数必须和值一致 – 值数据类型必须和指定列一致 手段:不断加输入值,直道不再报错 foo’)-foo’, 1)-foo’, 1, 1)--
  • 14.Update注入点 Update语句 UPDATE table SET col1=val1, col2=val2, ... WHERE expression 注入点 – SET 子句 – WHERE 子句 请小心Where子句注入,黑客在尝试过程就可能导致: – ’ OR 1=1 将会是灾难
  • 15.基于批处理的SQL注入 par=1; SQL query;--
  • 16.基于Union的注入(Union-Based Injection) 将Select合并为一个结果 – SELECT cols FROM table WHERE expr – UNION – SELECT cols2 FROM table2 WHERE expr2 允许攻击者读取任意表 – foo’ UNION SELECT number FROM cc-- 要求 – 结果集必须是同样的列数和同样数据类型 – 攻击者必须知道表名称 – DB返回的列名是第一个查询的列名称
  • 17.基于Union的注入(Union-Based Injection) 使用NULL找到列数量 – ‘ UNION SELECT NULL-– ‘ UNION SELECT NULL, NULL-– ‘ UNION SELECT NULL, NULL, NULL-使用Order By找到列数量 – ‘ ORDER BY 1-- – ‘ ORDER BY 2-– ‘ ORDER BY 3-找到哪一列是字符串类型列 – ‘ UNION SELECT ‘a’, NULL, NULL— – ‘ UNION SELECT NULL, ‘a’, NULL-– ‘ UNION SELECT NULL, NULL, ‘a’--
  • 18.基于Union的注入(Union-Based Injection) col1=1 UNION ALL SELECT query--
  • 19.基于错误的注入(Error-Based Injection)http://localhost:12587/Default.aspx?id=2or x=1 永远不要将数据库错误信息在生产环境 中返回!!!500类错误重定向!
  • 20.推理注入 基于布尔的注入和基于时间的注入统称为推理注入 这是由于应用程序可能不返回对应数据,所以需要借助这 种比较麻烦的办法 确定页面是否可注入 –http://site/blog?message=5'>http://site/blog?message=5