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