r3:0 異世界網站挑戰 - 破關紀錄


Posted by ai86109 on 2020-09-22

前言

又到了久違的複習週了,真是可喜可賀(?)

這次的複習週是由 minw 助教做的小遊戲,期待!

以下是我的解題心得


關卡0

這關其實只是要跟你說如何使用 query string 傳入 token 來進入下一關

按照提示就可以順利通關了


關卡1

https://r30challenge.herokuapp.com/lv1.php?token=r30:start

題目給了一串數字 100101001001100001110,並要求轉成 18 進位。

直接在 console 算
先將題目給的二進位數字轉成十進位,再轉成十八進位就可以了。

var num = '100101001001100001110';
var result = parseInt(num, 2);
var res = result.toString(18);
console.log(res);

最後會得到 bad18


關卡2

https://r30challenge.herokuapp.com/lv2.php?token=bad18

打開 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

https://r30challenge.herokuapp.com/lv6.php?token=windowhack

題目提示 token 在 window 裡

所以就去 console 裡面輸入 window 找找看

一直往下拉拉拉,就會看到一個 叫 IamToken:"emojicute"


關卡7

https://r30challenge.herokuapp.com/lv7.php?token=emojicute

看到了餅乾,就直覺去找 cookie

果然有一個 TokenIsMe

但這邊如果直接把值帶進去會錯喔,這邊的 %7B %7D 就是 { },要記得去掉


關卡8

https://r30challenge.herokuapp.com/lv8.php?token=cookieyumyum

既然是頭又是 response,那去找 response headers 也就很合理了

果然在裡面有看到 token!


關卡9

https://r30challenge.herokuapp.com/lv9.php?token=headshot

嗯,打開 devtool 就會看到一串 php 程式碼

仔細看一下會發現當 strlen($token) !== 8 的時候會返回

也就代表這個 token 是八個字母

再往下看有個迴圈,ord會返回字串的 ASCII 值

按照他的邏輯:
第二個字 第一個字 除以 1 的餘數要等於 0
第四個字
第三個字 除以 3 的餘數要等於 0
第六個字 第五個字 除以 5 的餘數要等於 0
第八個字
第七個字 除以 7 的餘數要等於 0

所以就去查表,找可以被整除就 ok 了,我隨意找了可以整除的 aaccddii

符合條件就可以通過惹~


關卡10

https://r30challenge.herokuapp.com/lv10.php?token=aaccddii

打開 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

https://r30challenge.herokuapp.com/lv11.php?token=sosdan

這邊給了一個很像 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

https://r30challenge.herokuapp.com/lv14.php?token=5371

打開 devtool 後可以看到一段 php 語法

看這個 function 命名,如果達成條件就可以過關了

看一下程式碼有幾個條件:

  1. token 為八位數
  2. (小時 x 分鐘 + 42) % count 要是整除
  3. count 要大於 100
  4. count 的計算方式為 token 的每個單字轉為 ASCII 後減掉 65,再全加起來

所以我先選定一個時間,下午一點半,(小時 x 分鐘 + 42) = 432

432 的因數又大於 100 的有 216, 108,我選 108

一樣去查表,所以湊一湊就得到 AAAAAAtz


關卡15

https://r30challenge.herokuapp.com/lv15.php?token=AAAAAAtz

然後呢?

然後就破關了,哈哈哈哈!

感謝 minw 做的小遊戲,真的很有趣~希望未來主線任務還能繼續推展。


#http game #異世界網站挑戰







Related Posts

[練習] JSONP 實作

[練習] JSONP 實作

[BE101] 初探 PHP

[BE101] 初探 PHP

F2E合作社|共用項目margin與padding|Bootstrap 5網頁框架開發入門

F2E合作社|共用項目margin與padding|Bootstrap 5網頁框架開發入門


Comments