寫篇博客主要記錄一下xss的學習
此次使用的網站是:xss練習

進入網站首頁后,點擊圖片便能開始xss的學習之旅了
文章目錄
- Level-1
- Level-2
- Level-3
- Level-4
- Level-5
- Level-6
- Level-7
- Level-8
- Level-9
- Level-10
- Level-11
- Level-12
- Level-13
- Level-14
- Level-15
- Level-16
Level-1

可以看到Level-1的界面,這一關的xss注入點比較明顯,就是在url欄中引數:name
payload:
<script>alert(123)</script>
Level-2

來到第二關,界面中央的輸入框似乎可以搞事情,先試一試上一關的payload看看能行不
payload:
<script>alert(123)</script>

很明顯,這一關對我們的輸入做了一些手腳,使得<script>標簽并沒有被決議到DOM樹中(也就是說這個<script>標簽并沒有被瀏覽器認為是一個標簽,而是當作普通的文本識別了)我們看一些這個網頁的原始碼

既然 <> 被物體化了,那么在這里插入標簽來構成xss便不太現實了(<> 被物體化后無論插入什么標簽都不會被瀏覽器決議為標簽的)不過觀察這個網頁的代碼便會有意外識訓

圖中紅色標注的value屬性值,這里的值便是我們剛才的輸入內容,我們可以從這里做手腳,從而構成xss
payload:
" οnclick="javascript:alert(123)
Level-3

還是先試一試上一關的payload看看這一關有什么變化
" οnclick="javascript:alert(123)

先去看看原始碼有什么變化

從原始碼可以看到,在這一關中 " 被物體化了,不過所幸,從原始碼里可以看到可以使用 ’ 來閉合,所以 " 被物體化也沒有什么影響
payload:
' οnclick='javascript:alert(123)
Level-4

先去看看原始碼,看看回顯可能在哪里

這里也可以直接使用 " 進行閉合,從而構成xss
payload:
" οnclick="javascript:alert(123)
Level-5


看起來與上一關并沒有什么差別,先試試上一關的payload
" οnclick="javascript:alert(123)

使用上一關的payload并不能通過這一關,所以我們還是得去看看網頁代碼是將我們的輸入變成了什么樣子

很明顯,這里將我們的對我們輸入的 on 做了過濾,這樣我們的便不能使用onclick等有 on 存在的函式來構成xss了,不過我們可以使用javascript偽協議來執行javascript代碼,從而構成xss
payload:
"> <a href="javascript:alert(233)">ss</a>
Level-6

先試試上一關的payload
"> <a href="javascript:alert(233)">ss</a>


這一次過濾的更為嚴謹,將href也進行了過濾,不過,我們可以對被過濾字符進行大小寫來嘗試繞過過濾
payload:
"> <a HREF="javascript:alert(12)">12</a>
Level-7

依然是先嘗試上一關的payload
"> <a HREF="javascript:alert(12)">12</a>


這一次就比較厲害了,我們查看網頁代碼發現我們輸入的 href 和 script 都消失了,也就是說我們輸入的 href 和 script 被后臺替換為了null,不過,這種替換也有著一定的缺點
舉個例子:先來看一個字串 scripscriptt ,這個字串中便含有 script ,我們將其替換為null,也就是相當于刪去了 script ,經過我們的操作之后,這個字串變成了 script ,看到這,這一關的payload也應該就比較明顯了吧
payload:
"><a hrehreff="javasscriptcript:alert(23)">test</a>
Level-8

先來看看網頁代碼

可以看到有兩處是回顯我們的輸入值,我們先構建一個payload嘗試一下
"><a href="javascript:alert(23)">test</a>

由于 <> 被物體化,所以紅色標注處并沒有成功閉合從而構成xss,不過我們看到了第二個紅色標注處,我們的輸入是在href之中,所以我們可以依次為突破口再次構建一個payload進行嘗試
javascript:alert(123)

圖上可能看到不是很清楚,這里的 javascript 被后臺處理而變成了 javascr_ipt,從而無法正常執行javascript偽協議,后面的javascript自然也就無法執行了,
不過若是對瀏覽器的編碼解碼有一定的了解的話,便會知道html決議器是最先進行作業的,并且html決議器還會決議“屬性狀態中的字符參考(物體編碼)”,在html決議器作業完成之后一般才是url決議與javascript決議,由于html決議已經完成,所以若是對“屬性狀態值”進行html物體編碼是不影響url與javascript的決議的,所以我們的payload自然也就有了眉目
payload:
javascript:alert(123)
其中:javascript 是字串 javascript 的物體化編碼
Level-9


只有輸入內容中存在正常鏈接格式才會將其回顯到圖中紅色標注處,但是這里有個點比較坑,這里并不識別以 https 作為開頭的鏈接,只識別以 http 開頭的鏈接,這點需要注意一下,除此之外,這一題與上一題的解法基本相同,現在的主要問題便是如何將javascript與正常鏈接放到一起并且還能使javascript代碼能夠正常執行,其實借助一下注釋便能完美解決這個問題
payload:
javascript:alert(123)//http://www.baidu.com
Level-10

沒有看到什么明顯的注入點,所以還是先看看網站代碼能不能給我們提供些xss的思路

明顯可以看到這里有三個隱藏的輸入框,可以看到這三個輸入框都有著各自的name屬性,且form表單并沒有規定method,所以使用的method為默認(GET),所以我們直接在url欄中進行傳參來測驗一下這三個input哪一個可以回顯
構造的url為:test.ctf8.com/level10.php?t_link=test123&t_history=test456&t_sort=test789

可以看到,這里第三個輸入框(name為t_sort)存在回顯,于是我們便可以構建payload將其作為t_sort的引數值傳入
payload:
" οnclick="javascript:alert(123)" type="text
Level-11

這題與前面風格突變,這題是Referer型別的xss(當時寫這題時,人都要給我寫沒了,突然變成了Referer型別的xss,我當時根本沒往這方面去想),知道是Referer型別的xss后,再來看一下這題的代碼

抓包,將Referer值修改為payload便能通過這一關
payload:
" οnclick="javascript:alert(123)" type="text
Level-12

先看一下網頁代碼

如果經常抓包的話,應該能夠看出來上圖紅色標注的input標簽的value值是user-Agent型別的,與上一關的過關方法類似,這一關將user-Agent的值修改為payload即可過關
payload:
" οnclick="javascript:alert(123)" type="text
Level-13

Referer與user-Agent都來過了,這一關我當時便猜是關于cookie的,抓包與與網頁代碼相比對后便能發現確實是關于cookie的xss

抓包之后,修改上圖紅色標注的cookie中的user屬性值為payload便能過關
payload:
"+οnclick="javascript:alert(123)"+type="text
Level-14
這一關我一進去網頁就是一頓跳轉,抓包也沒有找到什么思路
Level-15
由于Level-14我沒有做,所以這一關我只能按照前面的關卡路徑規則猜測它的路徑為:http://test.ctf8.com/level15.php
,雖然地址是對的,但是訪問速度是真的太慢了

雖然能打開,但是這一題并沒有突破,下圖可以給大家提供一個可能的引數,各位若是有思路的話還請在下方評論區告知一下(萬分感謝)

Level-16
由于15關沒過,16關依然是猜路徑:http://test.ctf8.com/level16.php?keyword=


這一關 <> 都沒有被物體化,但是很遺憾的是除此之外的過濾都很嚴格,我嘗試構造了各種標簽都沒有成功構成xss,這種時候只能靠運氣了,去傳幾個url編碼的值看看能不能正常回顯,然后會發現能夠正常回顯,所以后臺作業的大致思路應該是先對過濾字符進行操作之后,然后又進行了一次url解碼,這時候payload的思路也就很明顯了,通過對關鍵字符進行url編碼來繞過過濾
payload:
<img%0asrc="123.png"%0aonerror="%6a%61%76%61%73%63%72%69%70%74:alert(123)">
剩下的幾關我去訪問的時候感覺有些不對勁,去百度了一下也發現現在訪問的網站跟別人以前訪問的確實變了,嘗試了一次下別人的payload也發現并沒有什么作用,所以在這里后面幾關便不記錄了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/243263.html
標籤:其他
上一篇:SQL注入
