前言
又到了久違的複習週了,真是可喜可賀(?)
這次的複習週是由 minw 助教做的小遊戲,期待!
以下是我的解題心得
關卡0
這關其實只是要跟你說如何使用 query string 傳入 token 來進入下一關
按照提示就可以順利通關了
關卡1
題目給了一串數字 100101001001100001110
,並要求轉成 18 進位。
直接在 console 算
先將題目給的二進位數字轉成十進位,再轉成十八進位就可以了。
var num = '100101001001100001110';
var result = parseInt(num, 2);
var res = result.toString(18);
console.log(res);
最後會得到 bad18
關卡2
打開 devtool 就可以看到藏著的 divsurprise
關卡3
https://r30challenge.herokuapp.com/lv3.php?token=divsurprise
一樣打開 devtool 就可以看到藏著的註解 commentfaker
關卡4
https://r30challenge.herokuapp.com/lv4.php?token=commentfaker
把 JavaScript 原始碼打開,就可以看到 span 裡面包著答案。
(其實直接在頁面上複製 [系統] token {tRaNspar3nT} 已經給你了
裡的 {tRaNspar3nT}
就可以找到
關卡5
https://r30challenge.herokuapp.com/lv5.php?token=csspersona!
輸入之後會轉址跑到 game over
所以在輸入網址後到轉址前,按下 ESC,就可以凍結在第五關的頁面。
會發現頁面上就印著第六關的 token {windowhack}
查看 JavaScript 原始碼也會發現轉址的秘密
window.location='./lv6.php?token=fail';
關卡6
題目提示 token 在 window 裡
所以就去 console 裡面輸入 window 找找看
一直往下拉拉拉,就會看到一個 叫 IamToken:"emojicute"
關卡7
看到了餅乾,就直覺去找 cookie
果然有一個 TokenIsMe
但這邊如果直接把值帶進去會錯喔,這邊的 %7B %7D 就是 { },要記得去掉
關卡8
https://r30challenge.herokuapp.com/lv8.php?token=cookieyumyum
既然是頭又是 response,那去找 response headers 也就很合理了
果然在裡面有看到 token!
關卡9
嗯,打開 devtool 就會看到一串 php 程式碼
仔細看一下會發現當 strlen($token) !== 8 的時候會返回
也就代表這個 token 是八個字母
再往下看有個迴圈,ord會返回字串的 ASCII 值
按照他的邏輯:
第二個字 第一個字 除以 1 的餘數要等於 0
第四個字 第三個字 除以 3 的餘數要等於 0
第六個字 第五個字 除以 5 的餘數要等於 0
第八個字 第七個字 除以 7 的餘數要等於 0
所以就去查表,找可以被整除就 ok 了,我隨意找了可以整除的 aaccddii
符合條件就可以通過惹~
關卡10
打開 devtool 發現有一個 api.php 並沒有拿到 response
題目說到:『你看起來不像異世界人』,猜測是同源政策的關係
所以利用 Node.js 來串 api 試試看
const request = require('request')
request(
'https://glacial-everglades-11859.herokuapp.com/api.php',
function (error, response, body){
console.log(body)
}
)
果然順利拿到 {"token":["sosdan"]}
關卡11
這邊給了一個很像 ptt 的『異世界新聞版』
進來之後,到處看看也看不出個所以然,也不能逛其他版XD
索性檢視原始碼看一下,在 JS 裡面看到 id 改成 888888 會發生一些事情
網址列改完後送出,沒有任何反應,看起來又是同源政策搞的鬼
所以再一次用 Node.js 試試看
const request = require('request')
request(
'http://r30challenge.herokuapp.com/news_api.php?id=888888',
function (error, response, body){
console.log(body)
}
)
成功拿到 token 『能看到這則留言的你,想必就是天選之人吧! {fakeituntilyoumakeit} 拯救這個世界吧!』
關卡12
https://r30challenge.herokuapp.com/lv12.php?token=fakeituntilyoumakeit
原本以為要自己去 set cookie
但後來發現 response headers 的 set-cookie 就有答案摟
關卡13
https://r30challenge.herokuapp.com/lv13.php?token=you_are_cookie_master
這邊怎麼感覺有點幾A幾B,猜數字的感覺
所以就打開 devtool 的 network 來觀察了
token 從 0 試到 9,發現 1, 3, 5, 7 這四個數字會有延遲
所以就來試這四個數字的排列組合,試著試著就過了~
關卡14
打開 devtool 後可以看到一段 php 語法
看這個 function 命名,如果達成條件就可以過關了
看一下程式碼有幾個條件:
- token 為八位數
- (小時 x 分鐘 + 42) % count 要是整除
- count 要大於 100
- count 的計算方式為 token 的每個單字轉為 ASCII 後減掉 65,再全加起來
所以我先選定一個時間,下午一點半,(小時 x 分鐘 + 42) = 432
432 的因數又大於 100 的有 216, 108,我選 108
一樣去查表,所以湊一湊就得到 AAAAAAtz
關卡15
然後呢?
然後就破關了,哈哈哈哈!
感謝 minw 做的小遊戲,真的很有趣~希望未來主線任務還能繼續推展。