--- tags: 程式導師計劃, 異世界網站挑戰, Huli, Minw --- # r3:0 異世界網站挑戰 破關筆記(下) {%hackmd BJrTq20hE %} <br> 前情提要 : 上集在此 : [r3:0 異世界網站挑戰 破關筆記(上)](https://hackmd.io/@dingdingdingliu/SkJs4Zsid) 中集在此 : [r3:0 異世界網站挑戰 破關筆記(中)](https://hackmd.io/@dingdingdingliu/rka3aMoi_) <br> 終於來到 [異世界網站挑戰遊戲](https://r30challenge.herokuapp.com/) 的最後五關,以下就是第十一到最後的破關筆記 : <br> ## 第 11 關 <br> ![](https://i.imgur.com/xOW3394.png) 按照指示來到了異世界新聞版 : ![](https://i.imgur.com/JgBZyUQ.png) 看過一遍,應該就是那篇只有管理員可以看的文章了。 (如果選了管理員登入,會在登入那邊發現...系統在笑你。) 到處看看後,發現 Devtool 中 news.js 出現了以下程式碼 : ``` if(id !== '888888') { fetch(`./news_api.php?id=${id}`) .then(res => res.text()) .then(data => { document.querySelector('.modal').classList.remove('hidden'); document.querySelector('.modal__title').innerText = id; document.querySelector('.modal__content').innerText = data; }) .catch(err => console.log(err)); } else { document.querySelector('.modal__title').innerText = id; document.querySelector('.modal__content').innerText = '你不是管理員'; } ``` 看來就是針對 id 是 888888 的這個部分了,而 api 網址也出現在裡面 `./news_api.php?id=${id}` 再度使用 node.js 直接拿到資料 : ``` const request = require('request') request.post( 'http://r30challenge.herokuapp.com/news_api.php?id=888888', (err, res, body) => { console.log(body) }) ``` 得到了 `{fakeituntilyoumakeit}`。 <br> > **前往下一關 : <br>https://r30challenge.herokuapp.com/lv12.php?token=fakeituntilyoumakeit** <br> <br> ## 第 12 關 <br> ![](https://i.imgur.com/wxRC6Nf.png) 想想哪裡會出現餅乾,應該就是 1. Application 中的 cookie 2. response header 中的 Set-Cookie 3. request header 中的 cookie 找了一下,在 response header 中找到 Set-Cookie 內容如下 : `Set-Cookie: token=do_you_really_know_how_to_set_cookie?; Comment=real_token_is:{you_are_cookie_master}` > **前往下一關 : <br>https://r30challenge.herokuapp.com/lv13.php?token=you_are_cookie_master** <br> <br> ## 第 13 關 <br> ![](https://i.imgur.com/T7ou8rX.png) 既然都這麼說: > ***請拿四碼數字測試看看*** 但數字 0~9 然後組成 4 碼密碼的可能性加上排列組合也太多種了,所以我先從 0000、1111、2222 類推,在第14關的網址上帶入token,先找出 response 特別緩慢的狀況有哪些。 發現快的速度幾乎在 200 多 ms 上下,但有幾個數字會超過 1 s,就這樣找出了 1、3、5、7 這四個數字。 當組合的排列越正確,response 回應的時間會越長,可以用這個方式去找出正確的排列。 > **前往下一關 : <br>https://r30challenge.herokuapp.com/lv14.php?token=5371** <br> <br> ## 第 14 關 <br> ![](https://i.imgur.com/YXqdQKy.png) 打開 Devtool 的 Element,發現藏著一段 php 程式碼,要用這個程式的邏輯回推出不會 return false 的 $token : ``` function isTokenValid($token) { $h = date('H'); $m = date('i'); $a = $h * $m + 42; $count = 0; for($i = 0; $i < 8; $i++) { $count += ord($token[$i]) - 65; } if ($count <= 100) { return false; } return $a % $count === 0; } ``` 1. 需要設定等等發出帶 token 網址的時間,用設定的時間當作變數來計算 2. 頁面上可以看出時間是 24 小時制 3. token 是長度為 8 的字串 4. $count 是字串迴圈取值後經過 ASCII 編碼的數字相加再減 65 * 8 5. $count 必須是大於 100 的數字 最後一關會依照當時的時間有著不一樣的 token, 所以在這邊就不提供前往下一關的網址了。 <br> <br> ## 結局 <br> 就這樣,來到最後的頁面。雖然寫起來是這樣,但中間在尋找和根據線索猜測的時候,有些關卡會花滿多時間,但最花時間的原來是寫破關筆記! 但藉由破關筆記,有發現自己在某些關卡還沒有完全找出所有的解法,希望自己再看筆記的時候,可以再想出未解開的內容! <br> <br> <br> <br> 想再往前回味的話,請參考以下: 上集在此 : [r3:0 異世界網站挑戰 破關筆記(上)](https://hackmd.io/@dingdingdingliu/SkJs4Zsid) 中集在此 : [r3:0 異世界網站挑戰 破關筆記(中)](https://hackmd.io/@dingdingdingliu/rka3aMoi_) <br>