XSS Challenges stage#12-16 闯关详解
XSS Challenges stage#12-16 闖關詳解
文章目錄
- XSS Challenges stage#12-16 闖關詳解
- 0x01 Stage #12 利用 IE 瀏覽器特性繞過防護策略
- 0x02 Stage #13 CSS 層疊樣式表的 IE 特性偽協議注入
- 0x03 Stage #14 通過層疊樣式表中的內聯注釋進行注入
- 1.CSS1 注釋` /*comment*/`
- 2.css expression(css 表達式)概述
- 0x04 使用 burpsuite 進行自動化測試 XSS 漏洞
- 1.將xuegodxss.php放在到網站根目錄下
- 2.使用burpsuite進行批量探測
- 3.使用 burpsuite 掃描漏洞
- 3.1 關閉 burpsuite
- 3.2 配置代理
- 0x05 使用插件來篩選漏洞
- 0x06 XSS 常用攻擊編碼
- 1.URL編碼
- 2.HTML實體編碼
- 3.JS編碼:js提供了四種字符編碼的策略
- 4.jsfuck編碼
- 5.解析過程
- 0x07 使用編碼繞過過濾-進行 XSS 注入
- 1.Stage #15 十六進制繞過
- 2.Stage #16 使用 unicode 編碼繞過關鍵詞過濾-進行 XSS 攻擊
0x01 Stage #12 利用 IE 瀏覽器特性繞過防護策略
實驗環境:在 win7上 安裝 install-ietester-v0.5.4.exe 使用 IE 10 做此實驗
安裝 ietester 雙擊即可
打開IE tester 然后訪問鏈接地址
https://xss-quiz.int21h.jp/stage_no012.php?sid=1e3d64798c2c4a6e79394b50dff044d413daa8f1
我們輸入payload 查看頁面返回的信息
fengzilin"><script>alert(document.dodomainmain);</script>我們可以看到所有的引號和尖括號都被過濾掉了,所以我們前面使用的方法對當前關卡是都沒有作用的。我們使用 IE 瀏覽器的特性來進行 XSS 注入。
拓展:IE 瀏覽器特性
IE 中兩個反引號 `` 可以閉合一個左邊雙引號
我們根據瀏覽器特性構造 payload
`` onmousemove=alert(document.domain)打開 IE 10 進行測試
域名成功彈出
0x02 Stage #13 CSS 層疊樣式表的 IE 特性偽協議注入
鏈接地址:
https://xss-quiz.int21h.jp/stage13_0.php?sid=35519ac7e298d65e648d1106643dbee7519b57f5
Hint: style attribute #提示:樣式屬性
頁面中提示,讓我們輸入的信息是層疊樣式表,所以我們使用層疊樣式表的方式進行注入。輸入的其它方式的文本信息不會被當做代碼執行。
這里使用 IEtester 工具來進行測試。
新建 IE10
將payload 輸入到瀏覽器中
background:url("javascript:alert(document.domain);");將背景顏色替換為 url,然后使用偽協議進行注入 點擊否
查看源碼
查看源碼 <input type="text" name="p1" size="60" style="background:url("javascript:alert(document.domain);");" value="background:url("javascript:alert(document.domain);");">層疊樣式表成功調用了偽協議。
0x03 Stage #14 通過層疊樣式表中的內聯注釋進行注入
鏈接地址:https://xss-quiz.int21h.jp/stage-_-14.php?sid=15a28e4ea20fb76f250fcd2b0aaa25aeb4b735d2
查看提示:發現過濾一些常用
s/(url|script|eval|expression)/xxx/ig;解決辦法,找到未過濾的,但能使用的發現,內聯注釋可以使用
1.CSS1 注釋/*comment*/
語法:
/* 這里是注釋內容
說明:用于注釋
CSS 中的某些內容。
2.css expression(css 表達式)概述
css expression(css 表達式)又稱 Dynamic properties(動態屬性)是早期微軟 DHTML 的產物,以其可以在 Css 中定義表達式(公式)來達到建立元素間屬性之間的聯系等作用,從 IE5 開始得到支持,后因標準、性能、安全性等問題,微軟從 IE8 beta2 標準模式開始,取消對 css expression 的支持。
開始注入 XSS,通過內聯注釋進行繞過。
輸入
成功彈出消息,但是存在一個問題,在 CSS 中注入以后網站會不停的給我們彈框,所以我們需要修改一下 payload 使網站只彈一次。
先使用任務管理器,結束進程
重新打開地址
https://xss-quiz.int21h.jp/stage-_-14.php?sid=15a28e4ea20fb76f250fcd2b0aaa25aeb4b735d2
輸入
fengzilin:expres/**/sion(if(!window.x){alert(document.domain);window.x=1;})代碼成功執行
0x04 使用 burpsuite 進行自動化測試 XSS 漏洞
環境準備
1.將xuegodxss.php放在到網站根目錄下
是用phpstudy 將xuegod.php放在網站根目錄下
2.使用burpsuite進行批量探測
將kali 中的 payload 字典拷貝出來
┌──(root💀fengzilin55)-[~/桌面] └─# cp /usr/share/wordlists/wfuzz/Injections/XSS.txt /root/將kali中字典拖入到和burpsuite一臺電腦中,
開啟burpsuite截取,使用火狐代理上網,并在瀏覽器中訪問
http://127.0.0.1/xuegodxss.php/?payload=1
選擇使用文檔進行爆破
開始爆破
查看payload沒有被過濾或者被替換,說明該payload可以使用,可以進行繞過處理
3.使用 burpsuite 掃描漏洞
3.1 關閉 burpsuite
這里使用 DVWA 來進進行漏洞掃描,關閉 burpsuite的截斷,我們登陸DVWA
3.2 配置代理
使用火狐瀏覽器中的插件,設置使用burpsuite代理上網
調整 DVWA 級別
訪問一下 XSS 漏洞頁面方便后期掃描漏洞
我們進入burpsuite查看刪除影響的頁面
掃描這個網站
查看掃描進度
查看詳細的掃描結果
掃描進行中
查看掃描了哪些頁面
點擊這個按照風險高低排序
查看提示信息
0x05 使用插件來篩選漏洞
運行 burpsuite 的插件 XSS Validator
安裝插件
勾選這個可以關閉插件
運行插件
解壓 phantomjs-2.1.1-windows.zip
進入/bin目錄下
輸入cmd.exe
輸入該文件然后,回車
打開burpsuite 回到前面抓取 xuegodxss.php,前面的都一樣,就在選擇payload的時候不一樣
選擇插件
復制勾選的內容
清楚原來的東西
點擊復制
點擊開始
出現的結果會在 最右邊的 復制字母的那個勾選
0x06 XSS 常用攻擊編碼
1.URL編碼
一個百分號和該字符的ASCII編碼所對應的2位十六進制數字,例如“/”的URL編碼為%2F(一般大寫,但不強求)
2.HTML實體編碼
命名實體:以&開頭,分號結尾的,例如“<”的編碼是“<”
字符編碼:十進制、十六進制ASCII碼或unicode字符編碼,樣式為“&#數值;”,例如“<”可以編碼為“<”和“<”
3.JS編碼:js提供了四種字符編碼的策略
1、三個八進制數字,如果不夠個數,前面補0,例如“e”編碼為“\145”
2、兩個十六進制數字,如果不夠個數,前面補0,例如“e”編碼為“\x65”
3、四個十六進制數字,如果不夠個數,前面補0,例如“e”編碼為“\u0065”
4、對于一些控制字符,使用特殊的C類型的轉義風格(例如\n和\r)
5、其他編碼,例如JSFUCK
4.jsfuck編碼
JSFuck 是一種基于 JavaScript 原子部分的深奧教育編程風格。它只使用六個不同的字符來編寫和執行代碼。
jsfuck 編碼http://www.jsfuck.com/
jsfuck 編碼由6個符號組成
5.解析過程
1.接收響應–>html decode–>url decode–>js decode(根據具體情況,可能是url解碼在前,也可能是js解碼在前)
0x07 使用編碼繞過過濾-進行 XSS 注入
1.Stage #15 十六進制繞過
https://xss-quiz.int21h.jp/stage__15.php?sid=8352c169e4610c3383e28025a6ca1f8b7cefd670
分析頁面,我們輸入的字符會出現在輸入框的下面的黑色方框中
我們構造 payload
"><script>alert(document.domain)</script>發現我們輸入的"<>這個特殊的符號被轉換成實體字符了
我們使用十六進制編碼繞過
十六進制的應用
此中hex帶入具體 16 進制數
| URL | %hex | |
| XML,XHTML | &#xhex | |
| HTML,CSS | #hex | 6位,用于表示顏色 |
| Unicode | U+hex | 6位,表示字符編碼 |
| MIME | =hex | |
| Modula-2 | #hex | |
| Smalltalk.ALGOL 68 | 16rhex | |
| Common Lisp | #xhex或#16rhex | |
| IPv6 | 8個 hex用:分割 |
字符轉換成數字進制編碼的方式:
將字符轉換為 ASCII碼,添加 \x 比如:> 的 ASCII 碼為 3e 那么它的十六進制為 \x3e
使用Python 將字符串轉換為 ASCII
┌──(root??fengzilin55)-[~] └─# python >>> import binascii #加載 ASCII 編碼轉換模塊 >>> print("\\x"+binascii.b2a_hex("<")) \x3c >>> print("\\x"+binascii.b2a_hex(">")) \x3e >>> exit()使用編寫的腳本
上傳編寫的腳本
使用方式-運行-輸入需要的字符或字符串即可
┌──(root??fengzilin55)-[~] └─# python3 decoder_hex.py構造payload
\x3cscript\x3ealert(document.domain);\x3c/script\x3e我們執行完發現 \ 被吃掉了,我們重新構造payload
\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e輸入之后發現彈窗了
查看源碼發現被解析了
2.Stage #16 使用 unicode 編碼繞過關鍵詞過濾-進行 XSS 攻擊
將源碼上傳到kali中的 /var/www/html目錄下
訪問 http://192.168.37.132/stage16th.php
查看提示內容
Hint: document.write();" and "s/\\x/\\\\x/ig;我們繼續使用上面的payload
可以看到payload中的 \\x3c和\\x3e還是原本的字符串并沒有被識別為<>尖括號,雖然最終瀏覽器在pre中識別了\x3e和\x3e 但代碼還是沒有執行
下面使用另外一種編碼繞過 unicode
Unicode(統一碼、萬國碼、單一碼)是計算機科學領域里的一項業界標準,包括字符集、編碼方案等。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一并且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。1990 年開始研發,1994年正式公布
轉碼方式:
和十六進制轉換一樣我們需要將字符轉換為 ASCII 碼然后前面添加\u00,但是\表示轉義我們還是需要使用\\來進行轉義。
我們使用自己寫的腳本
使用腳本
┌──(root??fengzilin55)-[/var/www/html] └─# python3 decoder_unicode.py將payload編碼后
\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e使用payload
成功執行了
我們查看源碼
返回了結果,并成功執行了
分析 unicode 編碼解析過程
總結
以上是生活随笔為你收集整理的XSS Challenges stage#12-16 闯关详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker启动报错“Job for d
- 下一篇: SWIG简介 | win10和Linux