1. 程式人生 > 其它 >Web漏洞知識淺析

Web漏洞知識淺析

目錄

該文章是在拜讀研究安全的趙顯陽前輩出的書《Web滲透與漏洞挖掘》寫的,文章只是很淺的介紹了何為漏洞、Web漏洞的分類、以及然後挖掘漏洞。

一、什麼是漏洞

1、漏洞是指一個系統存在的弱點或缺陷,系統對特定威脅攻擊或危險事件的敏感性,或進行攻擊威脅的可能性。

2、漏洞可能來自應用軟體或作業系統設計時的缺陷或編碼時產生的錯誤,也可能來自業務在互動處理過程中的設計缺陷或邏輯流程上的不合理之處。

3、這些缺陷、錯誤或不合理之處可能被有意、無意地利用,從而對一個組織的資產或執行造成不利影響,如資訊系統被攻擊或控制、重要資料被竊取、使用者資料被篡改、系統被作為入侵其他主機系統的跳板等。

4、從目前發現的漏洞來看,應用軟體中的漏洞遠遠多於作業系統中的漏洞,特別是 Web 應用系統中的漏洞更是佔資訊系統漏洞中的絕大多數。

二、Web漏洞的分類

(一)SQL 注入

SQL 注入就是通過把 SQL 命令插入到 Web 表單,遞交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的 SQL 命令的目的。

(二)XSS(跨站指令碼攻擊)

1、跨站指令碼攻擊(Cross Site Scripting,縮寫為 XSS),為了不與層疊樣式表(Cascading
Style Sheets )的縮寫 CSS 混淆,故將跨站指令碼攻擊縮寫為 XSS。

2、XSS 是一種經常出現在 Web 應用中的電腦保安漏洞,其允許惡意 Web 使用者將程式碼植入到提供給其他使用者使用的頁面中,這些程式碼包括 HTML 程式碼和客戶端指令碼。攻擊者利用 XSS 漏洞進行非法訪問控制——例如同源策略(Same Origin Policy)。這種型別的漏洞由於被黑客用來編寫危害性更大的網路釣魚(Phishing)攻擊,所以廣為人知。

3、對於跨站指令碼攻擊,黑客界的共識是:跨站指令碼攻擊是新型的“緩衝區溢位攻擊”,而 JavaScript
是新型的“ShellCode”。

(三)檔案上傳

1、檔案上傳漏洞是指使用者上傳一個可執行的指令碼檔案,並通過此指令碼檔案獲得了執行伺服器端命令的能力。這種攻擊方式是最為直接和有效的,有時幾乎不具有技術門檻。

2、“檔案上傳”本身沒有問題,有問題的是檔案上傳之後伺服器怎麼處理、解釋檔案。如果伺服器的處理邏輯做得不夠安全,則會有嚴重的不安全隱患。

(四)檔案下載

可以下載網站所有的資訊資料,包括原始碼、網站的配置檔案等資訊。

(五)目錄遍歷

如果 Web 設計者設計的 Web 內容沒有恰當的訪問控制,允許 HTTP 遍歷,攻擊者就可以訪問受限的目錄,並可以在 Web 根目錄以外執行命令。

(六)本地檔案包含(Local File Include)

1、這是 PHP 指令碼的一大特色,程式設計師們為了開發方便常常會用到包含。
比如把一系列功能函式都寫進fuction.php 中,之後當某個檔案需要呼叫時就直接在檔案頭中寫上一句<?php include("fuction.php");?>,然後呼叫內部定義的函式。

2、本地包含漏洞是 PHP 中一種典型的高危漏洞。由於程式設計師未對使用者可控的變數進行輸入檢查,導致使用者可以控制被包含的檔名,當被成功利用時可以使 Web Server將特定檔案當成 PHP 指令碼執行,從而導致使用者獲取一定的伺服器許可權。

(七)遠端檔案包含

伺服器通過 PHP 的特性(函式)去包含任意檔案時,由於要包含的檔案來源過濾不嚴,可以包含一個惡意檔案,而我們可以構造這個惡意檔案達到滲透系統的目的。幾乎所有的 CGI 程式都有這樣的 Bug,只是具體的表現方式不一樣罷了。

(八)全域性變數覆蓋

1、register_globals 是 PHP 中的一個控制選項,可以設定成 Off 或者 On,預設為 Off,決定是否將EGPCS(EGPCS 是 Environment、GET、POST、Cookie、Server 的縮寫)變數註冊為全域性變數。

2、如果開啟 register_globals,客戶端提交的資料中含有 GLOBALS 變數名,就會覆蓋伺服器上的$GLOBALS 變數。

(九)程式碼執行

由於開發人員編寫原始碼時沒有針對程式碼中可執行的特殊函式入口做過濾,導致客戶端可以提交惡意構造語句,並交由伺服器端執行。Web 伺服器沒有過濾類似system()、eval()、exec()等函式是該漏洞攻擊成功的最主要原因。

(十)資訊洩露

由於程式碼編寫不嚴謹或應用固有的功能,造成網站伺服器資訊被非法獲取,但這只是一個低危漏洞。

(十一)弱口令

弱口令的危害就猶如你買了一個高階保險箱,什麼刀斧工具都破壞不了它,但遺憾的是你把鑰匙掛在了門上。常見的弱密碼出現在個人郵箱、網遊賬號、系統口令等環境。

(十二)跨目錄訪問

開發人員沒有正確地限制能夠訪問儲存系統的網頁路徑。通常,跨目錄攻擊的受害者大多是社交網站,或者是全球性的 Web 伺服器。因為在同一個 Web 伺服器上可能為不同的使用者或部門分配不同的目錄。例如,每個 MySpace 使用者都有一個個人的網路空間。此時,如果使用 Cookie 或者 DOM 儲存,就可能產生跨目錄攻擊。

(十三)緩衝區溢位

緩衝區溢位是一種非常普遍、非常危險的漏洞,在各種作業系統、應用軟體中廣泛存在。利用緩衝區溢位攻擊會導致程式執行失敗、系統宕機、重新啟動等後果。更為嚴重的是,可以利用它執行非授權指令,甚至可以取得系統特權進而進行各種非法操作。

(十四)Cookies 欺騙

1、Cookies 能夠讓網站伺服器把少量資料儲存到客戶端的硬碟,或從客戶端的硬碟讀取資料。當你瀏覽某網站時,由 Web 伺服器置於你硬碟上一個非常小的文字檔案,它可以記錄你的使用者 ID、密碼、瀏覽過的網頁、停留的時間等資訊。當你再次來到該網站時,網站通過讀取 Cookies 得知你的相關資訊,就可以做出相應的動作,如在頁面顯示歡迎你的標語,或者讓你不用輸入 ID、密碼就可以直接登入等。

2、從本質上講,它可以看作是你的身份證。但 Cookies 不能作為程式碼執行,也不會傳送病毒,為你所專有,且只能由提供它的伺服器來讀取。儲存的資訊片斷以“名/值對”(Name-Value Pairs)的形式儲存,一個“名/值對”僅僅是一條命名的資料。Cookies 欺騙就是修改其中儲存的資訊,從而實現某些特殊的目的。

(十五)反序列化

如果服務端程式沒有對使用者可控的序列化程式碼進行校驗,而是直接進行反序列化使用,並且在程式中執行一些比較危險的邏輯(如登入驗證等),那麼就會觸發一些意想不到的漏洞。比如經典的有 Weblogic 反序列化和 Joomla 反序列化漏洞。

(十六)CSRF(跨站請求偽造)

攻擊者通過使用者的瀏覽器注入額外的網路請求,破壞一個網站會話的完整性。瀏覽器的安全策略是允許當前頁面傳送到任何地址,因此也就意味著當用戶在瀏覽其無法控制的資源時,攻擊者可以控制頁面的內容來控制瀏覽器,傳送其精心構造的請求。

(十七)命令注入

系統對使用者輸入的資料沒有進行嚴格過濾就運用,並且使用 bash 或 cmd 執行。

三、漏洞挖掘常用的方法

(一)SQL注入

1、對於注入漏洞,通常我們在 URL 後加單引號即可判斷是否有注入漏洞。
http://www.isafe.cc/list.asp?id=1 後加單引號,即 http://www.isafe.cc/list.asp?id=1’
這時伺服器會把 1’代入資料庫查詢,然後頁面報錯,而對於不同的資料庫錯誤資訊也不一樣。

2、對於不報錯的頁面,可以使用 and 1=1 和 and 1=2,並根據頁面返回內容判斷是否有注入。
如果 and 1=1 和 and 1=2 返回的頁面內容不同,則可以斷定存在注入。比如,第一次提交的 URL http://www.isafe.cc/list.asp?id=1 and 1=1 頁面有返回內容,而第二次提交的 URL http://www.isafe.cc/list.asp?id=1 and 1=2 頁面沒有完整的內容,則可以斷定存在 SQL 注入。

3、對於有些特定的 Web 頁面後端查詢,比如 Update、Delete、Insert 等,可以使用Sleep 等 函 數 ( 數 據 庫 不 同 則 函 數 不 同 ) 進 行 SQL 注 入 , 比 如 提 交 URL
http://www.isafe.cc/list.asp?id=1 and sleep(5) ,如果頁面等待幾秒鐘才返回,則可以斷
定存在 SQL 注入。

4、SQL 注入一般有基於報錯的注入、基於布林值的注入和基於時間的注入。

(二)XSS(跨站漏洞)

跨站漏洞一般出現在 Web 瀏覽器端,分為反射型、儲存型等,跨站可用來盜取其他使用者的 Cookie,雖然沒有 SQL 注入危害大,但也被業界評為高危漏洞,一般在URL 後加入<script>alert(“www.isafe.cc”);</script>,如果頁面有彈框,則表示存在跨站漏洞。

(三)檔案上傳

1、檔案上傳漏洞一般視情況而定,有些是中介軟體的漏洞如:apache、nginx、iis 等。

2、對於 apache 上傳 1.php.bak 這樣的檔案是可以作為 PHP 檔案執行的(某些版本),對於 nginx 上傳 1.jpg 檔案,訪問 http://www.isafe.cc/upload/1.jpg/1.php 就可以執行 PHP程式碼。

3、對於 iis 6.0 上傳 1.asp、1.jpg 這樣的檔案可以被作為 ASP 來執行,建立 1.asp資料夾,在1.asp 檔案下的任意字尾檔案都可以作為 ASP 來執行。有些是程式碼過濾不嚴謹造成的任意檔案上傳,有些程式碼對檔案上傳根本不過濾,對應過濾的檔案也可以通過各種方法繞過上傳。檔案上傳視情況而定,有各種各樣可利用的方法。

(四)檔案下載

1、下載系統上的任意檔案,如資料庫配置檔案、密碼檔案 Shadow 等,Web 層面會提供下載附件或軟體的功能,一般形式如 http://www.isafe.cc/download.php?filename=/files/document.doc

2、Web 後端會根據 filename 引數在指定的目錄中讀取檔案的內容返回給瀏覽器,如果修改 filename 為 http://www.isafe.cc/download.php?filename= ../../../../../../../etc/passwd 這樣的形式,則可以跨越指定的目錄訪問系統的任意檔案。

(五)程式碼執行

遠端程式碼執行多見於 PHP、Java 等指令碼語言中,PHP 中的 Eval、System、Assert、Popen 等函式如果對外界傳入的引數直接使用,則會造成遠端程式碼執行,我們在找漏洞的時候只要定位到相關函式,觀察相關函式的引數來源即可。