明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

ACCESS高級注入圖文詳細(xì)教程

[摘要]現(xiàn)在我們在腳本注入攻擊的技術(shù)中,常用的手法分好多種,最普通的是利用子查詢或者是Union聯(lián)合查詢來取得一些特殊表中的內(nèi)容,比如Admin,Log表等等,這是一種純粹的對數(shù)據(jù)庫的攻擊方式,而MSSQL...

現(xiàn)在我們在腳本注入攻擊的技術(shù)中,常用的手法分好多種,最普通的是利用子查詢或者是Union聯(lián)合查詢來取得一些特殊表中的內(nèi)容,比如Admin,Log表等等,這是一種純粹的對數(shù)據(jù)庫的攻擊方式,而MSSQL Server的方法則更為多樣和復(fù)雜,
當(dāng)我們?nèi)〉眠B接權(quán)限較高的注入點(diǎn)的時候,我們可以利用MSSQL Server本身所帶的擴(kuò)展來執(zhí)行命令,或者是獲取目錄,讀取文件與修改注冊表;在低權(quán)用戶的連接中,我們則可以試用差異備份,
或者干脆就是跑數(shù)據(jù)庫等方式來實(shí)現(xiàn)對系統(tǒng)的直接攻擊或者是間接的攻擊.再則則是類似于OracleMySQLDB2這些非MS直接支持的數(shù)據(jù)庫關(guān)于他們,我們也有多種多樣的攻擊手法,執(zhí)行命令,導(dǎo)出文件或讀取文件等.
以上是一些我們針對常用數(shù)據(jù)庫的攻擊方式的大體總結(jié),不難看出,其中最雞肋的,要算是Access的數(shù)據(jù)庫了.一來在Access中,無法直接獲取數(shù)據(jù)庫中的表名和字段名稱,二來在Access中,我們能做的東西非常少,
再說也不支持多語句的SQL語法,和T-SQL的標(biāo)準(zhǔn)又有不少的區(qū)別,讓人覺得Access數(shù)據(jù)庫中僅有的Insert,Update,Select,Delte,Produce僅僅是對SQL語句的封裝而已.所以,我們依舊需要對Access進(jìn)行研究.
在這篇研究筆記中,我所參考的文章和資料,有部分來自nsfocus和xFocus早在2000-2002年的文檔,另一篇則是SuperHei所發(fā)表的<關(guān)于Access的一些測試>,
大家可以在http://www.4ngel.net/安全天使安全小組的網(wǎng)站上查詢到.OK,廢話不要太多,我們繼續(xù)研究.
我們可以去翻看微軟在剛推出Windows 2000的時候曾經(jīng)出現(xiàn)過幾個非常大的腳本漏洞的漏洞公告,其中比如cateloy_type.asp的遠(yuǎn)程注入漏洞和Msadscs.dll漏洞等都涉及了與現(xiàn)在的攻擊手法或者是常用的利用方法極為不同的地方,
比如Catelog_type.asp的注入漏洞,它的代碼中出現(xiàn)的問題是這樣的:
"select * from cateloy where type='" & Requset("Type") & "'"
誰都能看明白這是一個非常低級的注入漏洞,直接將Type的值放入SQL語句中查詢,并沒有估計到用戶的惡意輸入.
如果換作現(xiàn)在,我們基本上只有拿來跑表份,幸好MS沒設(shè)置類似PHP的gpc,否則我們將一事無成.但是我們可以查看這篇漏洞資料的利用方式,其中涉及到了一個SQL語句:
Select * from Sometable where somefield=' Select Shell("cmd.exe /c dir") '
關(guān)于這個語句的介紹,是漏洞資料中所說的,Access允許用" "來創(chuàng)建VBA函數(shù),導(dǎo)致命令被執(zhí)行,其實(shí)這只是Access內(nèi)置的一個特殊函數(shù)而已,相類似的還有cudir和Command函數(shù).具體的我們可以在Access中測試.測試的SQL語句如下:
Select Shell("cmd.exe /c dir c: > c:kevin.txt")
回到C盤,我們果然看到了kevin.txt.說明語句執(zhí)行成功了.
然后我們將其轉(zhuǎn)到腳本中測試吧.編寫如下的VBS腳本
Set Conn=Createobject("Adodb.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=kevins4t.mdb"
Set Rs=Conn.execute("Select Shell(""cmd.exe /c dir c: > c:kevin.txt"")")
Msgbox Rs(0)
這一此出現(xiàn)的結(jié)果很出乎我們的意料,錯誤的原因是"表達(dá)式中的'Shell'函數(shù)未定義".現(xiàn)在我們需要安靜下來喝杯咖啡然后思考為什么同樣的語句在不同的執(zhí)行者間會出現(xiàn)如此截然不同的問題.一個能正常執(zhí)行,
而另外一個則是找不到函數(shù).試想微軟一定在其中的什么地方設(shè)置了一個開關(guān),那么我們就去微軟的知識庫去了解一下.
在微軟的一篇關(guān)于沙盒模式的文檔中,我們了解到一些內(nèi)容:
為了安全起見,MS在Jet引擎的Sp8中,設(shè)置了一個名為SandBoxMode的開關(guān),這個開關(guān)是開啟一些特殊函數(shù)在另外的執(zhí)行者中執(zhí)行的權(quán)限的.它的注冊表位置在
HKEY_LOCAL_MACHINESoftWareMicrosoftJet4.0EngineSandBoxMode里,默認(rèn)是2.微軟關(guān)于這個鍵值的介紹為:0為在任何所有者中中都禁止起用安全設(shè)置,1為僅在允許的范圍之內(nèi),
2則是必須是Access的模式下(這就是為什么我們能在Access中執(zhí)行成功的原因.),3則是完全開啟,連Access中也不支持.
那么好吧,我們來看看如果將值變?yōu)?將會怎樣.
這次運(yùn)行我們的VBS的時候,出現(xiàn)的情況是一組數(shù)字,再在C盤下查看文件,果然看到了我們的kevin.txt.很神奇吧.原來Access也是可以執(zhí)行命令的,只是微軟這家伙總是懶得說出來而已.但是如果在實(shí)際方面會怎樣呢?
一.后門的設(shè)置
我們的運(yùn)用將會很窄.真的,一來我們需要的權(quán)限很高,起碼要到能改注冊表的權(quán)限,默認(rèn)是Admin和LocalSystem,二來是我們將如何修改注冊表,遠(yuǎn)程嗎?沒門的.所以我們只好將其當(dāng)作一個后門用.
只要我們修改了注冊表的值,那么在普通的注入語句中,這是一個很不錯的后門方式,最起碼可以在外部執(zhí)行一些小小的命令什么的.
比如我們在滲透某個站點(diǎn)的時候拿到了最高權(quán)限,并且修改了這個SandBoxMode,之后我們被管理員掃地出門了.那么,在首頁的某個地方依舊存在這一個Select的注入點(diǎn),這樣最好,我們讓服務(wù)器執(zhí)行如下的SQL就行了.
InjectionURL' and 0<>(select shell("cmd.exe /c net user > c:inetpubwwwrootkevins4t.txt"))