《Web安全程序设计与实践》课件项目4_第1页
《Web安全程序设计与实践》课件项目4_第2页
《Web安全程序设计与实践》课件项目4_第3页
《Web安全程序设计与实践》课件项目4_第4页
《Web安全程序设计与实践》课件项目4_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目4数据库暴库——Get型注入攻击【项目描述】本项目对Get型SQL注入攻击和防护进行实训。本项目包含了四个任务,首先建立数据库用于信息查询,然后开发一个基于Get型查询功能的网站,接下来利用Get型SQL注入实现数据库暴库,最后分析Get型SQL注入攻击的原理,提出并实现对Get型SQL注入攻击的防护。通过本项目实训,可以解释和分析Get型SQL注入漏洞对数据库进行暴库攻击的原理及危害,应用参数化查询功能实现Get型SQL注入攻击的防护。【知识储备】HTMLGet方式参数提交原理Get型SQL注入攻击使用了HTML的Get提交信息方式。Get方式将表单中的数据按照“变量”=“值”的形式,使用“?”连接添加到action所指向URL的后面。如果有多个变量,各个变量之间使用“&”连接。Get方式提交的表单只支持ASCII字符,非ASCII字符必须使用URL编码的方式传递,例如中文。另外一些特殊的字符也需要进行URL编码,如果“值”字符串中包含了=或者&,必须将引起歧义的&和=符号进行编码转义。URL编码的格式是用百分号加字符ASCII码的十六进制表示。数据库暴库的原理数据库暴库是Get型SQL注入的常用攻击。暴库就是通过数据库的SQL注入等漏洞得到数据库的内容。Get方式的参数提交多用于数据库的查询操作,并在页面显示查询结果。因此,常常可以利用Get方式查询数据库实现暴库。数据库的UNION操作符用于合并两个或多个SELECT语句的结果集,如果存在SQL注入漏洞,则可以构造一个UNION查询语句提交给数据库查询页面,进而实现数据库暴库。Get型和Post型SQL注入攻击的区别二者从危害性方面很难对比大小,但方式完全不同。通过对Post与Get提交信息方式的区别可知,Post型是通过Form表单提交数据,而Get型是将数据的按照“变量”=“值”的形式,使用“?”连接添加到action所指向URL的后面。因此,Post型SQL注入会发生在页面表单提交信息的情况下,而Get型SQL注入往往发生在通过超连接方式向其它网页传递参数的情况下。【任务4-1】创建数据库本任务采用SQL脚本的方式创建数据库lab。在该数据库中建立表books,最后插入两条记录。在Apache的网站根目录C:\Apache24\htdocs\下新建一个文件夹get作为本项目的网站目录。创建SQL脚本将脚本文件导入到数据库【任务4-2】建立Get方式查询的网站在本任务,创建一个基于Get方式信息查询功能的网页并进行功能测试。4-2-1任务实现首先将项目3网站目录下的con_database.php复制到C:\Apache24\htdocs\get目录下。然后在get目录下新建一个index.php网页文件4-2-2功能测试打开浏览器,在地址栏输入服务器的地址和相对路径以及文件名,即可访问。如果是本地访问,可以打开http://localhost/get/index.php?id=1查询第一条记录,如图42所示。其中“?”用来连接URL地址和Get方式传递的变量id,id的值为1。【任务4-3】数据库暴库攻击测试在本任务,进行Get方式SQL注入暴库攻击测试,并对攻击原理进行分析。4-3-1暴数据库在浏览器地址栏输入以下内容:http://localhost/get/index.php?id=-1%27union%20select%201,group_concat(schema_name),3%20from%20information_schema.schemata--+其中,id=-1,则查询记录为空;%27是将单引号用URL编码形式表示的ASCII字符(百分号加两位十六进制格式),和index.php网页的第19行的id='$id'左边的单引号形成闭合。%20表示空格。由于URL结尾的空格会被浏览器忽略,故使用了URL特殊字符转义+表示空格。此时的SQL语句为SELECT*FROMbooksWHEREid='-1'unionselect1,group_concat(schema_name),3frominformation_schema.schemata--'LIMIT0,1。由于--注释掉了后面的内容,因此该SQL语句等价于:SELECT*FROMbooksWHEREid='-1'unionselect1,group_concat(schema_name),3frominformation_schema.schemata其中,union运算符将多个select语句的结果组合成一个结果集,要求查询中的列数必须要相同。由于books表有三列,因此unionselect也要查询了三个属性,其中1和3不是表的属性,目的是凑够三个属性,也可以是其它数字或者字符串。information_schema数据库是MySQL系统内置的数据库,保存的是本数据库实例中其它所有数据库的信息,information_schema的schemata表提供的是数据库的信息,schemata表的schema_name提供了数据库的名称,使用group_concat()函数把所有的数据库名称值组合起来。注入攻击的结果如图4-3所示。从以上结果可以看出,在Bookname中出现了整个MySQL中所有的数据库。Author的内容为3,是由于unionselect的第三个属性为3。图

4‑3

注入攻击暴数据库4-3-2暴lab数据库的数据表在浏览器地址栏输入并打开以下内容:http://localhost/get/index.php?id=-1%27union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=%27lab%27--+此时,index.php网页第19行的SQL语句等价于:SELECT*FROMbooksWHEREid='-1'unionselect1,group_concat(table_name),3frominformation_schema.tableswheretable_schema='lab'其中information_schema的tables提供的是数据表的信息。注入攻击的结果如图4-4所示:从以上结果可以看出,在Bookname中出现了lab数据库的所有数据表。图

4‑4

注入攻击暴数据表4-3-3暴users表的所有列在浏览器地址栏输入以下内容:http://localhost/get/index.php?id=-1%27union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_name=%27users%27--+此时,index.php网页第19行的SQL语句等价于:SELECT*FROMbooksWHEREid='-1'unionselect1,group_concat(column_name),3frominformation_schema.columnswheretable_name='users'其中information_schema的columns表提供的是数据表的列的信息。注入攻击的结果如图4-5所示:图

4‑5

注入攻击暴数据表的所有列4-3-4暴users表的数据在浏览器地址栏输入以下内容:http://localhost/get/index.php?id=-1%27union%20select%201,username,passcode%20from%20users%20where%20id=1--+此时,index.php网页第19行的SQL语句等价于:SELECT*FROMbooksWHEREid='-1'unionselect1,username,passcodefromuserswhereid=1注入攻击的结果如图4-6所示:可以发现,该注入攻击把users表的第一条记录的用户名和密码查询出来了。图

4‑6

注入攻击暴表的数据4-3-5测试分析通过以上攻击手段发现,只要网站存在注入攻击漏洞,整个MySQL数据库的都可以被注入攻击后暴露出来。以上攻击手段均采用了union联合查询,union操作符用于合并两个或多个select语句的结果集。需要注意的是union内部的select语句必须拥有相同数量的列,列也必须拥有相似的数据类型。由于lab数据库的books表有3列(三个字段),因此unionselect语句也选择了三个字段。将SQL查询语句SELECT*FROMbooksWHEREid='-1'unionselect1,group_concat(schema_name),3frominformation_schema.schemata放在数据库中进行查询,其结果如图4-7所示由于数据库schema_name很多,需要在一行中全部输出,因此使用了group_concat()函数把schema_name列的所有值组合起来。如果不使用group_concat,其查询结果就有很多行,无法将bookname字段通过网页显示出来。SQL语句SELECT*FROMbooksWHEREid='-1'unionselect1,schema_name,3frominformation_schema.schemata的查询结果如图4-8所示Unionselect语句中的1、3只是起到补充字段的作用,使得union内部的select语句拥有相同数量的列。暴数据表、表的列以及表的数据都是相同的道理。需要注意的是,这种攻击只是SQL注入攻击方法的一种情况。只要存在注入点,数据库就不安全。因此注入攻击需要引起高度重视。【任务4-4】Get型攻击防护在本任务,对Get型SQL注入攻击实现两种防护方式,并验证防护效果。由于Get方式是向Web服务器提交参数的重要方式且多数情况下参数比较复杂,URL编码、大小写等都可以绕过黑名单过滤,因此不推荐黑白名单的方式,尤其是黑名单的方式防护。4-4-1使用PHP转义函数mysqli_escape_string()转义函数方式应用比较简单,请自行实现,但需要注意宽字符绕过的风险。另外,这种方式仍然属于SQL语句拼接的方式,因此也不推荐使用。4-4-2MySQLi参数化查询MySQLi参数化查询和PDO参数化查询都能防护Get型攻击,下面给出MySQLi参数化查询的网页代码,并保存为index_mysqli.php。【项目总结】本项目以数据库暴库攻击为例,对Get型SQL注入进行漏洞重现、攻击测试和漏洞分析,给出了PHP转义函数和MySQLi参数化查询的防护方案并进行防护效果测试。攻击测试分析表明,对HTMLGet方式提交的内容,使用传统字符串

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论