今天便要講完剩下的兩種XSS啦,原本想分成兩篇發的,但感覺內容好像有點少所以就合併了,加上明天的XSS防禦的話也才3篇,看起來是真的要講到Path traversal了,希望夠講四篇吧,實在不行的話就把之後的內容提前了
滲透者能透過誘使受害者點擊惡意URL,利用網頁前端設計時不處理輸入的弱點將輸入直接把惡意輸入塞入DOM
,瀏覽器收到輸入就會誤以為是程式碼,從而執行它

這關要求我們找出能夠執行指令用的測試用路徑(Route)
題目告訴了我們要來檢查javascript代碼
那我們就從這裡開始吧

Firefox 點擊F12後換到Debugger,便可以看到我們瀏覽器讀取到的前端檔案
把他們全部點開看看有甚麼東西

接著我們就會發現,在view裡面好像有個跟我們目標相關的檔案叫做GoatRouter.js?
把它點開來,查看看有沒有和test相關的東西


可以看到,和test匹配的結果有4個,一部份是testroute
另一部份是testroute看起來和lessoncontroller.js相關
那就讓我們開啟lessoncontroller.js並再搜尋一次關於test的東西

這次結果只有3個匹配,好消息是都在一起,看起來我們要找的東西可能和lessonContentView.js相關
繼續繼續!

看起來總算到底了,可以看到base route就是test後面加其他東西
又因為上面有提示start.mvc#lesson/算是一種base route的範例
把start.mvc#lesson/裡面的lesson改成test試試看

成功了!

這題我們便要用剛剛找到的test路徑來使用腳本啦
先在輸入框把網址改成
http://127.0.0.1:8080/WebGoat/start.mvc#test/<script>webgoat.customjs.phoneHome()</script>
後點enter...

會發現甚麼事情都沒發生
這是因為在網頁和瀏覽器中
這種包含<>的網址有可能會被網頁提前轉譯,所以我們要把他轉成url編碼,傳送進去時才會是我們要的模樣<是%3C>是%3E/是%2F
這樣我們的網址會變成
http://127.0.0.1:8080/WebGoat/start.mvc#test/%3Cscript%3Ewebgoat.customjs.phoneHome()%3C%2Fscript%3E

這樣我們便能讓我們的網址成功被解析並且執行腳本了
把XSS指令存入網頁內能讓其他人存取到的地方(E.g 留言),讓瀏覽器讀取伺服器送過來的受汙染資料的時候中招

(這頁真的很大,縮放到80%還70%都放不下)
總而言之,這關的目標很簡單,就是要讓我們能夠靠留言板執行腳本
讓我們在留言裡面輸入<script>webgoat.customjs.phoneHome()</script>

可以看到我們明明輸入了一長串,最後跑出來卻是空留言
讓我們開Console看看

看起來我們的腳本成功執行了
這說明我們成功的把腳本植入了這個網站的留言板
XSS的內容感覺好少,DOM XSS和Stored XSS兩個合在一起感覺也沒多少
總之,明天就是XSS本體的最後一天了