第3章毕业论文设计.doc
YANGTZE UNIVERSITY工程技术学院毕业设计(论文) 系 (部): 专业班级: 学 号: 姓 名: 指导教师: 学年 年 月至 年 月目录1 前言12 数据库安全基础知识121 数据库服务器的安全122 保证数据库安全的几个简单步骤63 数据库安全实际应用831 全力打造安全主机保护企业网站安全83.1.1 安全模型83.1.2 驱动模式93.1.3 SQL Server 2000 漏洞综述93.1.4 加固步骤1032 如何防范网站数据库入侵124 SQLServer数据库安全技术1441 SQLServer数据库简介1442 SQL Server数据库安全规划全攻略214.2.1 验证方法选择214.2.2 Web环境中的验证224.2.3 设置全局组234.2.4 允许数据库访问254.2.5 分配权限264.2.6 简化安全管理2743 恢复SQL数据库详细攻略实例27参考文献321 前言随着计算机技术的飞速发展,数据库的应用十分广泛,深入到各个领域,但随之而来产生了数据的安全问题。各种应用系统的数据库中大量数据的安全问题、敏感数据的防窃取和防篡改问题,越来越引起人们的高度重视。数据库系统作为信息的聚集体,是计算机信息系统的核心部件,其安全性至关重要,关系到企业兴衰、成败。因此,如何有效地保证数据库系统的安全,实现数据的保密性、完整性和有效性,已经成为业界人士探索研究的重要课题之一,本文就安全防入侵技术做简要的讨论。2 数据库安全基础知识21 数据库服务器的安全数据库服务器实际上是每一个电子交易、金融和企业资源规划(ERP)系统的基础,它还经常包括来自商业伙伴和客户的敏感信息。尽管这些系统的数据完整性和安全性是相当重要的,但对数据库采取的安全检查措施的级别还比不上操作系统和网络的安全检查措施的级别。许多因素都可能破坏数据的完整性并导致非法访问,这些因素包括复杂程度、密码安全性较差、误配置、未被察觉的系统后门以及自适应数据库安全方法的强制性常规使用等。数据库安全问题为什么非常重要?保护系统敏感信息和数字资产不受非法访问。任何公司的主要电子数字资产都存贮在现代的关系数据产品中。商业机构和政府组织都是利用这些数据库服务器得到人事信息,如员工的工资表,医疗记录等。因此他们有责任保护别人的隐私,并为他们保密。数据库服务器还存有以前的和将来的敏感的金融数据,包括贸易记录、商业合同及账目数据等。像技术的所有权、工程数据,甚至市场企划等决策性的机密信息,必须对竞争者保密,并阻止非法访问,数据库服务器还包括详细的顾客信息,如财务账目,信用卡号及商业伙伴的信用信息等。数据库是个极为复杂的系统,因此很难进行正确的配置和安全维护数据库服务器的应用相当复杂,掌握起来非常困难当然竞争者使用的操作系统也是一样的复杂。诸如Oracle、Sybase、Microsoft SQL服务器都具有以下特征:用户账号及密码、校验系统、优先级模型和控制数据库目标的特别许可、内置式命令(存储的步骤或包)、唯一的脚本和编程语言(通常为SQL的特殊衍生语)、middleware、网络协议、补丁和服务包都忙于管理复杂的系统,所以很可能没有检查出严重的安全隐患和不当的配置,甚至根本没有进行检测。所以,正是由于传统的安全体系在很大程度上忽略了数据库安全这一主题,使数据库专业人员也通常没有把安全问题当作他们的首要任务。“自适应网络安全”的理念将安全问题看作持续不断的“工作进程”,而不是一次性的检查并未被大多数数据库管理者所接受。保障数据库服务器上的网络和操作系统数据安全是至关重要的,但这些措施对于保护数据库服务器的安全还很不够。 在许多资深安全专家中普遍存在着一个错误概念,他们认为:一旦访问并锁定了关键的网络服务和操作系统的漏洞,服务器上的所有应用程序就得到了安全保障。现代数据库系统具有多种特征和性能配置方式,在使用时可能会误用,或危及数据的保密性、有效性和完整性。首先,所有现代关系型数据库系统都是“可从端口寻址的”,这意味着任何人只要有合适的查询工具,就都可与数据库直接相连,并能躲开操作系统的安全机制。例如:可以用TCP/IP协议从1521和1526端口访问Oracle 7.3和8数据库。多数数据库系统还有众所周知的默认帐号和密码,可支持对数据库资源的各级访问。从这两个简单的数据相结合,很多重要的数据库系统很可能受到威胁。不幸的是,高水平的入侵者还没有停止对数据库的攻击。拙劣的数据库安全保障设施不仅会危及数据库的安全,还会影响到服务器的操作系统和其它信用系统。还有一个原因说明了保证数据库安全的重要性数据库系统自身可能会提供危及整个网络体系的机制。例如,某个公司可能会用数据库服务器保存所有的技术手册、文档和白皮书的库存清单。数据库里的这些信息并不是特别重要的,所以它的安全优先级别不高。即使运行在安全状况良好的操作系统中,入侵者也可通过“扩展入驻程序”等强有力的内置数据库特征,利用对数据库的访问,获取对本地操作系统的访问权限。这些程序可以发出管理员级的命令,访问基本的操作系统及其全部的资源。如果这个特定的数据库系统与其它服务器有信用关系,那么入侵者就会危及整个网络域的安全。数据库是新型电子交易、企业资源规划(ERP)和其它重要商业系统的基础。在电子商务、电子贸易的着眼点集中于WEB服务器、Java和其它新技术的同时,应该记住这些以用户为导向和企业对企业的系统都是以Web服务器后的关系数据库为基础的。它们的安全直接关系到系统的有效性、数据和交易的完整性、保密性。系统拖延效率欠佳,不仅影响商业活动,还会影响公司的信誉。不可避免地,这些系统受到入侵的可能性更大,但是并未对商业伙伴和客户敏感信息的保密性加以更有效的防范。此外,ERP和管理系统,如ASPR/3和PeopleSoft等,都是建立在相同标准的数据库系统中。无人管理的安全漏洞与时间拖延、系统完整性问题和客户信任等有直接的关系。需要寻找哪此类型的安全漏洞呢?传统的数据库安全系统只侧重于以下几项:用户账户、作用和对特定数据库目标的操作许可。例如,对表单和存储步骤的访问。必须对数据库系统作范围更广的彻底安全分析,找出所有可能领域内的潜在漏洞,包括以下提到的各项内容:与销售商提供的软件相关的风险:软件的BUG、缺少操作系统补丁、脆弱的服务和选择不安全的默认配置。与管理有关的风险:可用的但并未正确使用的安全选项、危险的默认设置、给用户更多的不适当的权限,对系统配置的未经授权的改动。与用户活动有关的风险:密码长度不够、对重要数据的非法访问以及窃取数据库内容等恶意行动。以上各类危险都可能发生在网络设备、操作系统或数据库自身当中。对数据库服务器进行安全保护时,都应将这些因素考虑在内。数据库安全漏洞区域及示例 在重要数据库服务器中,还存在着多种数据库服务器的漏洞和错误配置。下面列出了几个实例。安全特征不够成熟:绝大多数常用的关系数据库系统已经存在了十多年之久,并且具有强大的特性,产品非常成熟。但不幸的是,IT及安全专业人士认为理所当然应该具有的许多特征,在操作系统和现在普遍使用的数据库系统中,并没有提供。非内建式数据库标准安全性能MS SQL Server Sybase Oracle 7 Oracle 8账户锁定设备nononoyes重命名管理账户nononono要求严密的口令nononoyes陈旧的账户nononono密码失效noyesnoyes登录时间限制nononoyes例如,上表列出了大多数IT专业人士期望或要求操作系统所应具备的特性,但在数据库服务器的标准安全设施中并未出现。由于这些数据库都可进行端口寻址的,操作系统的核心安全机制并未应用到与网络直接联接的数据库中。一些产品,例如Microsoft SQL Server, 都可利用功能更加强大的Windows NT安全机制去发现上面提到的安全漏洞。但是,考虑到兼容性问题(运行环境并不全是Windows NT),所以大多数依然执行MS SQL Server的安全标准。而实施则是另外一回事了。如果公司实用的是Oracle 8,管理员如何能知道是否真地实施了安全特性?是否一直在全公司中得到实施?这几项特性相结合,使得与之相关的问题更加严峻。由于系统管理员的帐号是不能重命名的(SQL和Sybase是“sa”,对于Oracle是“System”和“sys”),如果没有密码封锁可用或已配置完毕,入侵者就可以对数据库服务器发动强大字典式登录进攻,最终能破解密码,有什么能够挡住他们对服务器耐心,持久的高水平攻击呢?数据库密码的管理:在多数数据库系统提供的安全标准中,没有任何机制能够保证某个用户正在选择有力的或任意的密码。这一基本的安全问题需要细心的监督。此外还需要对全部密码列表进行管理和安全检查。例如,Oracle数据库系统具有十个以上地特定地默认用户账号和密码,此外还有用于管理重要数据库操作的唯一密码,如对Oracle数据库开机程序的管理、访问网络的听众过程以及远程访问数据库的权限等。如果安全出现了问题,这些系统的许多密码都可让入侵者对数据库进行完全访问,这些密码甚至还被存储在操作系统的普通文本文件里。下面有几个示例:Oracle Internal 密码:Oracle内部密码存放在文件名为“strXXX.cmd”的文本文件中,XXX是Oracle系统的ID或SID,默认值为“ORCL”。用在Oracle数据库的启动过程中,要用到Oracle Internet密码,具有随意访问数据库资源的权力。这个文件应妥善保管,以用于基于Windows NT的ORACLE程序。Oracle监听程序过程密码用于起动并停止Oracle监听程序过程的密码,该过程可将所有的新业务路由到系统上合适的Oracle例子中,需选择一个保密性强的密码替换系统的默认值,使用许可必须在“listener.ora”文件中得到保护,该文件存贮了Oracle所有的使用密码。对密码的不正当访问可能会使入侵者对基于Oracle的电子交易站点进行拒绝服务攻击。Oracle内部密码 “orapw”文件许可控制Oracle内部密码和由SYSDBA授权的账号密码存贮在“Orapw”文本文件中。尽管文件已被加密,但在ORACLE的UNIX和Windows NT的程序中,还是要限制该文件的使用权限。如果该文件被访问,那么遭解密的文件很容易遭到强有力的攻击。这些例子说明了管理员、系统密码和账号是何等的重要,它们都可能会遭到意想不到的攻击方法的攻击。注意密码管理问题决不仅限于Oracle数据库,几乎所有主要数据库提供商的产品都有这种问题。操作系统的后门许多数据库系统的特征参数尽管方便了DBA,但也为数据库服务器主机操作系统留下了后门。 如上所述,对Sybase或SQL服务器的“sa”密码造成危害的入侵者有可能利用“扩展入驻程序”,得到基本操作系统的使用权限。以“sa”的身份登录,入侵者使用扩展入驻程序xpcmdshell,该程序允许Sybase或SQL服务器的用户运行系统指令,就像该用户在服务器控制台上运行指令一样。例如,可实用下列SQL指令添加一个Windows NT账号,账号名为“hacker1”,密码为“nopassoword”,并把“hacker1”添加到“Administrators”组:xp-cmdshell net user hacker1 nopassword/ADDgoxp-comdshell net localgroup/ADD Administrators hacker1go现在这个非法入侵者就成了Windows NT的管理员了(我们只能祈祷这个SQL服务器不是域控制器)。这个简单的攻击之所以成功,是因为命令被提交给实用Windows NT账号的操作系统,而MSSQLServer的服务就运行在这个账号下。在默认情况下,这个账号就是“LocalSystem” 账号-本地Windows NT系统中最有效力的账号。另一个途径是黑客可能使用SQL服务器,利用入驻程序xp-regread从注册表中读出加密的Windows NT SAM密码,对操作系统的安全造成威胁。由于有几种免费的Windows NT密码攻击器软件,因此保管好加密的Windows NT密码的安全变得格外重要。以下例子说明了入侵者是怎样得到信息的:xp-regreadHKEYLOCALMACHINE,SECURITYSAMDomainsAccount,F注意,从注册表中读出加密密码是一件本地Windows NT管理员帐号都无法做到的事。SQL服务器之所以能够做到,是因为默认方式运行的SQL服务使用的恰恰就是“LocalSystem” 账号。Oracle数据库系统还具有很多有用的特征,可用于对操作系统自带文件系统的直接访问。例如在合法访问时,UTLFILE软件包允许用户向主机操作系统进行读写文件的操作。UTLFILEDIR简单变量很容易配置错误,或被故意设置为允许Oracle用户用UTLFILE软件包在文件系统的任何地方进行写入操作,这样也对主机操作系统构成了潜在的威胁。校验关系数据库系统的校验系统可以记录下信息和事件,从基本情况到任一细节,无一遗漏。但是校验系统只在合理使用和配置的前提下,才能提供有用的安全防范和警告信息。当入侵者正在试图侵入特定的数据库服务器时,这些特征可及早给出警告信息,为检测和弥补损失提供了宝贵的线索。特洛伊木马程序尽管人们知道操作系统中的特洛伊木马程序已经有好几年了,但是数据库管理员还需注意到木马程序带给系统入驻程序的威胁。一个著名的特洛伊木马程序修改了入驻程序的密码,并且当更新密码时,入侵者能得到新的密码。例如,某个个人可以在sppassword系统入驻程序中添加几行命令,就可在表单中增加新的密码,用e-mail传递密码或将密码写入外部文件以备日后使用。这一办法可连续获取密码,直到入侵者得到的“sa”密码被更换使得更深层的入侵未被察觉。一个入侵者或心怀不满的雇员只需进入系统一次,放置好特洛伊木马后就可得到以后的一系列密码。总结,安全专业人士、校验员、DBA和电子商务的规划人员在部署重要商业系统时,都需注意到数据库的安全问题。要想了解的系统的安全状态和发展方向,您就得部署系统,以对数据库服务器做出最彻底的评估,并进行常规的安全评估。所有系统都应该采用信息风险管理原则,以进行监督、检测,对安全漏洞做出响应。22 保证数据库安全的几个简单步骤数据库及其包含的信息仍是黑客试图攻击的目标。黑客希望利用在数据库驱动的应用程序中的许多广泛传播的安全漏洞。这些漏洞许多是由不良设置或者实施造成的。下面是最常见的五个与数据库相关的安全漏洞:·不良的口令政策·SQL注入·交叉站点脚本·数据泄漏·不适当的错误处理令人难以置信的是,企业仍经常使用默认的或者软弱的口令来保护像数据库一样重要的在线资产。但是,这是一个很容易解决的问题。补救措施是强制执行强大的口令政策。也就是说,口令要定期变换,口令长度最少为10位数并且包含字母和符号。采用这种政策,你将关闭攻击者同向你的数据的方便之门。SQL注入也依靠软弱的数据库实施,特别是在如何向数据库发送SQL请求方面的实施。如果这个数据库接受了用户提供的不干净的或者没有经过验证的数据产生的SQL请求,这就会为SQL注入攻击敞开大门。例如,通过修改从基于网络的格式受到的信息,攻击者能够提供恶意的SQL请求并且把指令直接发送到数据库。要防止这种类型的攻击,在让这些数据接近你的脚本、数据访问程序和SQL查询之前,保证所有用户提供的数据是合法的是非常重要的。验证和清洁从用户那里收到的数据的另一个理由是防止交叉站点脚本攻击。这种攻击能够用来攻破连接到一个Web服务器的数据库。黑客通过一个网络蠕虫把JavaScript等客户方面的脚本注入到一个网络应用程序的输出中。这些脚本用于收集cookie数据。这些数据经常被错误地用来存储用户账户登录信息等资料。一个经常被忽略的问题是什么时候建立一个数据库应用程序是泄漏数据。这是敏感的数据要发送的地方或者是非故意踢敏感数据的地方。这个错误将导致不能保证访问数据库备份磁带的安全和控制这种访问。通常,更敏感的数据产生于有关数据的合法查询的答案,就像从医疗处方判断疾病一样。常用的解决方案是监视查询方式以检测这种行动。与数据泄漏密切相关的是在数据库出现错误时不适当地处理这些错误。许多应用程序显示了详细的信息。这些错误信息能够泄漏有关数据库结构的信息。这些信息能够用来实施攻击。要尽一切手段把这个错误登记在你自己的记录中,保证你的应用程序不向用户或者攻击者返回任何有关这个错误的详细信息。要完全保证你的数据库的安全,你要把这个任务分为以下四个方面以确保进行全面的检查:·服务器安全·应用程序安全·数据库连接·数据库和表格访问控制数据库服务器需要与其它任何服务器一样加强以保证任何恶意黑客都不能通过操作系统的安全漏洞攻击数据库。更适宜的方法是数据库应该位于其自己的应用层防火墙之后。要帮助保证数据库连接的安全的过程和定义访问控制,你应该创建一个数据流动图表,跟踪数据如何流过应用程序的过程。接下来,找到数据进入或者退出另一个应用程序的地方,并且检查为这些进入点和退出点分配的信赖等级。还要定义需要访问这个系统的外部用户或者处理要求的最低权限。把安全作为关键的推动因素来设置和建立你的数据库将保证你的数据库处于安全状态。3 数据库安全实际应用31 全力打造安全主机保护企业网站安全3.1.1 安全模型在多数的企业部署SQL Server时考虑最多的往往是数据库资源的扩展性和适用性,一直忽略了SQL Server部署中重要的因素安全性。如果说篡改主页是黑客的一种发泄,获取企业的重要数据才是“商业黑客”的最终目的,而这也是最可怕的一件事情。本节的内容将对SQL Server 2000 加固和防止主机入侵做一些技术上的交流。数据库安全概念,关于数据库安全模型的讨论的一直就没有停止过,其中把SQL Server安装到本机还是采用防火墙隔离模式(如图1)的话题是最为激烈的。尽管后者是比较麻烦的一种方法,但还是网络安全人士钟爱的安全模型。 图1 数据库安全设置作为一个全面的服务器管理平台,将负责管理服务器和应用基础设施的整个生命周期。而安全管理方面包括以下一些内容:管理操作系统、应用、补丁和配置中不断出现的变化;保证服务器、安全和应用配置策略的连续性。一个安全的数据中心必须在安全管理平台上自动实现软件升级、补丁和深层漏洞扫描及修复。数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性是紧密联系、相互支持的。3.1.2 驱动模式网络驱动库(Network Libraries)是SQL Server服务器为客户端提供数据交换的基础,在这个基础上多个网络驱动库(库)同时响应不同的客户请求,默认情况下SQL Server将使用TCP 1433端口和UDP 1434端口来监听。换句话说如果你通过端口扫描软件扫描的哪台主机开放着1433端口,这台服务器必定运行着SQL Server。3.1.3 SQL Server 2000 漏洞综述a sa账户密码破解有些管理员和程序员为了省事,SQL Server管理员sa 用的是空口令或弱口令,这样危险性十分巨大,而这些危险往往是初学者意识不到的,殊不知SQL Server的默认用户sa的权限等于Administrator的权限,也就是说没有sa用户做不了的任何事。举一个例子:首先利用字典暴力破解了sa的密码为12345678,然后利用一些工具就可以直接对服务器进行操作。除了密码过于简单,造成这种漏洞还有一个原因就是因为xp_cmdshell 扩展存储过程可以运行任何操作系统命令,在防止脚本注入的环节中我们将介绍如何修补这一漏洞。b SQL Server缓冲区溢出 2003年3月3号,一个重要的日子,早上上网非常慢,一天的努力(没吃饭)才找出了根源,W32/SQL Slammer蠕虫病毒。其实微软早在2002年7月就为这个漏洞发布了MS02-039号安全公告,那时的我意识到安全升级的重要性。当我们向一台SQL Server发送一个特定的数据包,服务器会出现缓冲区溢出,导致死机。而SQL Slammer蠕虫病毒正是利用这一漏洞使这些服务器最终成为傀儡,它们向网络发送无效UDP数据包,导致整个网络瘫痪。有一种传闻,微软就因为这个病毒推迟了SQL Server 2003的发布,直到今天才公布初露端倪的SQL Server 2005。c 其它由于篇幅的限制我们不可能把所有的漏洞都一一说明,除了上述两个较为常见的漏洞外还包括:代码注入、跨库提升权限、SQL语句查询滥用、存储过程输入恶意代码等。这些漏洞都可能为黑客留下入侵的机会,一旦将某个普通用户提升为管理员,那么我们之前所作的努力都将付之东流。建议:请程序员们不要再把sa的口令写在globalasa文件里面了,将sa口令以明文的方式放到Web网站的根目录下真的是一种不太好的办法。3.1.4 加固步骤a sa口令符合复杂性要求没有必要重复说“复杂性”了,但是,如果你在初始安全的时候没有设置sa的口令或者过于简单,就可以执行“SQL Server 企业管理器SQL Server组安全性sa 账户属性”进行更改。b 及时进行安全升级SQL Server不作为Automatic Updates升级一部分,并且SQL Server、MSDE、Analysis Services 都需要单独更新,这确实是一件比较麻烦的事。SQL Serve 2000 补丁全集:MDAC 升级:手工检查SQL Server安全更新简直是一件痛苦的。还记得我们曾经提到“Microsoft 基准安全分析器”吗?利用它来扫描系统,从每个失败的检查旁边“Result details”(结果详细信息)的链接可查看缺少的安全更新的列表。单击后出现的对话框显示 Microsoft 安全公告参考号,单击该参考可了解公告的详细信息及下载地址。c 根据需求禁用不必要 SQL Server 服务d TCP/IP 是惟一启用的协议在 Microsoft SQL Server 程序组中,启动“Server 网络实用工具”。在“常规”选项卡中确保 TCP/IP 是惟一启用的 SQL Server 协议,同时禁用所有其它协议(如图2)。图2 保留TCP/IP为惟一指令e NTFS权限的运用限制Everyone组对“Program FilesMicrosoft SQL ServerMSSQL”目录的写入权限。f 激活SQL Server的身份验证审核日志执行“企业管理器SQL Server 组SQL Server右键选属性安全性”选项卡进行配置,将审核级别设置为“全部”或“失败”。这些设置的应用对象是SQL Server 实例中所有的数据库(如图3)。图3 激活身份验证g 最小权限原则针对于不同的数据库管理账户设计不同访问权限,比如我们建立了一个ylc的用户可以访问ylc数据库,那么微软推荐将“服务器角色”选项为空,在“数据库访问”选项中只选“ycl”库,数据库角色中允只选默认的“public”。32 如何防范网站数据库入侵搜狐、163、雅虎等都是众网民经常光顾的大型门户网站,这些网站提供的搜索引擎服务最受大家的青睐。可是恰恰是这些搜索引擎为黑客大开方便之门,许多黑客可以利用搜索引擎很容易地得到一个网站的数据库,从而得到网站的管理账号和密码,并可以控制到整个网站的管理权。这样一来,一些保存在数据库里只有管理员才能看到的机密文件就被泄露出来。 其实通过搜索引擎入侵网站过程十分简单,了解了入侵的方法,也就可以知道如何解决问题。那么防范的具体方法到底是怎么样的呢? 首先从入侵者角度着手,分析一段代码: connstr=“DBQ=“+server.mappath(“data/data.mdb”)+”;DefaultDir=;DRIVER=Microsoft Access Driver (*.mdb);” set conn=server.createobject(“ADODB.CONNECTION”) conn.open connstr % 以上是一段ASP的调用数据库的代码,其中“+server.mappath(“data/data.mdb”)+”起到设定数据库位置的作用。从中不难看出这个网站的数据库在dada目录中的data.mdb文件中。 很多大型网站的搜索引擎中,有一个强大的功能,就是可以搜索未在本搜索引擎注册过的网页。利用这个功能,让我们来搜索“server.mappath”这个字段。结果得到的结果是: 无标题文档 =“+server.mappath(“./up/mucal/calp.mdb”)+”;DefaultDir=;DRIVER=Microsoft Access Driver (*.mdb);” set conn= -(网址:略) 这样,用户就会得到很多带有数据库位置信息的搜索结果。但结果中会存在一些水分,而且范围太大。如果用户只想得到某一个网站的代码该怎么办呢?其实这个也很简单,搜索引擎通常带有多关键词查询功能,只要在所要搜索的两个关键词中间输入一个“+”就可以了。比如用户要查找有关于计算机世界网站中关于网络安全的所有网页,只要用户在搜索引擎中键入“计算机世界+网络安全”即可。同样,用户可以用这个方法来解决上面的那个问题。如果用户要得到某一个程序的数据库,比如这个程序的名字是小牛江湖,那么用户在搜索引擎中搜索“小牛江湖+ server.mappath”就可以得到下面的结果: 小牛江湖 =“+server.mappath(“./xajh/data/mycalf.mdb”)+;DefaultDir=;DRIVER=Microsoft Access Driver (*.mdb);” set conn= -(网址: 此时,这个程序的数据库位置便一目了然:/xajh/data/mycalf.mdb。接下来用户把这个数据库下载下来,用相应的数据库软件打开,就可以得到其中的内容。利用这个漏洞还可以得到mssql server的口令,甚至可以进一步的去管理对方的整个服务器。 天下有矛就该有盾。这个被别人利用搜索引擎得到网站数据库的问题可以用许多方法化解,最有效的方法之一就是隐藏这段语句,利用调用其他文件的方法来实现调用数据库。 首先需要建立一个内容为 connstr=“DBQ=“+server.mappath(“data/data.mdb”)+”;DefaultDir=;DRIVER=Microsoft Access Driver (*.mdb);” set conn=server.createobject(“ADODB.CONNECTION”) conn.open connstr %>的ASP文件。比如把这个文件命名为dbconn.asp。这样只要在需要调用数据库的ASP文件中加入!-#include file=“dbconn.asp”->就可以实现数据库的调用。如此,便实现了调用语段的隐藏,解决了被他人利用搜索引擎得到网站数据库的问题。 4 SQLServer数据库安全技术41 SQLServer数据库简介Microsoft SQLServer是一个c/s模式的强大的关系型数据库管理系统,应用领域十分广泛,从网站后台数据库到一些MIS(管理信息系统)到处都可以看到它的身影。我们都知道,在网络中Microsoft SQLServer的入侵最常见的就是利用SA弱口令入侵了,而核心内容就是利用Microsoft SQLServer中的存储过程获得系统管理员权限,那到底什么是存储过程?为什么利用它可以获得系统管理员权限?存储过程是存储在SQLServer中的预先写好的SQL语句集合,它分为三类:系统提供的存储过程,用户定义的存储过程和扩展存储过程。系统提供的存储过程是在安装SQLServer时创建的存储过程,名字以"sp_"开头。用户定义的存储过程是用SQLServer的使用者编写的存储过程。扩展存储过程则是对动态链接库(DLL)函数的调用,主要是用于客户端与服务器端或客户端之间进行通信的,与一般动态链接库不同的是它们直接运行在SQLServer分配的内存地址内,其中危险性最高的扩展存储过程就是xp_cmdshell了,它可以执行操作系统的任何指令。SA是Microsoft SQLServer的管理员账号,拥有最高权限,它可以执行扩展存储过程,并获得返回值,比如执行:exec master.xp_cmdshell 'net user test 12345 /add'和exec master.xp_cmdshell 'net localgroup administrators test /add'这样对方的系统就被添加了一个用户名为test,密码为12345,有管理员权限的用户,现在你应该明白为什么得到SA密码,就可以得到系统的最高权限了吧。下面就详细的讲一下Microsoft SQLServer中利用SA弱口令的攻击与防范。通常当我们扫描到一台有Microsoft SQLServer SA弱口令的机器,都会用一些专门的攻击工具,比如SqlExec,如图x.1所示,SuperSQLEXEC,如图x.2所示,以及SQL综合利用工具,如图x.3所示。图x.1 SqlExec运行界面图x.2 SuperSQLEXEC运行界面 图x.3 SQL综合利用工具这三款软件相对来讲SQL综合利用工具的功能更强些,因为它可以利用漏洞上传文件,这样我们就可以上传木马程序,然后执行。可是在实际操作中,情况并不像我们的那样简单,我们上传木马程序后,一般都会被对方的杀毒软件杀掉。而且经过使用SQL事件探查器(可以通过安装Microsoft SQLServer获得)对SQL综合利用工具提交的SQL语句抓取发现,要使SQL综合利用工具上传功能成功完成,有个前提条件就是对方Microsoft SQLServer中的存储过程xp_cmdshell没有被删除,如图x.4所示,否则无法成功执行,也就是说就算我们的木马可以不被查杀,无法执行上传功能也是没有用的。图x.4 SQL事件探查器抓取的SQL综合利用工具提交的SQL语句删除xp_cmdshell的语句为:exec sp_dropextendedproc 'xp_cmdshell',同样我们也可以使用Microsoft SQLServer中的查询分析器连接到对方的Microsoft SQLServer,来恢复xp_cmdshell,语句为:exec sp_addextendedproc 'xp_cmdshell', 'Xplog70.dll',如图x.5所示。恢复后,我们就可以使用SQL综合利用工具的上传功能了,并可以执行上传的文件。图x.5 查询分析器的界面但如果对方把Microsoft SQLServer中的xplog70.dll文件删除或放到其他地方了, xp_cmdshell就无法执行我们发出的命令了。难道就没有其他办法了?当然不是,在Microsoft SQLServer中有一系列与OLE相关的存储过程,这一系列的存储过程同Xp_cmdshell以及读取注册表系列的存储过程一样危险,但是其使用方法不象那些存储过程在网络上和书上介绍的那样多,所以被删除的可能性就小一些。这系列的存储过程有sp_OACreate,sp_OADestroy,sp_OAGetErrorInfo,sp_OAGetProperty,sp_OAMethod,sp_OASetProperty,sp_OAStop。使用查询分析器连接到对方的Microsoft SQLServer,在查询分析器中执行:DECLARE shell INT EXEC SP_OACREATE 'wscript.shell',shell OUTPUT EXEC SP_OAMETHOD shell,'run',null, 'c:WINNTsystem32cmd.exe /c net user test 12345 /add'-再执行:DECLARE shell INT EXEC SP_OACREATE 'wscript.shell',shell OUTPUT EXEC SP_OAMETHOD shell,'run',null, 'c:WINNTsystem32cmd.exe /c net localgroup administrators test /add '-就可以在对方的系统添加一个用户名为test,密码为12345,有管理员权限的用户。如果对方把Xp_cmdshell、SP_OACREATE等可执行系统命令的存储过程,以及与它们相对应的动态连接库文件删除了,我们还有一个办法,就是使用可以读取和修改注册表的存储过程来克隆对方系统的管理员用户。在查询分析器里运行下面的语句:xp_regread 'HKEY_LOCAL_MACHINE','SAMSAMDomainsAccountUsers000001F4','F',可以得到对方系统administrator的加密密码,然后复制,如图x.6所示。图x.6 使用xp_regread得到加密密码然后再执行:xp_regwrite 'HKEY_LOCAL_MACHINE','SAMSAMDomainsAccountUsers000001F5','F','reg_binary',0x(上面复制的那串字符),如果对方有远程终端服务,那我们就可以用Guest用户登陆,密码为空,而且Guest的桌面与administrator的完全一样。有很多种方法得