- UID
- 24595
- 積分
- 162
- 威望
- 6523
- 桐幣
- 2
- 激情
- 0
- 金幣
- 0
- 在線時間
- 1 小時
- 注冊時間
- 2007-9-27

文都秀才

- 積分
- 162
 鮮花( 0)  雞蛋( 0)
|
|
<div class=tpc_content id=read_tpc><font face=隸書 color=#ff00ff size=5><strong>Microsoft SQLServer是一個c/s模式的強大的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),應(yīng)用領(lǐng)域十分廣泛,從網(wǎng)站后臺數(shù)據(jù)庫到一些MIS(管理信息系統(tǒng))到處都可以看到它的身影。我們都知道,在網(wǎng)絡(luò)中Microsoft SQLServer的入侵最常見的就是利用SA弱口令入侵了,而核心內(nèi)容就是利用Microsoft SQLServer中的存儲過程獲得系統(tǒng)管理員權(quán)限,那到底什么是存儲過程?為什么利用它可以獲得系統(tǒng)管理員權(quán)限?<br /><br />存儲過程是存儲在SQLServer中的預(yù)先寫好的SQL語句集合,它分為三類:系統(tǒng)提供的存儲過程,用戶定義的存儲過程和擴展存儲過程。<br />系統(tǒng)提供的存儲過程是在安裝SQLServer時創(chuàng)建的存儲過程,名字以"sp_"開頭。<br />用戶定義的存儲過程是用SQLServer的使用者編寫的存儲過程。<br />擴展存儲過程則是對動態(tài)鏈接庫(DLL)函數(shù)的調(diào)用,主要是用于客戶端與服務(wù)器端或客戶端之間進行通信的,與一般動態(tài)鏈接庫不同的是它們直接運行在SQLServer分配的內(nèi)存地址內(nèi),其中危險性最高的擴展存儲過程就是xp_cmdshell了,它可以執(zhí)行操作系統(tǒng)的任何指令。<br /><br />SA是Microsoft SQLServer的管理員帳號,擁有最高權(quán)限,它可以執(zhí)行擴展存儲過程,并獲得返回值,比如執(zhí)行:<br />exec master..xp_cmdshell ’net user test 12345 /add’和exec master..xp_cmd <br />shell ’net localgroup administrators test /add’ <br />這樣對方的系統(tǒng)就被添加了一個用戶名為test,密碼為12345,有管理員權(quán)限的用戶,現(xiàn)在你應(yīng)該明白為什么得到SA密碼,就可以得到系統(tǒng)的最高權(quán)限了吧。下面就詳細(xì)的講一下Microsoft SQLServer中利用SA弱口令的攻擊與防范。<br /><br />通常當(dāng)我們掃描到一臺有Microsoft SQLServer SA弱口令的機器,都會用一些專門的攻擊工具,比如SqlExec,如圖x.1所示,SuperSQLEXEC,如圖x.2所示,以及SQL綜合利用工具,如圖x.3所示。<br /><img onclick="if(this.width />=700) window.open('http://3800hk.com/news/UploadFiles_9994/200710/20071019185209846.gif');" src="http://3800hk.com/news/UploadFiles_9994/200710/20071019185209846.gif" onload="if(this.width>'700')this.width='700';if(this.height>'700')this.height='700';" border=0><br /><img onclick="if(this.width />=700) window.open('http://3800hk.com/news/UploadFiles_9994/200710/20071019185213415.gif');" src="http://3800hk.com/news/UploadFiles_9994/200710/20071019185213415.gif" onload="if(this.width>'700')this.width='700';if(this.height>'700')this.height='700';" border=0><br /><img onclick="if(this.width />=700) window.open('http://3800hk.com/news/UploadFiles_9994/200710/20071019185221869.gif');" src="http://3800hk.com/news/UploadFiles_9994/200710/20071019185221869.gif" onload="if(this.width>'700')this.width='700';if(this.height>'700')this.height='700';" border=0><br />這三款軟件相對來講SQL綜合利用工具的功能更強些,因為它可以利用漏洞上傳文件,這樣我們就可以上傳木馬程序,然后執(zhí)行。<br /><br />可是在實際操作中,情況并不象我們的那樣簡單,我們上傳木馬程序后,一般都會被對方的殺毒軟件殺掉。而且經(jīng)過使用SQL事件探查器(可以通過安裝Microsoft SQLServer獲得)對SQL綜合利用工具提交的SQL語句抓取發(fā)現(xiàn),要使SQL綜合利用工具上傳功能成功完成,有個前提條件就是對方 Microsoft SQLServer中的存儲過程xp_cmdshell沒有被刪除,如圖x.4所示,否則無法成功執(zhí)行,也就是說就算我們的木馬可以不被查殺,無法執(zhí)行上傳功能也是沒有用的。<br /><img onclick="if(this.width />=700) window.open('http://3800hk.com/news/UploadFiles_9994/200710/20071019185237591.gif');" src="http://3800hk.com/news/UploadFiles_9994/200710/20071019185237591.gif" onload="if(this.width>'700')this.width='700';if(this.height>'700')this.height='700';" border=0><br />刪除xp_cmdshell的語句為:exec sp_dropextendedproc ’xp_cmdshell’,同樣我們也可以使用Microsoft SQLServer中的查詢分析器連接到對方的Microsoft SQLServer,來恢復(fù)xp_cmdshell,語句為:exec sp_addextendedproc ’xp_cmdshell’, ’Xplog70.dll’,如圖x.5所示;謴(fù)后,我們就可以使用SQL綜合利用工具的上傳功能了,并可以執(zhí)行上傳的文件。<br /><img onclick="if(this.width />=700) window.open('http://3800hk.com/news/UploadFiles_9994/200710/20071019185257395.gif');" src="http://3800hk.com/news/UploadFiles_9994/200710/20071019185257395.gif" onload="if(this.width>'700')this.width='700';if(this.height>'700')this.height='700';" border=0><br />但如果對方把Microsoft SQLServer中的xplog70.dll文件刪除或放到其他地方了, xp_cmdshell就無法執(zhí)行我們發(fā)出的命令了。<br /><br />難道就沒有其他辦法了?當(dāng)然不是,在Microsoft SQLServer中有一系列與OLE相關(guān)的存儲過程,這一系列的存儲過程同Xp_cmdshell以及讀取注冊表系列的存儲過程一樣危險,但是其使用方法不象那些存儲過程在網(wǎng)絡(luò)上和書上介紹的那樣多,所以被刪除的可能性就小一些。這系列的存儲過程有sp_OACreate,sp_OADestroy, sp_OAGetErrorInfo,sp_OAGetProperty,sp_OAMethod,sp_OASetProperty, sp_OAStop。<br /><br />使用查詢分析器連接到對方的Microsoft SQLServer,在查詢分析器中執(zhí)行:<br />DECLARE @shell INT EXEC SP_OACREATE ’wscript.shell’,@shell OUTPUT EXEC <br />SP_OAMETHOD @shell,’run’,null, ’c:\WINNT\system32\cmd.exe /c net user test <br />12345 /add’-- <br />再執(zhí)行:DECLARE @shell INT EXEC SP_OACREATE ’wscript.shell’,@shell OUTPUT <br />EXEC SP_OAMETHOD @shell,’run’,null, ’c:\WINNT\system32\cmd.exe /c net <br /> localgroup administrators test /add ’--<br />就可以在對方的系統(tǒng)添加一個用戶名為test,密碼為12345,有管理員權(quán)限的用戶。<br /><br />如果對方把Xp_cmdshell、SP_OACREATE等可執(zhí)行系統(tǒng)命令的存儲過程,以及與它們相對應(yīng)的動態(tài)連接庫文件刪除了,我們還有一個辦法,就是使用可以讀取和修改注冊表的存儲過程來克隆對方系統(tǒng)的管理員用戶。在查詢分析器里運行下面的語句:<br /><br />xp_regread ’HKEY_LOCAL_MACHINE’,’SAM\SAM\Domains\Account\Users\000001F4’,’F’, <br /> 可以得到對方系統(tǒng)administrator的加密密碼,然后復(fù)制,如圖x.6所示。<br /><img onclick="if(this.width />=700) window.open('http://3800hk.com/news/UploadFiles_9994/200710/20071019185301179.gif');" src="http://3800hk.com/news/UploadFiles_9994/200710/20071019185301179.gif" onload="if(this.width>'700')this.width='700';if(this.height>'700')this.height='700';" border=0><br />然后再執(zhí)行:<br />xp_regwrite ’HKEY_LOCAL_MACHINE’,’SAM\SAM\Domains\Account\Users\000001F5 <br />’,’F’,’reg_binary’,0x(上面復(fù)制的那串字符), <br />如果對方有遠程終端服務(wù),那我們就可以用Guest用戶登陸,密碼為空,而且Guest的桌面與administrator的完全一樣。<br /><br />有很多種方法得到Microsoft SQLServer SA的密碼,比如通過Sniffer到SA的加密密碼,然后通過密碼對照表(網(wǎng)上可以找到),得到SA的明文密碼,再比如通過SQL注入得到SA密碼或者使用sp_password(修改數(shù)據(jù)庫用戶密碼的存儲過程)修改得到SA密碼,還有可以掛密碼字典進行暴力破解。一旦被SA密碼被入侵者得到,會對服務(wù)器的安全帶來很大隱患,所以我們整理了一個解決方案提供給大家:<br /><br />1.在確定不需要的情況下,刪除xp_cmdshell,xp_dirtree,xp_regread,xp_regdeletekey, xp_regdeletevalue,xp_regwrite,sp_oacreate,sp_oadestroy, sp_oagetErrorInfo,sp_oagetProperty,sp_oamethod,sp_oasetProperty, sp_oastop這些存儲過程,移走相關(guān)的動態(tài)連接庫文件,在需要的時候復(fù)制到原來的位置就可以了。<br />2.應(yīng)用程序和網(wǎng)站在與后臺的Microsoft SQLServer數(shù)據(jù)庫連接時不要用SA等高權(quán)限的用戶連接。<br />3.給SA等高權(quán)限的用戶起一個健壯的密碼。</strong></font></div> |
|