iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0

前言

今天同樣找一題 XSS 題目練練手!這次我沒能在 picoCTF 上找到適合的題目 XD
但是找到一個似乎是 Google 的 XSS Game:Google XSS Game - AppSpot,那我們來嘗試能不能全部解完 XD,今天先解前 3 題!

Write-up

Level 1/6

首先會看到這個畫面:
https://ithelp.ithome.com.tw/upload/images/20230922/20162615lZiS8gwTSJ.png

上面有如何通關的敘述,最底下則是可以查看原始碼,也有 3 次提示可以用,不過總之先直接戳 <script>alert();</script> 試試看:
https://ithelp.ithome.com.tw/upload/images/20230922/20162615afCdTuhHIm.png

通關了 XD,過了之後就可以前進下一個 Level

Level 2/6

這次的題目是一個留言板
https://ithelp.ithome.com.tw/upload/images/20230922/20162615iW6ZFjK6dD.png

同樣先輸入 <script>alert();</script> ,透過 DevTools 可以看到 <script> 被包在 <blockqoute> 的 tag 裡面
https://ithelp.ithome.com.tw/upload/images/20230922/201626150evwdjfrXE.png

那為什麼 XSS 沒有被觸發呢?

底下的原始碼 index.html 32 行的位置可以看到
containerEl.innerHTML += html;

並且在 MDN 的文件 Element: innerHTML property 中有提到:用 innerHTML 插入的 <script> tag 並不會被執行,但再更底下就把答案告訴我們了 XD

However, there are ways to execute JavaScript without using <script> elements, so there is still a security risk whenever you use innerHTML to set strings over which you have no control. For example:

const name = "<img src='x' onerror='alert(1)'>";
el.innerHTML = name; // shows the alert

我們拿著這段 <img src="x" onerror="alert();"> 貼上去,效果十分顯著,成功晉級~

底下還有寫到建議不要使用 innerHTML,可以使用 Element.setHTML() 或是 Node.textContent

Level 3/6

這題一進來可以看到 3 張圖分別在 3 個 tab 中,按下去的時候 URL 最後面的 hash 值會變:
https://xss-game.appspot.com/level3/frame#1
https://xss-game.appspot.com/level3/frame#2
https://xss-game.appspot.com/level3/frame#3

原始碼的 index.html 36 到 38 行:

window.onload = function() {
	chooseTab(unescape(self.location.hash.substr(1)) || "1");
}

在頁面載入時,會取 hash 後面的值來傳入 chooseTab(),在 17 行 chooseTab() 的定義中可以看到 <img> tag 拼接的方式:

html += "<img src='/static/level3/cloud" + num + ".jpg' />";

那我們試試把 hash 值改成這樣:x' onerror='alert();'
完整的 URL 長這樣:
https://xss-game.appspot.com/level3/frame#x' onerror='alert();'

順利通關~

後記

本來想說打個一題就好,結果這個系列一共有 6 題,剩下的一半就交給明天的我吧 XD


上一篇
Day 7. Web Security - XSS 介紹
下一篇
Day 9. Web Security - XSS 實戰(下)
系列文
進了資安公司當後端 RD 才入門資安會不會太晚了30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言