十大常見 web 漏洞

一、SQL 注入漏洞

    SQL 注入攻擊(SQL Injection),簡稱注入攻擊、SQL 注入,被廣泛用於非法獲取網站控制權,是發生在應用程序的數據庫層上的安全漏洞。在設計程序,忽略了對輸入字符串中夾帶的 SQL 指令的檢查,被數據庫誤認爲是正常的 SQL 指令而運行,從而使數據庫受到攻擊,可能導致數據被竊取、更改、刪除,以及進一步導致網站被嵌入惡意代碼、被植入後門程序等危害。 
    通常情況下,SQL 注入的位置包括: 
    (1)表單提交,主要是 POST 請求,也包括 GET 請求; 
    (2)URL 參數提交,主要爲 GET 請求參數; 
    (3)Cookie 參數提交; 
    (4)HTTP 請求頭部的一些可修改的值,比如 Referer、User_Agent 等; 
    (5)一些邊緣的輸入點,比如. mp3 文件的一些文件信息等。 

    常見的防範方法 
    (1)所有的查詢語句都使用數據庫提供的參數化查詢接口,參數化的語句使用參數而不是將用戶輸入變量嵌入到 SQL 語句中。當前幾乎所有的數據庫系統都提供了參數化 SQL 語句執行接口,使用此接口可以非常有效的防止 SQL 注入攻擊。 
    (2)對進入數據庫的特殊字符(’”<>&*; 等)進行轉義處理,或編碼轉換。 
    (3)確認每種數據的類型,比如數字型的數據就必須是數字,數據庫中的存儲字段必須對應爲 int 型。 
    (4)數據長度應該嚴格規定,能在一定程度上防止比較長的 SQL 注入語句無法正確執行。 
    (5)網站每個數據層的編碼統一,建議全部使用 UTF-8 編碼,上下層編碼不一致有可能導致一些過濾模型被繞過。 
    (6)嚴格限制網站用戶的數據庫的操作權限,給此用戶提供僅僅能夠滿足其工作的權限,從而最大限度的減少注入攻擊對數據庫的危害。 
    (7)避免網站顯示 SQL 錯誤信息,比如類型錯誤、字段不匹配等,防止攻擊者利用這些錯誤信息進行一些判斷。 
    (8)在網站發佈之前建議使用一些專業的 SQL 注入檢測工具進行檢測,及時修補這些 SQL 注入漏洞。

二、跨站腳本漏洞

    跨站腳本攻擊(Cross-site scripting,通常簡稱爲 XSS)發生在客戶端,可被用於進行竊取隱私、釣魚欺騙、竊取密碼、傳播惡意代碼等攻擊。 
    XSS 攻擊使用到的技術主要爲 HTML 和 Javascript,也包括 VBScript 和 ActionScript 等。XSS 攻擊對 WEB 服務器雖無直接危害,但是它藉助網站進行傳播,使網站的使用用戶受到攻擊,導致網站用戶帳號被竊取,從而對網站也產生了較嚴重的危害。 

    XSS 類型包括: 
    (1)非持久型跨站:即反射型跨站腳本漏洞,是目前最普遍的跨站類型。跨站代碼一般存在於鏈接中,請求這樣的鏈接時,跨站代碼經過服務端反射回來,這類跨站的代碼不存儲到服務端(比如數據庫中)。上面章節所舉的例子就是這類情況。 
    (2)持久型跨站:這是危害最直接的跨站類型,跨站代碼存儲於服務端(比如數據庫中)。常見情況是某用戶在論壇發貼,如果論壇沒有過濾用戶輸入的 Javascript 代碼數據,就會導致其他瀏覽此貼的用戶的瀏覽器會執行發貼人所嵌入的 Javascript 代碼。 
    (3)DOM 跨站(DOM XSS):是一種發生在客戶端 DOM(Document Object Model 文檔對象模型)中的跨站漏洞,很大原因是因爲客戶端腳本處理邏輯導致的安全問題。 

    常用的防止 XSS 技術包括: 
    (1)與 SQL 注入防護的建議一樣,假定所有輸入都是可疑的,必須對所有輸入中的 script、iframe 等字樣進行嚴格的檢查。這裏的輸入不僅僅是用戶可以直接交互的輸入接口,也包括 HTTP 請求中的 Cookie 中的變量,HTTP 請求頭部中的變量等。 
    (2)不僅要驗證數據的類型,還要驗證其格式、長度、範圍和內容。 
    (3)不要僅僅在客戶端做數據的驗證與過濾,關鍵的過濾步驟在服務端進行。 
    (4)對輸出的數據也要檢查,數據庫裏的值有可能會在一個大網站的多處都有輸出,即使在輸入做了編碼等操作,在各處的輸出點時也要進行安全檢查。 
    (5)在發佈應用程序之前測試所有已知的威脅。

三、弱口令漏洞

    弱口令 (weak password) 沒有嚴格和準確的定義,通常認爲容易被別人(他們有可能對你很瞭解)猜測到或被破解工具破解的口令均爲弱口令。設置密碼通常遵循以下原則: 
    (1)不使用空口令或系統缺省的口令,這些口令衆所周之,爲典型的弱口令。 
    (2)口令長度不小於 8 個字符。 
    (3)口令不應該爲連續的某個字符(例如:AAAAAAAA)或重複某些字符的組合(例如:tzf.tzf.)。 
    (4)口令應該爲以下四類字符的組合,大寫字母 (A-Z)、小寫字母(a-z)、數字(0-9) 和特殊字符。每類字符至少包含一個。如果某類字符只包含一個,那麼該字符不應爲首字符或尾字符。 
    (5)口令中不應包含本人、父母、子女和配偶的姓名和出生日期、紀念日期、登錄名、E-mail 地址等等與本人有關的信息,以及字典中的單詞。 
    (6)口令不應該爲用數字或符號代替某些字母的單詞。 
    (7)口令應該易記且可以快速輸入,防止他人從你身後很容易看到你的輸入。 
    (8)至少 90 天內更換一次口令,防止未被發現的入侵者繼續使用該口令。

**四、HTTP 報頭追蹤漏洞 **

    HTTP/1.1(RFC2616)規範定義了 HTTP TRACE 方法,主要是用於客戶端通過向 Web 服務器提交 TRACE 請求來進行測試或獲得診斷信息。當 Web 服務器啓用 TRACE 時,提交的請求頭會在服務器響應的內容(Body)中完整的返回,其中 HTTP 頭很可能包括 Session Token、Cookies 或其它認證信息。攻擊者可以利用此漏洞來欺騙合法用戶並得到他們的私人信息。該漏洞往往與其它方式配合來進行有效攻擊,由於 HTTP TRACE 請求可以通過客戶瀏覽器腳本發起(如 XMLHttpRequest),並可以通過 DOM 接口來訪問,因此很容易被攻擊者利用。 
    防禦 HTTP 報頭追蹤漏洞的方法通常禁用 HTTP TRACE 方法。

**五、Struts2 遠程命令執行漏洞 **

    ApacheStruts 是一款建立 Java web 應用程序的開放源代碼架構。Apache Struts 存在一個輸入過濾錯誤,如果遇到轉換錯誤可被利用注入和執行任意 Java 代碼。 
    網站存在遠程代碼執行漏洞的大部分原因是由於網站採用了 Apache Struts Xwork 作爲網站應用框架,由於該軟件存在遠程代碼執高危漏洞,導致網站面臨安全風險。CNVD 處置過諸多此類漏洞,例如:“GPS 車載衛星定位系統” 網站存在遠程命令執行漏洞 (CNVD-2012-13934);Aspcms 留言本遠程代碼執行漏洞(CNVD-2012-11590)等。 
    修復此類漏洞,只需到 Apache 官網升級 Apache Struts 到最新版本:http://struts.apache.org

**六、文件上傳漏洞 **

    文件上傳漏洞通常由於網頁代碼中的文件上傳路徑變量過濾不嚴造成的,如果文件上傳功能實現代碼沒有嚴格限制用戶上傳的文件後綴以及文件類型,攻擊者可通過 Web 訪問的目錄上傳任意文件,包括網站後門文件(webshell),進而遠程控制網站服務器。 
    因此,在開發網站及應用程序過程中,需嚴格限制和校驗上傳的文件,禁止上傳惡意代碼的文件。同時限制相關目錄的執行權限,防範 webshell 攻擊。

七、私有 IP 地址泄露漏洞 

    IP 地址是網絡用戶的重要標示,是攻擊者進行攻擊前需要了解的。獲取的方法較多,攻擊者也會因不同的網絡情況採取不同的方法,如:在局域網內使用 Ping 指令,Ping 對方在網絡中的名稱而獲得 IP;在 Internet 上使用 IP 版的 QQ 直接顯示。最有效的辦法是截獲並分析對方的網絡數據包。攻擊者可以找到並直接通過軟件解析截獲後的數據包的 IP 包頭信息,再根據這些信息瞭解具體的 IP。 
    針對最有效的 “數據包分析方法” 而言,就可以安裝能夠自動去掉髮送數據包包頭 IP 信息的一些軟件。不過使用這些軟件有些缺點,譬如:耗費資源嚴重,降低計算機性能;訪問一些論壇或者網站時會受影響;不適合網吧用戶使用等等。現在的個人用戶採用最普及隱藏 IP 的方法應該是使用代理,由於使用代理服務器後,“轉址服務”會對發送出去的數據包有所修改,致使 “數據包分析” 的方法失效。一些容易泄漏用戶 IP 的網絡軟件 (QQ、MSN、IE 等) 都支持使用代理方式連接 Internet,特別是 QQ 使用 “ezProxy” 等代理軟件連接後,IP 版的 QQ 都無法顯示該 IP 地址。雖然代理可以有效地隱藏用戶 IP,但攻擊者亦可以繞過代理,查找到對方的真實 IP 地址,用戶在何種情況下使用何種方法隱藏 IP,也要因情況而論。

**八、未加密登錄請求 **

    由於 Web 配置不安全,登陸請求把諸如用戶名和密碼等敏感字段未加密進行傳輸,攻擊者可以竊聽網絡以劫獲這些敏感信息。建議進行例如 SSH 等的加密後再傳輸。

**九、敏感信息泄露漏洞 **

    SQL 注入、XSS、目錄遍歷、弱口令等均可導致敏感信息泄露,攻擊者可以通過漏洞獲得敏感信息。針對不同成因,防禦方式不同

**十、CSRF **

    http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

Web 應用是指採用 B/S 架構、通過 HTTP/HTTPS 協議提供服務的統稱。隨着互聯網的廣泛使用,Web 應用已經融入到日常生活中的各個方面:網上購物、網絡銀行應用、證券股票交易、政府行政審批等等。在這些 Web 訪問中,大多數應用不是靜態的網頁瀏覽,而是涉及到服務器側的動態處理。此時,如果 Java、PHP、ASP 等程序語言的編程人員的安全意識不足,對程序參數輸入等檢查不嚴格等,會導致 Web 應用安全問題層出不窮。

    本文根據當前 Web 應用的安全情況,列舉了 Web 應用程序常見的攻擊原理及危害,並給出如何避免遭受 Web 攻擊的建議。

Web 應用漏洞原理

    Web 應用攻擊是攻擊者通過瀏覽器或攻擊工具,在 URL 或者其它輸入區域(如表單等),向 Web 服務器發送特殊請求,從中發現 Web 應用程序存在的漏洞,從而進一步操縱和控制網站,查看、修改未授權的信息。

1.1 Web 應用的漏洞分類

1、信息泄露漏洞

    信息泄露漏洞是由於 Web 服務器或應用程序沒有正確處理一些特殊請求,泄露 Web 服務器的一些敏感信息,如用戶名、密碼、源代碼、服務器信息、配置信息等。

造成信息泄露主要有以下三種原因:

    –Web 服務器配置存在問題,導致一些系統文件或者配置文件暴露在互聯網中;

    –Web 服務器本身存在漏洞,在瀏覽器中輸入一些特殊的字符,可以訪問未授權的文件或者動態腳本文件源碼;

    –Web 網站的程序編寫存在問題,對用戶提交請求沒有進行適當的過濾,直接使用用戶提交上來的數據。

2、目錄遍歷漏洞

    目錄遍歷漏洞是攻擊者向 Web 服務器發送請求,通過在 URL 中或在有特殊意義的目錄中附加 “../”、或者附加“../” 的一些變形(如 “..\” 或“..//”甚至其編碼),導致攻擊者能夠訪問未授權的目錄,以及在 Web 服務器的根目錄以外執行命令。

3、命令執行漏洞

    命令執行漏洞是通過 URL 發起請求,在 Web 服務器端執行未授權的命令,獲取系統信息,篡改系統配置,控制整個系統,使系統癱瘓等。

    命令執行漏洞主要有兩種情況:

    –通過目錄遍歷漏洞,訪問系統文件夾,執行指定的系統命令;

    –攻擊者提交特殊的字符或者命令,Web 程序沒有進行檢測或者繞過 Web 應用程序過濾,把用戶提交的請求作爲指令進行解析,導致執行任意命令。

4、文件包含漏洞

    文件包含漏洞是由攻擊者向 Web 服務器發送請求時,在 URL 添加非法參數,Web 服務器端程序變量過濾不嚴,把非法的文件名作爲參數處理。這些非法的文件名可以是服務器本地的某個文件,也可以是遠端的某個惡意文件。由於這種漏洞是由 PHP 變量過濾不嚴導致的,所以只有基於 PHP 開發的 Web 應用程序纔有可能存在文件包含漏洞。

5、SQL 注入漏洞

    SQL 注入漏洞是由於 Web 應用程序沒有對用戶輸入數據的合法性進行判斷,攻擊者通過 Web 頁面的輸入區域 (如 URL、表單等) ,用精心構造的 SQL 語句插入特殊字符和指令,通過和數據庫交互獲得私密信息或者篡改數據庫信息。SQL 注入攻擊在 Web 攻擊中非常流行,攻擊者可以利用 SQL 注入漏洞獲得管理員權限,在網頁上加掛木馬和各種惡意程序,盜取企業和用戶敏感信息。

6、跨站腳本漏洞

    跨站腳本漏洞是因爲 Web 應用程序時沒有對用戶提交的語句和變量進行過濾或限制,攻擊者通過 Web 頁面的輸入區域向數據庫或 HTML 頁面中提交惡意代碼,當用戶打開有惡意代碼的鏈接或頁面時,惡意代碼通過瀏覽器自動執行,從而達到攻擊的目的。跨站腳本漏洞危害很大,尤其是目前被廣泛使用的網絡銀行,通過跨站腳本漏洞攻擊者可以冒充受害者訪問用戶重要賬戶,盜竊企業重要信息。

    根據前期各個漏洞研究機構的調查顯示,SQL 注入漏洞和跨站腳本漏洞的普遍程度排名前兩位,造成的危害也更加巨大。

1.2 SQL 注入攻擊原理

    SQL 注入攻擊是通過構造巧妙的 SQL 語句,同網頁提交的內容結合起來進行注入攻擊。比較常用的手段有使用註釋符號、恆等式(如 1=1)、使用 union 語句進行聯合查詢、使用 insert 或 update 語句插入或修改數據等,此外還可以利用一些內置函數輔助攻擊。

    通過 SQL 注入漏洞攻擊網站的步驟一般如下:

    第一步:探測網站是否存在 SQL 注入漏洞。

    第二步:探測後臺數據庫的類型。

    第三步:根據後臺數據庫的類型,探測系統表的信息。

    第四步:探測存在的表信息。

    第五步:探測表中存在的列信息。

    第六步:探測表中的數據信息。

1.3 跨站腳本攻擊原理

    跨站腳本攻擊的目的是盜走客戶端敏感信息, 冒充受害者訪問用戶的重要賬戶。跨站腳本攻擊主要有以下三種形式:

1、本地跨站腳本攻擊

    B 給 A 發送一個惡意構造的 Web URL,A 點擊查看了這個 URL,並將該頁面保存到本地硬盤(或 B 構造的網頁中存在這樣的功能)。A 在本地運行該網頁,網頁中嵌入的惡意腳本可以 A 電腦上執行 A 持有的權限下的所有命令。

2、反射跨站腳本攻擊

    A 經常瀏覽某個網站,此網站爲 B 所擁有。A 使用用戶名 / 密碼登錄 B 網站,B 網站存儲下 A 的敏感信息(如銀行帳戶信息等)。C 發現 B 的站點包含反射跨站腳本漏洞,編寫一個利用漏洞的 URL,域名爲 B 網站,在 URL 後面嵌入了惡意腳本(如獲取 A 的 cookie 文件),並通過郵件或社會工程學等方式欺騙 A 訪問存在惡意的 URL。當 A 使用 C 提供的 URL 訪問 B 網站時,由於 B 網站存在反射跨站腳本漏洞,嵌入到 URL 中的惡意腳本通過 Web 服務器返回給 A,並在 A 瀏覽器中執行,A 的敏感信息在完全不知情的情況下將發送給了 C。

3、持久跨站腳本攻擊

    B 擁有一個 Web 站點,該站點允許用戶發佈和瀏覽已發佈的信息。C 注意到 B 的站點具有持久跨站腳本漏洞,C 發佈一個熱點信息,吸引用戶閱讀。A 一旦瀏覽該信息,其會話 cookies 或者其它信息將被 C 盜走。持久性跨站腳本攻擊一般出現在論壇、留言簿等網頁,攻擊者通過留言,將攻擊數據寫入服務器數據庫中,瀏覽該留言的用戶的信息都會被泄漏。

Web 應用漏洞的防禦實現

    對於以上常見的 Web 應用漏洞漏洞,可以從如下幾個方面入手進行防禦:

  1. 對 Web 應用開發者而言

    大部分 Web 應用常見漏洞,都是在 Web 應用開發中,開發者沒有對用戶輸入的參數進行檢測或者檢測不嚴格造成的。所以,Web 應用開發者應該樹立很強的安全意識,開發中編寫安全代碼;對用戶提交的 URL、查詢關鍵字、HTTP 頭、POST 數據等進行嚴格的檢測和限制,只接受一定長度範圍內、採用適當格式及編碼的字符,阻塞、過濾或者忽略其它的任何字符。通過編寫安全的 Web 應用代碼,可以消除絕大部分的 Web 應用安全問題。

  1. 對 Web 網站管理員而言

    作爲負責網站日常維護管理工作 Web 管理員,應該及時跟蹤並安裝最新的、支撐 Web 網站運行的各種軟件的安全補丁,確保攻擊者無法通過軟件漏洞對網站進行攻擊。

    除了軟件本身的漏洞外,Web 服務器、數據庫等不正確的配置也可能導致 Web 應用安全問題。Web 網站管理員應該對網站各種軟件配置進行仔細檢測,降低安全問題的出現可能。

    此外,Web 管理員還應該定期審計 Web 服務器日誌,檢測是否存在異常訪問,及早發現潛在的安全問題。

3)使用網絡防攻擊設備

    前兩種爲事前預防方式,是比較理想化的情況。然而在現實中,Web 應用系統的漏洞還是不可避免的存在:部分 Web 網站已經存在大量的安全漏洞,而 Web 開發者和網站管理員並沒有意識到或發現這些安全漏洞。由於 Web 應用是採用 HTTP 協議,普通的防火牆設備無法對 Web 類攻擊進行防禦,因此可以使用 IPS 入侵防禦設備來實現安全防護。

    H3C IPS Web 攻擊防禦

    H3C IPS 入侵防禦設備有一套完整的 Web 攻擊防禦框架,能夠及時發現各種已經暴露的和潛在的 Web 攻擊。下圖爲對於 Web 攻擊的總體防禦框架。

    圖 1:Web 攻擊防禦框架,參見:http://blog.csdn.net/moshenglv/article/details/53439579

    H3C IPS 採用基於特徵識別的方式識別並阻斷各種攻擊。IPS 設備有一個完整的特徵庫,並可定期以手工與自動的方式對特徵庫進行升級。當網絡流量進入 IPS 後,IPS 首先對報文進行預處理,檢測報文是否正確,即滿足協議定義要求,沒有錯誤字段;如果報文正確,則進入深度檢測引擎。該引擎是 IPS 檢測的核心模塊,對通過 IPS 設備的 Web 流量進行深層次的分析,並與 IPS 攻擊庫中的特徵進行匹配,檢測 Web 流量是否存在異常;如果發現流量匹配了攻擊特徵,IPS 則阻斷網絡流量並上報日誌;否則,網絡流量順利通過。

    此 Web 攻擊防禦框架有如下幾個特點:

  1. 構造完整的 Web 攻擊檢測模型,準確識別各種 Web 攻擊

    針對 Web 攻擊的特點,考慮到各種 Web 攻擊的原理和形態,在不同漏洞模型之上開發出通用的、層次化的 Web 攻擊檢測模型,並融合到特徵庫中。這些模型抽象出 Web 攻擊的一般形態,對主流的攻擊能夠準確識別,使得模型通用化。

  1. 檢測方式靈活,可以準確識別變形的 Web 攻擊

    在實際攻擊中,攻擊者爲了逃避防攻擊設備的檢測,經常對 Web 攻擊進行變形,如採用 URL 編碼技術、修改參數等。H3C 根據 Web 應用漏洞發生的原理、攻擊方式和攻擊目標,對攻擊特徵進行了擴展。即使攻擊者修改攻擊參數、格式、語句等內容,相同漏洞原理下各種變形的攻擊同樣能夠被有效阻斷。這使得 IPS 的防禦範圍擴大,防禦的靈活性也顯著增強,極大的減少了漏報情況的出現。

  1. 確保對最新漏洞及技術的跟蹤,有效阻止最新的攻擊

    隨着 Web 攻擊出現的頻率日益增高,其危害有逐步擴展的趨勢。這對 IPS 設備在防禦的深度和廣度上提出了更高的要求,不僅要能夠防禦已有的 Web 攻擊,更要有效的阻止最新出現的、未公佈的攻擊。目前,H3C 已經建立起一套完整的攻防試驗環境,可以及時發現潛在 Web 安全漏洞。同時還在繼續跟蹤最新的 Web 攻擊技術和工具,及時更新 Web 攻擊的特徵庫,第一時間發佈最新的 Web 漏洞應對措施,確保用戶的網絡不受到攻擊。

  1. 保證正常業務的高效運行

    檢測引擎是 IPS 整個設備運行的關鍵,該引擎使用了高效、準確的檢測算法,對通過設備的流量進行深層次的分析,並通過和攻擊特徵進行匹配,檢測流量是否存在異常。如果流量沒有匹配到攻擊特徵,則允許流量通過,不會妨礙正常的網絡業務,在準確防禦的同時保證了正常業務的高效運行。

結束語

    互聯網和 Web 技術廣泛使用,使 Web 應用安全所面臨的挑戰日益嚴峻,Web 系統時時刻刻都在遭受各種攻擊的威脅,在這種情況下,需要制定一個完整的 Web 攻擊防禦解決方案,通過安全的 Web 應用程序、Web 服務器軟件、Web 防攻擊設備共同配合,確保整個網站的安全。任何一個簡單的漏洞、疏忽都會造成整個網站受到攻擊,造成巨大損失。此外 ,Web 攻擊防禦是一個長期持續的工作,隨着 Web 技術的發展和更新,Web 攻擊手段也不斷髮展,針對這些最新的安全威脅,需要及時調整 Web 安全防護策略,確保 Web 攻擊防禦的主動性,使 Web 網站在一個安全的環境中爲企業和客戶服務。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/yanPwyK4zudSVCB8ZW9yqA