渗透测试技术 课件 第5章-5.2-SQL注入攻击.pptx

渗透测试技术 课件 第5章-5.2-SQL注入攻击.pptx

  1. 1、本文档共73页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQL注入攻击;SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。;目录/CONTENTS;所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。;一般用户登录用的SQL语句为: SELECT * FROM user WHERE username=admin AND password=passwd; 此处admin和passwd分别为用户输入的用户名和密码,如果程序员没有对用户输入的用户名和密码做处理,就可以构造万能密码成功绕过登录验证。;如用户输入 or 1#,SQL语句此时将变为: SELECT * FROM user WHERE username=or 1# AND password=; or 1为TRUE,#注释掉后面的内容,逻辑就会变成类似于 SELECT * FROM user WHERE username=or 1; or 语句连接两个条件,其中只要一个为true,结果就会true 所以查询语句可以正确执行。;pikachu来测试一下: 查看源代码,可以看到SQL语句为: SELECT id,email FROM member WHERE username=$name; 拼接之后,SQL语句为SELECT id,email FROM member WHERE username= or 1#; 语句永恒为真,则输出所有的用户 ;SQL注入漏洞的产生需要满足两个条件: 参数用户可控:前端传给后端的参数内容是用户可以控制的。 参数带入数据库查询:传入的参数拼接到SQL语句并带入数据库查询。;① http://www.XXXXXX.com/showtail.asp?id=40 ② http://www.XXXXXX.com/showtail.asp?id=40 and 1=1 ③ http://www.XXXXXX.com/showtail.asp?id=40 and 1=2 如果执行①后,页面上提示报错或者提示数据库错误的话,说明是存在注入漏洞的。 如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。 ;目录/CONTENTS;SQL注入的分类 - 按注入点类型来分;按数据提交方式来分类: GET型注入:提交数据的方式是GET, 注入点的位置在GET参数部分。比如有这样的一个链接 /news.php?id=1 , id 是注入点。 POST型注入:使用 POST 方式提交数据,注入点位置在 POST 数据部分, 常发生在表单中。 cookie注入:HTTP请求的时候会带上客户端的Cookie,注入点存在cookie当中的某个字段中。 HTTP头部注入:注入点在 HTTP 请求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话,Cookie 其实应该也是算头部注入的一种形式。因为在 HTTP 请求的时候, Cookie 是头部的一个字段。 ;按照执行效果来分类: 联合查询注入,可以使用union的情况下的注入。 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。;目录/CONTENTS;1.限制数据类型: 在传入参数的地方限制参数的类型,比如整型 Integer,随后加入函数判断,如is_numeric($_GET[‘id’]) 只有当get到的id为数字或者数字字符时才能执行下一步,限制了字符自然就限制了注入,毕竟构造参数怎么可能不传入字符。但这种方法存在一定的限制,只能在特定的页面才能使用,一般大部分都是要求我们传入的字符串,但可以很大程度限制整型注入的情况。;2.正则匹配过滤: preg_match(/and|select|i

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档