?前言:
內容:
第八關
關卡資源網站,html編碼網站(兩個網站,一個是實體編號轉義(只對特殊字符有效,字母無效)、實體符號轉義)
? ? ? ? ?在線Html實體編碼解碼-HTML Entity Encoding/Decoding? ?//實體化符號編碼
htmlb編碼表
HTML字符集| HTML字符代碼和符號
簡單解釋區別,
????????一種是方便記憶(實體符號編碼,但是不能保證所有瀏覽器都支持)
? ? ? ? ?另一種瀏覽器通用,記憶難度大(實體符號編碼)
網站解析的解碼的順序:html解碼、url解碼、js解碼
什么都被那個替換了,所有的字段都被替換了,相當于沒用了,我看的用編碼可以繞過
但是不知道為啥能這樣,
問題思考:為啥<>被實體化編碼了,還是能夠正常解析彈窗語句,與平常的說的xss防御應該要實體化編碼,兩者的區別是什么?
解:忘求了,好像是對<a href="實體化編碼">test</a>,對里面實體化編碼,但是瀏覽器解析,會先解碼,在解析
如果是對<>,這類實體化編碼了,就想不到辦法進行彈窗了。
構造payload:javascript:alert(1)
總結思路:
未對<>進行過濾了,但是使用了href字段,這個可以執行js語句,雖然對里面的大多數語句進行過濾,但是未對編碼后的字段進行過濾,將javascript:alert(1)進行html編碼,進行繞過
第九關
首先的思路肯定是把上一關的payload寫進去,然后就看一下什么反應
鏈接不合法?? 我本來就沒有輸入合法的內容,但是檢測出我的payload還是什么
我繼續檢測,嘗試看題目說的是什么,添加友情鏈接,難道要添加鏈接?
我先嘗試寫一個正常的鏈接,http://127.0.0.1,發現關鍵字必須要http://才行
然后構造payload:
javascript:alert(1)//http://
思考
為什么前面加上//,才能正確的彈窗,?
我的理解是在瀏覽器上,//是注釋后面的內容,然后我去驗證這個論點
javascriopt協議中,//是單行注釋的符號,就是不執行后面的內容,什么是javascript協議,就是上面寫的,javascript:alert(1),就是冒號后面的內容都是用js執行的,也就是? //為單行注釋符的意思,為什么是js執行,因為前面說了用javascript語句執行
無javascript協議,普通的http://127.0.0.1,那就是普通的url協議,并不會是單行注釋的
擴展思考
在html協議中,也是在瀏覽器中,有兩種協議,一種是html協議,另一種是javascript協議
javascript協議是單行注釋
html主題中,是沒有任何含義的,直接渲染出來了
那么html主體中,靠什么注釋,我查了,是這個方法,<!-- 注釋內容 -->
總結思路
漏洞的前提條件:1、http://可以放到最后
2、在href字段內,導致里面的內容,是js代碼執行的,然后js代碼里面的//是注釋的意思
3、沒有注釋//
4、沒有檢測html編碼后的javascript:alert(1)
第10關
前言:我覺得用burp抓包更好理解,這個是有交互的,就是和web交互,而sql注入沒有web交互,直接和數據庫進行交互,所有的操作都是可以在burp抓包完成
但是xss如果在burp上完成,方便理解是服務器過濾了,還是web本身前端過濾了,但是前端過濾了,好像就進不了后端了,所以的話,一般都是后端過濾,
但是還是不理解為什么dom型不進入后端,也就是用burp抓不到包吧。
廢話一大推
正題:
進入靶場頁面,一個輸入點都沒有?????奇怪不是說好要有輸入和輸出嗎,現在輸入都沒有了。我找一下
廢了,我直接看源代碼,看到有個hidden,然后我就直接刪掉了,集出現一個框,輸入就按enter鍵提交了,
然后就在前端元素里,就直接刪掉,就好了,但是由于type的隱藏屬性,就不會有框的,提交之后也不會有框的,
但是onclick,就需要點那個框,才會有彈窗的
構造payload:
"οnclick=alert(1) type="text
思考
為啥要顯示才能彈窗?
由于,input標簽本身就是用來輸入的,所以他也就是要有輸入框的,如果沒有輸入框,那就是相當于瀏覽器并不會執行input標簽的語句,也就是并不會輸出在前端,如果沒有輸出,那么漏洞本身也就不存在了,也就是說必須要前端頁面顯示了那個輸入框,才會正常彈窗,如果是hidden屬性,隱藏了那個框,就算xss攻擊語句正確,也不能進行彈窗
所以,漏洞是否存在,取決于這個 input
元素是否能夠引發一個交互事件。若該元素是隱藏的并且沒有交互行為,XSS 攻擊就無法觸發。
成功的條件:
1、過濾了<>尖括號,但是沒有過濾”雙引號,依然可以用input里,onclick可執行js代碼
3、為過濾on*語句
2、需要將標簽的內容顯示出來,用type="text顯示出來,因為他可以拼接到瀏覽器的html代碼里