天天看點

網絡攻擊之web

作者:hacker網絡

在學習網絡安全之前,必須要先知道一個組織——OWASP。OWASP是一個開源的、非盈利的全球性安全組織,緻力于應用軟體的安全研究。我們基于該組織公布的技術文檔來學習相關網絡攻擊原理和預防措施,web安全的核心是——永遠不要相信使用者傳過來的資料:

網絡攻擊之web

常見的 web 攻擊方式有如下這些:

1. google hack

2. 網頁爬蟲

3. 暴力猜解

4. web 漏洞掃描

5. 錯誤資訊利用

6. 利用伺服器配置漏洞

7. 檔案上傳下載下傳

8. 構造惡意輸入(sql注入攻擊、指令注入攻擊、跨站腳本攻擊等)

9. http 協定攻擊

10. 拒絕服務攻擊

11. 其他攻擊利用(web service、flash 、ajax 等)

1. sql 注入攻擊

1.1 簡單注入

1. 數值型注入方式:例如我們背景有這樣一個查詢sql:

SELECT * from user_info WHERE id=

那麼我們可以通過修改前端的值位:-1 or 1=1 來實作查詢所有的資料,其中-1表示永遠不可能存在的資料。

2. 字元串注入的方式:通過注釋字元實作繞道

由于# / --通常辨別注釋,是以可以在輸入使用者名的時候加上’#,然後輸入任意的密碼,這樣後面查詢密碼的sql 被注釋掉,直接繞過密碼校驗實作登入;

網絡攻擊之web

是以要保證前背景輸入框格式的絕對校驗。另外嚴格禁止sql拼接,必須使用占位符

2. XSS攻擊

跨站腳本攻擊,是代碼注入的一種,它允許惡意使用者将代碼注入到網頁,其他使用者在浏覽網頁時就會受到影響;将使用者輸入的資料當作了html語句放到了頁面上執行

2.1 反射性XSS攻擊

定義 —— 頁面送出請求時,XSS代碼出現在URL中,作為輸入送出到伺服器端,伺服器端解析後響應,XSS代碼随響應内容一起傳回給浏覽器,最後浏覽器解析執行XSS代碼。

demo 如下:

網絡攻擊之web
網絡攻擊之web

當通路項目時候,加上 xss 的參數就會有如下頁面展示:

網絡攻擊之web

我們将 xss 的值改動一下url拼接js腳本 會彈出如下的界面框,這種攻擊的前提是:必須将位址中的參數在頁面解析,如果不進行解析的話,那麼這種攻擊方式也就毫無意義。

網絡攻擊之web

這種攻擊又包含三種方式:

  1. 主動攻擊:上述的加img标簽就是主動攻擊。
  2. 引誘攻擊:如果參數值為:<p onclick="alert('點我了')">點我</p>,這種引誘使用者去點選的攻擊,則為引誘攻擊。
  3. iframe方式:如果參數值為:<iframe src="//baidu.com/t.html"></iframe>,那麼将會直接将某個網站渲染到該頁面。

2.1 存儲性XSS攻擊

1. 假設這是一個交流論壇,其中一個頁面中有留言的文本輸入框,我們将具有攻擊性的腳本寫到文本框中,然後送出到服務端。(該腳本的含義表示,擷取用戶端的cookie,并發送到指定位址)。

網絡攻擊之web

2. 背景服務已經将我們送出的資料存儲到資料庫中。當其他使用者在自己計算機中登陸這個網站的時候,服務端會将我們之前寫入具有攻擊性的XSS腳本留言渲染到HTML頁面,進而将該使用者頁面中的cookie資訊發送到我們預留的網站中。

3.接下來,我們就可以用這個人的cookie資訊在該網站中“替代”他進行一系列的操作;一個簡單的存儲型XSS攻擊(cookie欺騙)就完成。

針對js擷取cookie的解決方案:在cookie中設定了HttpOnly屬性為true,那麼通過js腳本将無法讀取到cookie資訊,這樣能有效的防止XSS攻擊

2.3 XSS攻擊的防禦措施

1. 轉義html: 常用的模闆引擎,如 doT.js、ejs、FreeMarker 等,對于 HTML 轉義通常隻有一個規則,就是把 & < > " ' / 這幾個字元轉義掉,确實能起到一定的 XSS 防護作用

2. 過濾:在使用 .innerHTML、.outerHTML、document.write() 時要特别小心,不要把不可信的資料作為 HTML 插到頁面上,而應盡量使用 .textContent、.setAttribute() 等。如果用 Vue或者React技術棧,并且不使用 v-html/dangerouslySetInnerHTML 功能,就在前端 render 階段避免 innerHTML、outerHTML 的 XSS 隐患。DOM 中的内聯事件監聽器,如 location、onclick、onerror、onload、onmouseover 等,<a> 标簽的 href 屬性,JavaScript 的 eval()、setTimeout()、setInterval() 等,都能把字元串作為代碼運作。如果不可信的資料拼接到字元串中傳遞給這些 API,很容易産生安全隐患,請務必避免。

3. 校正:避免直接對HMTL 轉義,我們需要更完善的轉移政策

網絡攻擊之web

繼續閱讀