看看有哪些 Web 攻擊技術

一、前言

HTTP 協議具有無狀態、不連接、盡最大努力的特點,對於 Web 網站的攻擊基本也是針對 HTTP 協議的這些特點進行的。比如無狀態的特點,就要求開發者需要自行設計開發"認證"和"會話管理"功能來滿足 Web 應用的安全,而形形色色的自行實現,也為用戶會話劫持、SQL 注入等攻擊埋下了風險;而不連接的特點表示客戶端可以肆意的修改 HTTP 的請求內容,而服務端可能會接收到與預期數據不相同的內容。

Web 漏洞中,邏輯漏洞佔比最大,邏輯漏洞是指由於程序邏輯不嚴或邏輯太複雜,導致一些邏輯不能夠正常處理或處理錯誤,一般出現在支付金額、越權訪問、信息查詢、登陸認證等地方。邏輯漏洞很大的一部分原因是因為對代碼的不夠認真和對客戶的過於信任,比如返回數據中包含用戶敏感信息、登錄認證存在撞庫風險等

看看有哪些 Web 攻擊技術

技術漏洞攻擊指的是用戶通過一定的技術手段,利用攻擊代碼達到自己非法獲取信息、身份偽裝等目的。技術漏洞攻擊可以分為主動攻擊和被動攻擊。

主動攻擊(active attack)是指攻擊者通過直接訪問 Web 應用,把攻擊代碼植入的攻擊模式。具有代表性的攻擊是 SQL 注入攻擊和 OS 命令注入攻擊。

被動攻擊(passive attack)是指利用圈套策略執行攻擊代碼的攻擊模式,比如利用釣魚網站誘使用戶點擊等。具有代表性的攻擊是跨站腳本攻擊(XSS)和跨站點請求偽造(CSRF)。

二、主動攻擊

1. SQL 注入

SQL注入(SQL Injection) 是指針對 Web 應用使用的數據庫,通過運行非法的 SQL 而產生的攻擊。簡單點來說,就是通過表單輸入的內容,誘使服務器拼接成一個非法的 SQL。比如有一個正常的 SQL 語句如下:

<code>SELECT * FROM user WHERE name='張三' and password = '123456'/<code>

正常情況下,用戶輸入用戶名“張三”和密碼“123456”(正常來說,密碼要 MD5 加密處理)完成認證過程。

假設用戶名輸入的用戶名是“張三'--”,我們來看看 SQL 會變成啥樣?SQL 語句中的 -- 之後全視為註釋,用戶就成功繞過了認證。

<code>SELECT * FROM user WHERE name='張三'--' and password = '666666'/<code>

常見的預防 SQL 注入的手段就是 SQL 語句預編譯處理。

2. OS 命令注入攻擊

OS 命令注入攻擊(OS Command Injection)是指通過 Web 應用,執行非法的操作系統命令達到攻擊的目的。OS 命令注入攻擊可以向 Shell 發送命令,讓 Windows 或 Linux 操作系統的命令行啟動程序。也就是說,通過 OS 注入攻擊可執行 OS 上安裝著的各種程序。

OS 命令注入和 SQL 注入類似,SQL 注入偽造的是非法 SQL,OS 命令注入偽造的是非法 shell 命令。

常見的預防 OS 注入的手段是對 shell 執行的符號進行轉碼替換(比如 &&、&、| 等)。

3. Dos 攻擊

DoS 攻擊(Denial of Service attack)是一種讓運行中的服務呈停止狀態的攻擊。有時也叫做服務停止攻擊或拒絕服務攻擊。DoS 攻擊的對象不僅限於 Web 網站,還包括網絡設備及服務器等。

Dos 攻擊簡單點理解就是發送大量的合法請求,造成服務器資源過載耗盡,從而使服務器停止服務。(由於服務器很難分辨何為正常請求,何為攻擊請求,因此很難防止 DoS 攻擊。)

Dos 攻擊還可通過攻擊安全漏洞使服務停止。

三、被動攻擊

1. XSS 攻擊

跨站腳本攻擊(Cross-Site Scripting, XSS)是指通過在用戶的瀏覽器內運行非法的 HTML 標籤或 JavaScript 向存在安全漏洞的 Web 網站進行的一種攻擊。攻擊者編寫腳本設下陷阱,用戶在自己的瀏覽器上運行時,一不小心就會受到被動攻擊。

常見的 XSS 攻擊比如虛假輸入表單騙取用戶個人信息、竊取用戶 Cookie 發送惡意請求 等。

常見的預防 XSS 攻擊的手段比如對 HTML 標籤、JavaScript 進行轉義處理、禁止 JavaScript 讀取 Cookie 等。

2. CSRF 攻擊

跨站點請求偽造(Cross-Site Request Forgeries,CSRF)攻擊是指攻擊者通過設置好的陷阱,強制對已完成認證的用戶進行非預期的個人信息或設定信息等某些狀態更新。

看看有哪些 Web 攻擊技術

常見的預防 CSRF 攻擊的手段比如:驗證 Referer + POST 提交、增加 token 認證等。

3. HTTP 首部注入攻擊

HTTP 首部注入攻擊(HTTP Header Injection)是指攻擊者通過在響應首部字段內插入換行,添加任意響應首部或主體的一種攻擊。比如重定向至任意的 URL、替換掉要返回的主體內容等。

比如存在某個需要重定向的頁面,本來的 header 信息是這個樣子的:

<code>Location: http://example.com/?cat=101/<code>

因為重定向需要帶回參數,攻擊者就誘使用戶在參數中加入攻擊代碼 —— 加入或替換任意的 header 信息。(下面這個 Location 可能不會生效,不同的瀏覽器對重複的 header 字段有不同的處理方式)

<code>Location: http://example.com/?cat=101(%0D%0A:換行符)
Location: http://xxx.com/<code>

4. 會話劫持攻擊

會話劫持(Session Hijack)攻擊是指攻擊者通過某種手段拿到了用戶的會話 ID,並非法使用此會話 ID 偽裝成用戶,達到攻擊的目的。

常見的預防會話劫持的手段比如:將會話 ID 和用戶設備信息綁定在一起,當用戶在其他設備上使用該會話 ID 時,就會提示被盜用風險,要求用戶重新登錄。

四、我們能做什麼?

  1. 輸入值驗證。檢查數值是否符合系統業務邏輯或檢查字符編碼,永遠不要相信用戶的輸入,注意不要依賴客戶端驗證,客戶端驗證的目的只是為了儘早的辨識輸入錯誤,起到提高 UI 體驗的作用(客戶端驗證可被修改繞過)。
  2. 輸出值轉義。比如對 HTML 標籤、JavaScript 進行轉義處理再輸出,避免存在攻擊代碼。
  3. Web 應用不直接拋出異常,或謹慎輸出錯誤提示,防止被攻擊者利用。
  4. 敏感字段,比如密碼,進行加 salt 加密處理,防止被暴力破解(比如常見的 彩虹表)。
  5. 簽名認證,防止數據被篡改。客戶端設置簽名,服務端校驗簽名是否正確。
  6. 禁止開放重定向(Open Redirect)功能,防止被攻擊者選中並用來作為釣魚攻擊的跳板。
  7. 涉及到登錄口的地方,增加圖形驗證碼,防止爆破機器人。
  8. 上線前將一些測試接口或後門程序刪除,避免被攻擊者利用。
  9. 不要將公司代碼傳到公共倉庫。


分享到:


相關文章: