欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    SQL注入攻击详解ppt课件.ppt

    • 资源ID:2001624       资源大小:186.50KB        全文页数:32页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    SQL注入攻击详解ppt课件.ppt

    SQL 注入攻击,华中科技大学计算机学院,问 题,1. 什么是SQL注入攻击?2. SQL注入攻击的分类?3. SQL注入攻击的危害?4. 常见的SQL 注入攻击的过程?5. 怎样防止SQL注入攻击?6. 我们介绍SQL注入攻击的目的,1. 什么是SQL注入攻击?,不够完整的定义:脚本注入式攻击,恶意用户输入用来影响被执行的SQL脚本;从一个数据库获得未经授权的访问和直接检索;利用SQL语法,针对应用程序开发者编程中的漏洞,往应用程序中插入一些SQL语句成分或者SQL语句,从而能够操作不可访问的数据的方法。通过在应用程序中预先定义好的查询语句结尾加上额外的SQL语句元素,使得数据库服务器执行非授权的查询。,1. 什么是SQL注入攻击? 一个实例,例1:现有的多数网络应用程序,没有充分利用DBMS的身份验证功能,而是在数据库中建立一张表(例如表名为user_table),保存访问应用系统的用户名及其密码,实际访问数据库服务器的只有一个用户。当使用JSP(或ASP)编写一个简单的验证登录网页程序时,该页面要求用户输入用户名(input_ username)和密码(input_password)。提交后由后台应用程序通过拼接:select * from user_table where username = + input_ username + and password = + input_password + ;动态生成一个SQL语句。通过验证结果是否为空来判断用户是否为合法用户。,1. 什么是SQL注入攻击? 一个实例,攻击方法:在密码框输入: or 1 = 1,在用户名框输入:zhuhong后台应用程序组装的SQL语句是: select * from user_table where username = zhuhong and password = or 1 = 1 ; 这个语句的执行结果是什么?讨论: 针对本例解决的办法?更为常见的例子:http:/mysite/studetails.asp?StuID=4,1. 什么是SQL注入攻击?,实质:在一个有漏洞的网络应用程序中,允许用户输入查询条件,并将查询条件嵌入到SQL请求语句中,发送到与该应用程序相关联的数据库服务器中去执行。攻击者通过构造一些畸形的输入,实现操作这种请求语句去获取未知的结果。SQL注入不是数据库或者Web服务器的问题,而是Web应用中的漏洞或者缺陷,2. SQL注入攻击的分类?,Introduction to SQL Injection Attacks for Oracle Developers将Oracle数据库中的SQL注入攻击分为4类:SQL Manipulation (SQL操纵) Code Injection(代码注入)Function Call(函数调用) Buffer Overflows(缓冲区溢出),2. SQL注入攻击的分类?,SQL Manipulation (SQL操纵) 最常见的一种SQL注入攻击方法。攻击者一般试图通过增加where子句中的条件或者用集合操作符(如UNION、INTERSECTION或MINUS)扩展SQL语句,达到修改SQL语句的目的。例2:select product_name from all_products where product_ name like %chairs%;攻击者可以让上面的SQL语句变成:select product_name from all_products where product_ name like %chairs UNION select username FROM dba_users where username like %;,使用UNION SELECT还要求当前语句和最初的语句查询的信息必须具有相同数据类型,不然就会出错,2. SQL注入攻击的分类?,Code Injection(代码注入)SQL注入攻击者试图向现有的SQL语句中增加额外的SQL语句或者命令。 攻击Microsoft SQL Server数据库应用程序例: select * from users where username=bob and password=mypassword; delete form users where username =admin; 在SQL-Server中可能注入成功,但在Oracle中会报错。原因在于SQL Server支持多句执行,而Oracle不允许。,2. SQL注入攻击的分类?,Code Injection(代码注入)Oracle中一些动态执行的匿名存储过程,对于代码注入攻击十分脆弱。例4:在一个Web应用程序中执行的存储过程:BEGIN ENCRYPT_PASSWORD (bob, mypass word); END; BEGIN ENCRYPT_PASSWORD (bob, mypass word); DELETE FROM users WHERE upper (username) = upper (admin); END,2. SQL注入攻击的分类?,Function Call (函数调用)将数据库函数或者自定义函数插入到一个脆弱的SQL语句中。这些函数调用可以调用操作系统或操作数据库中的数据。如Oracle数据库允许函数作为SQL语句的一部分来执行。例5:SELECT TRANSLATE(user input, uf, ar) FROM dual; 调用Oracle数据库函数的注入方式如下:SELECT TRANSLATE(|UTL_HTTP.REQUEST (http:/202.114.1.180/ | , uf, ar ) FROM dual; 改变的SQL语句可以向一个WEB服务器请求一个页面。,2. SQL注入攻击的分类?,Function Call (函数调用)调用自定义的函数也可以实现SQL注入, 如下:SELECT TRANSLATE(|myappadmin.adduser (admin, newpass) | , uf, ar) FROM dual; 攻击者可以创建一个新的用户Buffer Overflows(缓冲区溢出)通过缓冲区溢出,实现代码或SQL语句的注入,通常采用的方法是函数调用。,3. SQL注入攻击的危害,在风险方面,SQL注入攻击对数据库的危害是位居前列的,与缓冲区溢出等漏洞基本相当。如果要实施缓冲区溢出攻击,攻击者必须首先能绕过站点的防火墙。一旦网络应用程序有注入漏洞,攻击者就可以直接访问数据库进而能够获得数据库所在的服务器的访问权,因此在某些情况下,SQL注入攻击的风险要高于所有其他漏洞。,4.常见的SQL 注入攻击的过程,假设: 在攻击前,对网络应用程序、数据库类型、表结构等信息都一无所知,这些信息都需要在注入的过程中通过探测获得;被攻击的网络应用程序存在注入漏洞。过程:确定注入漏洞识别错误;定位错误;确定注入点实施注入攻击确定符合SQL语法的注入语句;判断数据库的类型;构造注入利用代码,4.常见的SQL 注入攻击的过程确定注入漏洞,识别错误网络应用程序产生的错误 缺陷无处不在,检查所有的输入点: . Web表单的域; . URL查询串中的脚本参数; . Cookie中的值或者隐藏的域,4.常见的SQL 注入攻击的过程确定注入漏洞,识别错误网络应用程序产生的错误攻击者首先必须能确立一些与服务器产生的错误相关的提示类型。尽管错误信息本身已被屏蔽,网络应用程序仍然具有能区分正确请求和错误请求的能力,攻击者只需要学习去识别这些提示,寻找相关错误,并确认其是否和SQL相关。攻击者会首先尝试提交一些无效的请求,并观察应用程序如何处理这些错误,以及如果出现SQL错误会发生什么情况。,4.常见的SQL 注入攻击的过程确定注入漏洞,识别错误由Web服务器产生的代码异常(exception),类似于“500:Internal Server Error”;由应用程序代码产生的错误:应用程序考虑到可能会出现一些无效的情况,并分别为之产生了一个特定的错误信息。,4.常见的SQL 注入攻击的过程确定注入漏洞,例:有两个电子商务的应用程序,都使用studetails.asp的页面,该页面期待获得一个参数StuID,即学号,获取该参数后,从数据库中提取相应的学生详细信息数据,然后对返回的结果进行一些处理。两个应用程序都是通过一个学生列表页面上的链接调用studetails.asp,因此能保证StuID一直都存在且有效。 A B 认为这样就不会出现问题 在对记录进行处理前 对参数不做额外的检查. 会确认记录的大小 若攻击者篡改了StuID, 是否会超过0,如果 输入了一个在数据表中不存在的 是空记录,给出提示学号,数据库就会返回一个空记录。 错误:该学生不存在 可能会出现异常,产生 或隐藏该错误,将页面 “500:Internal Server Error”。 重新定位到学生列 表的页面。,4.常见的SQL 注入攻击的过程确定注入漏洞,定位错误攻击者试图定位由人为构造的输入而产生的错误信息,使用标准的SQL注入测试技术,独立地测试每个参数:添加一些SQL关键字,如OR,AND;添加一些字符,如“;”,“”。任何一个返回错误的参数都有可能存在SQL注入漏洞。测试的结果是得到一个可疑的参数列表,剔除造成SQL无关的错误的参数。,4.常见的SQL 注入攻击的过程确定注入漏洞,确定注入点测试字符串参数的情形:字符串表达式是放在引号中的,因此需要阻断引号;不同的数据库服务器连结字符串的语法不同,MS SQL Server使用符号+,Oracle使用符号|。例 6:http:/mysite/studetails.asp?StuName=zhuhong测试该参数:先将其替换成一个无效的字符串,然后再替换成一个可能生成正确字符串的表达式SELECT * FROM students WHERE StuName = zhuhong出错SELECT * FROM students WHERE StuName = zhu + hong结论: 参数StuName存在注入漏洞,4.常见的SQL 注入攻击的过程确定注入漏洞,确定注入点即使应用程序已经过滤了和+等字符,攻击者可以在输入时通过把字符转换成URL编码(即字符ASCII码的16进制)绕过检查 例7:/mysite/proddetails.asp?ProdID=3+1就等于/mysite/proddetails.asp?ProdID=3%2B1 /mysite/proddetails.asp?ProdID=B + ook就等于/mysite/proddetails.asp?ProdID=B%27%2B%27ook,4.常见的SQL 注入攻击的过程实施注入攻击,确定符合SQL语法的注入语句:技术原理简单;关键是能否成功地突破插入语符号限制并能顺利地结束请求语句;需要进行多次测试难点:(i) 通过标准的SELECT WHERE语句,注入点是WHERE语句的一部分。方法:仅仅加上OR 1=1 简单情形如何配对插入符号,使之能与前面的已使用的符号,如左括号匹配 被篡改的请求语句可能会导致应用程序产生其他错误。 难以和SQL语句产生的错误相区分,4.常见的SQL 注入攻击的过程实施注入攻击,难点:(ii) UNION SELECT注入或存储过程注入,还需要能先顺利地结束整个SQL请求语句,然后才能添加其他攻击者所需要的SQL语句 攻击者可以选择使用SQL注释符号(- -)来结束语句例8:登录页面需要输入用户名和密码,并提交SQL请求:SELECT username, UserID, password FROM users WHERE username = user AND password = pass用户输入: john -作为用户名,将会构造出以下WHERE语句: WHERE username = john -AND password = password 考虑:若程序中使用的是: WHERE (username = user AND Password = pass) 又会怎样?,4.常见的SQL 注入攻击的过程实施注入攻击,判断数据库类型:技术原理:基于不同数据库引擎在具体实现上的差异, 简单(应用程序没有进行出错处理,即使做了出错处理也可以攻击)一般技巧:利用字符串的比较,例: AND xxx = x + xx ,若出错则不是SQL-SERVER, 换成“|”成功则是ORACLE使用分号“;” 加注释 “-”使用系统函数表达式还可以被替换成能返回正确值的系统函数例:MS SQL Server的日期函数getdate()与Oracle的sysdate.,4.常见的SQL 注入攻击的过程数据库之间的差异,4.常见的SQL 注入攻击的过程实施注入攻击,确定表的列数:利用出错信息。若错误信息没有被屏蔽,要获取列数只需要在进行UNION SELECT注入时,每次尝试使用不同的字段数即可,当错误信息由“列数不匹配”变成“列的类型不匹配”时,当前尝试的列数就是正确的。利用ORDER BY 语句,使用数字指代列名,攻击者就会对排序列号从列1到列100进行遍历。有些字段可能不允许排序,那么在出现第一次错误时可以再多尝试一到两个数字,以确认列号已遍历完。,4.常见的SQL 注入攻击的过程实施注入攻击,确定列的数据类型:穷举法: UNION SELECT要求前后查询语句查询的字段类型相同,故如果字段数有限,可以简单地利用UNION SELECT语句对字段类型进行穷举。利用SQL的关键字NULL,与静态字段的注入需要区分是数字类型还是字符类型不同,NULL可以匹配任何一种数据类型。构造UNION SELECT语句,其中所有查询字段都为NULL。测试构造的UNION语句是否可以正确执行。,4.常见的SQL 注入攻击的过程实施注入攻击,例9:SELECT ProdNum, ProdType, ProdPrice, ProdProvider FROM Products WHERE (ProdID=1234 AND ProdName= Computer) AND UserName=john构造:)UNION SELECT NULL,NULL,NULL,NULL FROM dual WHERE 1=2 -注入:SELECT ProdNum,ProdType,ProdPrice, ProdProvider FROM Products WHERE (ProdID=1234) UNION SELECT NULL,NULL,NULL,NULL WHERE 1=2 - AND ProdName=Computer) AND UserName=john,4.常见的SQL 注入攻击的过程实施注入攻击,逐一测试:UNION SELECT 1,NULL,NULL,NULL FROM dual WHERE 1=2 - 无错 第一个字段是数字类型 ) UNION SELECT 1,2,NULL,NULL FROM dual WHERE 1=2 - 出错 第二个字段不是数字类型 ) UNION SELECT 1, 2,NULL,NULL FROM dual WHERE 1=2 - 无错 第二个字段是字符串类型 ) UNION SELECT 1, 2,3,NULL FROM dual WHERE 1=2 - 出错 第三个字段不是数字类型,4.常见的SQL 注入攻击的过程实施注入攻击,猜测表名和列名:可以通过在Where条件后添加count集函数判断,来猜测数据库中的表名或者列名。例:对于course表中的字符类型属性列id,如果select id, name, mark, teacher_id from course where id = 001 and (select count(name) from course)0 and 1=1没有报错,则说明数据库中有一个course表还有一个名叫name的属性,其它属性列也可以通过常识判断猜测后验证。,5. 怎样防止SQL注入攻击?,(1) 在服务端正式处理之前对提交数据的合法性进行检查; (2) 封装客户端提交信息; (3) 替换或删除敏感字符/字符串; (4) 屏蔽出错信息。 方案(1) 是最根本的解决方案,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作,不过这需要开发者能够以一种安全的方式来构建网络应用程序。方案(2)的做法需要RDBMS的支持,目前只有Oracle采用该技术方案(3)是一种不完全的解决措施方案(4) 是目前最常被采用的方法,6. 我们介绍SQL注入攻击的目的?,1. 应该有意识地提高自己的SQL使用水平2. 应该编写安全的代码3.应该增强法律意识,

    注意事项

    本文(SQL注入攻击详解ppt课件.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开