今天要來介紹一下可以練習 XSS 的地方
google 把拔的 XSS-Game
那在玩這個之前
建議大家使用 Chrome 以外的瀏覽器
不然有時候會遇到很尷尬的情況
比如說攻擊無效被 chrome 先擋下來之類的
太安全也不是個好事呢 (X
今天就來一一講解裡面的小練習吧~
總之就是不斷的觸發 alert()
總共有 6 關
扛住 !!!
Let's Go ~
很快的
按鈕一按下去來到了第一關

大家可以先按底下的 source code 出來看看
可以發現在 #45 的地方
我們的輸入直接被用字串串接的方式放進網頁中 (意思就是沒過濾辣~)

直接送一個最基本的 javascript 去觸發 alert
<script>alert()</script>

一個看起來是留言版的地方
你會發現你丟 Level 1 的 payload 進去發現沒用
這是因為在 index.html#32 的地方使用 innerHTML() 將我們輸入的東西放上去

innerHTML 生成出來的 <script> 元素並不會執行
因此我們要透過 HTML 本身的元素來執行 js
最方便的就是利用加載圖片錯誤來自動觸發
<img src="" onerror="alert()">

第三題有不同圖片讓你選
亂點會發現網址上面有變化
接著我們看到 index.html 的 source code

會發現網址上 # 後面的數字好像就是拿來存取圖片的
而且一樣用字串串接的方式 (又沒過濾ㄌ
這次要做的跟第二題頗像
構造一個圖片加載錯誤來觸發
只是這次是從語法中間來改造
0' onerror="alert()" '

一上來就來個輸入框,意圖使人搞事
首先發現這是一個計時器
而且點開始後會跳到下一頁把你輸入的東西放在網頁上
倒數完之後會噴個 alert 給你
我們直接來看看 timer.html#21 的地方

發現這個 {{ timer }} 應該就是我們輸入秒數的地方
這邊要注意程式會將我們的輸入放在 onload 這個 attribute 中
因此我們要構造一個把 startTimer() 關閉的語法
再自己串上 alert
再把後面的語法關閉好
');alert();a('

首先點 Sign up 進去下一頁
會發現網址上出現了 next=confirm 的東西
然後有個 Next >> 的按鈕
去看看 signup.html source code 可以發現

#15 的地方就是我們上面的 GET 參數
那這邊有個小技巧
就是 URL 其實可以直接觸發 javascript 喔~
next=javascript:alert()
輸入完之後記得按一下 Go 去做 request
讓這個網站目前的 next 狀態變成我們後來輸入的東西
跟著兔兔辣~
從網頁的訊息跟 URL 知道會從外部 include 一個 js 檔案進來
看一下 index.html 裡面有個函數叫做 includeGadget(url) 一直從 17 ~ 41 行
而這個 url 就是網址 # 後面的內容
函數一開始就跟你說會檢查 http:// 與 https://
但只限制小寫
我們隨便改其中一個字變大寫就繞過了 ww
或是只打 // 這樣其實也會被認定為網址的意思
然後這邊要注意一下
以前這題目是真的可以自己引外面檔案來用的
但不知道什麼時候突然不行了 @@
因此就用底下 hint 中給的 google js 吧
把 foo 改成 alert
//google.com/jsapi?callback=alert

看到這不用我說了吧
吃雞囉