Web漏洞-XSS理論和靶場小試牛刀(一)

★★實戰前置聲明★★
文章中涉及的程序(方法)可能帶有攻擊性,僅供安全研究與學習之用,讀者將其信息做其他用途,由用戶承擔全部法律及連帶責任,文章作者不承擔任何法律及連帶責任。

1、簡單瞭解HTML和JS基礎

想要知道怎麼XSS攻擊,是需要了解一些HTML和JS基礎知識點的,不然後面一些腳本注入會不清楚。HTML全稱HyperText Markup Language超文本標記語言,HTML文檔也可以叫做web頁面,主要功能是實現頁面跳轉,顯示數據。

1.1、HTML結構標準

<!doctype html> //聲明文檔類型,由渲染引擎解析
<html> //根標籤
<head> //頭部標籤
<title></title> //標題標籤 ,位於頁面最上方定義瀏覽器工具欄中的標題
</head>
<body> // 主體標籤,給用戶、瀏覽者看
<!-- 在此處寫註釋 -->
</body>
</html>

層級關係說明

<head> </head>和<body> </body>爲並列關係
<head> </head>和<title> </title> 爲嵌套關係

1.2、HTML標籤

HTML標籤是HTML語言中最基本的單位,也是最重要的組成部分。 標籤大小寫無關,但推薦使用小寫。標籤可分爲單標籤(比如<br/>)和雙標籤(比如<h1></h1>)。

常見的單標籤:

<br/> // 換行
<hr/> //水平分隔線
<img /> //圖片標籤
<input /> //輸入標籤
<meta /> //HTML文檔的元數據,機器可讀,如<meta charset=UTF-8”/

常見的雙標籤:

<html></html>
<head></head>
<title></title>
<body></body>
<h1></h1> //大標題
<p></p> //段落標籤
<div></div> //塊標籤,對內容樣式控制、實現佈局效果
<a></a>		// <a href="https://www.baidu.com">百度</a>
<ul></ul> //列表標籤
<form></form> //表單標籤,用於用戶輸入創建HTML表單,向服務器傳輸數據
<select></select> //選項標籤

1.3、JS(JavaScript)

JavaScript是一種直譯式的腳本語言、是一種動態類型、弱類型、基於原型的語言,內置支持類型。它可以將文本動態放入HTML頁面、讀寫HTML元素、對事件做出響應、可用來驗證用戶輸入的數據、也可創建Cookies存儲訪問者計算機中的信息等。

百度百科定義
JavaScript(簡稱“JS”)是一種具有函數優先的輕量級,解釋型或即時編譯型的編程語言。雖然它是作爲開發Web頁面的腳本語言而出名,但是它也被用到了很多非瀏覽器環境中,JavaScript基於原型編程、多範式的動態腳本語言,並且支持面向對象、命令式、聲明式、函數式編程範式。

使用方式有兩種

// 寫在html的形式
<script> JavaScript的內容(123、'xss')</script>

// 引用文件的形式
<script type="text/javascript" src="js文件的路徑" />

常用一些函數舉例

<script>alert(1)</script>
<svg onload=alert(1)>
<img src=1 onerror=alert(1)>
<M onmouseover=alert(1)>M
<marquee onscroll=alert(1)>
<a href=javascript:alert(1)>M</a>
<body onload=alert(1)>
<details open ontoggle=alert(1)>
<embed src=javascript:alert(1)

更全面的學習可以到菜鳥教程學習,個人建議非專業前端開發人員快速瞭解學習就行。

2、XSS簡介

XSS全稱Cross Site Script,跨站腳本攻擊,由於簡寫CSS與html的css樣式重名,簡稱爲XSS。屬於web應用中計算機安全漏洞,是惡意的web訪問者將腳本植入到提供給用戶使用的頁面中。一般使用JavaScript編寫的危險代碼,當用戶使用瀏覽器訪問頁面時,腳本會被執行,從而達到攻擊者目的。本質是惡意代碼未經過濾,與網站正常的代碼混在一起,瀏覽器無法分辨哪些腳本是可信的,導致惡意腳本被執行。

2.1、XSS攻擊流程

一般包含5個節點:

1、攻擊者查找目標網站或Web應用程序,嘗試找到可以插入惡意腳本的漏洞點。

2、一旦攻擊者找到了潛在的漏洞點,他們將準備好的惡意腳本插入到這些地方。

3、用戶訪問包含惡意腳本的頁面,或者與包含惡意腳本的數據進行交互。

4、用戶的瀏覽器接收到惡意腳本,並執行它。

5、惡意腳本可以執行多種操作,包括竊取用戶的會話令牌、cookie、輸入的敏感信息,或者將用戶重定向到其他惡意網站。

(圖片來源於網絡)

3、XSS漏洞分類和利用

XSS漏洞可分爲3類:反射型(非持續型)、存儲型(持續型) 和DOM型。

3.1、反射型(非持續型)

全稱:Reflected Cross-site Scripting,也稱作非持久型、參數型跨站腳本,主要用於將惡意腳本附加到URL地址參數中。漏洞特徵:一次性的、前端執行、不會存儲到後端數據庫中。危害等級:中。

反射型XSS攻擊步驟:

  • 攻擊者構造出包含惡意代碼的URL。
  • 用戶訪問時,惡意代碼會被拼接在HTML中返回給瀏覽器。
  • 用戶瀏覽器接收到響應後解析執行,混在其中的惡意代碼也被執行。
  • 竊取用戶數據併發送到攻擊者的網站,或冒充用戶的行爲執行攻擊者指定的操作。

3.2、存儲型(持續型)

全稱:Stored Cross-site Scripting,攻擊者事先將惡意JS代碼上傳或存儲到漏洞服務器,當用戶瀏覽含惡意JS代碼的頁面就會執行惡意代碼,不需要用戶單擊特定URL就能執行跨站腳本。漏洞特徵:持久性、前端執行、儲存在後端數據庫。危害等級:高。

存儲型 XSS 的攻擊步驟:

  • 攻擊者將惡意代碼提交到目標網站的數據庫中。
  • 用戶打開目標網站時,網站服務端將惡意代碼從數據庫取出,拼接在HTML中返回給瀏覽器。
  • 用戶瀏覽器接收到響應後解析執行,混在其中的惡意代碼也被執行
  • 竊取用戶數據併發送到攻擊者的網站,或冒充用戶的行爲執行攻擊者指定的操作。

3.3、DOM型

DOM-based XSS發生在應用程序通過JavaScript操作頁面DOM時,未對用戶輸入進行適當的過濾或轉義,導致攻擊者可以注入惡意腳本,進而影響其他用戶。漏洞特徵:一次性、前端執行、不會儲存在後端數據庫、程序執行不依賴服務器端的數據。危害等級:中。

與前兩種類型的XSS區別,漏洞發生原因跟服務器解析無關,只是JS代碼讀取了URL內容導致,dom-xss取決於輸出位置,並不取決於輸出環境,因此dom-xss有可能是反射型的,也可能是存儲型的。

4、靶場小試牛刀(一)

選擇pikachu靶場的Cross-Site Scripting,實驗選擇反射型xss(get)。本文暫時給出一個攻擊示例,其他類型的會有另外一篇分享。

先隨便填寫提交,看界面展示數據,右擊查看頁面碼數據是回顯的,然後根據數據結構確定構建poc提交驗證。

測試驗證內容

'<>?"&/6666

4.1、正常操作

輸入'<>?"&/6666,界面顯示如下:

4.2、查看源碼

查看源碼,發現輸入的內容,是填充在p標籤內,沒有被編碼。注意:文本框長度限制20

4.3、確定攻擊poc

由於文本框長度限制20,攻擊poc可用就變得很少了

<svg onload=alert(1)>

驗證成功

5、資料獲取

靶場環境搭建請參考《靶場環境搭建【XP、pikachu、dvwa、sqli-labs】》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章