---
lang: zh-tw
tags: CTF
---
[Tool]:https://reqbin.com/
[API]:
https://gist.github.com/aszx87410/3873b3d9cbb28cb6fcbb85bf493b63ba
[APIv2]:
https://gist.github.com/aszx87410/1e5e5105c1c35197f55c485a88b0328a
[API-Ex]:
https://gist.github.com/aszx87410/0b0d3cabf32c4e44084fadf5180d0cf4
HTTP GAME:Lidemy HTTP Challenge 實戰 writeup
===
遊戲網址:https://lidemy-http-challenge.herokuapp.com
curl版writeup:https://hackmd.io/abclatKlTE2wOS31MBEnWQ
# 0xFF 前言
在因緣際會之下接觸到了這個CTF,想說寫個WriteUp來記錄,順便加深個印象這樣。
很適合剛接觸資安的新人,可以了解GET、POST的作用等。
>其實只是怕幾天之後就忘光了(X
>[name=羽澤]
>要寫文字真是件困難的事呢,不管怎麼寫都感覺怪怪的
>[name=lamacat]
# 0x00 故事開頭
:::info
安安,歡迎來到 Lidemy HTTP Challenge。
這裡一共有 10 道關卡,每一關的網址皆為 /lvX,X 即為關卡的數字。
但只知道網址是沒有用的,需要搭配正確的 token 才能順利進入關卡,傳入 token 的方式為 query string,例如 /lv1?token=xxx。
另外,為了讓你方便辨別這是 token,token 的內容一定是用一個大括弧刮起來的字串。
每一關都會有提示,只要按照提示照著做,就能拿到前往下一關的 token。
你可以用任何你擅長的工具來通關,只靠瀏覽器的話有些關卡是沒辦法通過的喔!
準備好了嗎?
第一關的 token 為:{GOGOGO}
附註:所以第一關網址為 /lv1?token={GOGOGO},不是 /lv1?token=GOGOGO,之後的關卡也是一樣
如果你需要提示的話,在網址最後面加上 &hint=1 就會看到提示了,例如說:/lv1?token={GOGOGO}&hint=1
:::
作者很貼心的告訴了玩家們怎麼進入第一關的方法XD
還有如果想不到解決方法可以去看看Hint
>透過GET方式,傳送多值的時候記得使用&連接
>例如: name=lamacat&test=true
>[name=lamacat]
# 0x01 第一關
:::spoiler 關卡傳送門
>https://lidemy-http-challenge.herokuapp.com/lv1?token={GOGOGO}
:::
:::info
**# 故事 #**
啊...好久沒有看到年輕人到我這個圖書館了,我叫做 lib,是這個圖書館的管理員
很開心看到有年輕人願意來幫忙,最近圖書館剛換了資訊系統,我都搞不清楚怎麼用了...
這是他們提供給我的文件,我一個字都看不懂,但對你可能會有幫助:
https://gist.github.com/aszx87410/3873b3d9cbb28cb6fcbb85bf493b63ba
先把這文件放一旁吧,這個待會才會用到
你叫做什麼名字呢?用 GET 方法跟我說你的 name 叫做什麼吧!
除了 token 以外順便把 name 一起帶上來就可以了
:::
:::spoiler Hint
>用 **GET** 方式傳送的資料會被附在 **URL** 上面當作網址,所以傳了 token 就會變 ==?token=xxx==
再加上name傳送的話就是 ==?token=xxx&name=xxx==
:::
## 解題思路
一開始關卡提供了[文件][API],目前還用不到
>文件其實就是 [API] 啦www,後面也會這稱呼
>[name=lamacat]
管理員請我們先將 **name** 告訴它,所以只要在網址的最後面加上 **&name=name** 就可以囉
**&name=** 後面就是隨便取個名子就好了。
:::success
**# 通關 #**
啊...原來你叫 lamacat 啊!下一關的 token 是: <font color="#dff0d8">{HellOWOrld}</font>
:::
>原來是草尼貓啊
>[name=羽澤]
# 0x02 第二關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv2?token={HellOWOrld}
:::
:::info
**# 故事 #**
我前陣子在整理書籍的時候看到了一本我很喜歡的書,可是現在卻怎麼想都想不起來是哪一本...
我只記得那本書的 id 是兩位數,介於 54~58 之間,你可以幫幫我嗎?
找到是哪一本之後把書的 id 用 GET 傳給我就行了。
:::
:::spoiler Hint
>還記得之前第一關給的文件嗎?要從文件裡面選到適當的 API 並 <font color="#f00">**找出書籍**</font>
不確定是哪本書的話可以多試幾次看看
「把書的 id 用 GET 傳給我」跟上一關的「用 GET 方法跟我說你的 name 叫什麼」是一樣的
除了 token 以外,要多帶一個 id 上來
:::
## 解題思路
這關看似要用到 [API] 了,但其實沒有,只需要在網址後面加上 id 的參數
然後從 54 開始遞增,回傳,管理員就會告訴你是不是它要找的那本書了
:::success
**# 通關 #**
啊!就是這本書,太謝謝你了。下一關的 token 為:<font color="#dff0d8">{5566NO1}</font>
:::
# 0x03 第三關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv3?token={5566NO1}
:::
:::info
**# 故事 #**
真是太感謝你幫我找到這本書了!
剛剛在你找書的時候有一批新的書籍送來了,是這次圖書館根據讀者的推薦買的新書,其中有一本我特別喜歡,想要優先上架。
書名是《大腦喜歡這樣學》,ISBN 為 9789863594475。
就拜託你了。
新增完之後幫我把書籍的 id 用 GET 告訴我。
:::
:::spoiler Hint
>還記得之前第一關給的文件嗎?要從文件裡面選到適當的 API 並 <font color="#f00">**新增書籍**</font>
「把書籍的 id 用 GET 告訴我」跟上一關的「把書的 id 用 GET 傳給我」是一樣的喔
除了 token 以外,要多帶一個 id 上來
:::
## 解題思路
這關就會需要使用到先前提供的 [API] 了以及能發送 HTTP Request 功能的工具
:::info
有人可能不會用 [API],其實很簡單,按照此 [API] 提供的資訊
我們只要將 **Base URL** 加上 **path** 就可以囉
舉例 [API] **獲取單一書籍** 功能的使用方式就是
`https://lidemy-http-challenge.herokuapp.com/api/book/1`
:::
>注意看一下 [API],這次 **新增書籍** 功能不再是 GET 的方式,而是 **POST**,所以就不能再用網址傳值囉
>不懂為什麼,有興趣多了解,就 Google 發問吧~~
>[name=lamacat]
>有事問狗,沒事也問狗
>[name=羽澤]
所以,這裡使用 [Post HTTP Requests Online][Tool] 來操作發送 HTTP Request
依照關卡所述,我們會用到 [API] 裡面 **新增書籍** 的功能,並且要透過 **POST** 方式去傳送資料
所以,我們要做的事情是使用 POST 方式傳送資料,並有兩筆參數資料
並且要注意,[API] 有提到 **POST** 以及 **PATCH** 的 **content type** 為:**application/x-www-form-urlencoded**,操作時,要記得要弄對唷
3. 修改 content type 為 **application/x-www-form-urlencoded**
我們來用[工具][Tool]操作就是
1. 填好網址,在 **Content** 的地方填入參數資料,順便選好格式 **FORM URL Encoded (application/x-www-form-urlencoded)**
2. 選擇傳送 Request 的 Method(方式)是 **POST**
3. 發送 Request \~~
>用工具方便的地方,就是填好必要的資料、參數,剩下工具都會自動處理
>[name=lamacat]
:::success
**# 通關 #**
這樣子讀者就能趕快看到這本新書了,謝謝!下一關的 token 為:<font color="#dff0d8">{LEarnHOWtoLeArn}</font>
:::
:::spoiler 額外補充
這關 HTTP Request 的 Raw 格式,具體長這樣
可以注意的是 Content-Length 是自動計算生成的,並非設定
隨著 Request 封包變化,Content-Length 數值會自動重新計算
```
POST /api/books HTTP/1.1
Host: lidemy-http-challenge.herokuapp.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 87
name=%E5%A4%A7%E8%85%A6%E5%96%9C%E6%AD%A1%E9%80%99%E6%A8%A3%E5%AD%B8&ISBN=9789863594475
```
:::
# 0x04 第四關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv4?token={LEarnHOWtoLeArn}
:::
:::info
**# 故事 #**
我翻了一下你之前幫我找的那本書,發現我記錯了...這不是我朝思暮想的那一本。
我之前跟你講的線索好像都是錯的,我記到別本書去了,真是抱歉啊。
我記得我想找的那本書,書名有:「世界」兩字,而且是村上春樹寫的,可以幫我找到書的 id 並傳給我嗎?
:::
:::spoiler Hint
>還記得之前第一關給的文件嗎?要從文件裡面選到適當的 API 並<font color="#f00"> **找到書籍**</font>
「找到書的 id 並傳給我」跟上一關的「把書籍的 id 用 GET 告訴我」是一樣的喔
除了 token 以外,要多帶一個 id 上來
:::
## 解題思路
這關一樣用到 [API],只要透過 [API] 的 **獲取所有書籍** 功能即可
按照 [API] 裡的範例,我們只要將 `q` 參數改成管理員要找的關鍵字 **世界** 即可
網址如下
`https://lidemy-http-challenge.herokuapp.com/api/books?q=世界`
回傳的資料是 JSON 格式,可以選擇用 [JSON Viewer](http://jsonviewer.stack.hu/) 之類的工具或直接透過 Ctrl+F 搜尋作者名子,即可找到那本書
:::success
**# 通關 #**
沒錯!這次我很確定了,就是這本!下一關的 token 為:<font color="#dff0d8">{HarukiMurakami}</font>
:::
# 0x05 第五關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv5?token={HarukiMurakami}
:::
:::info
**# 故事 #**
昨天有個人匆匆忙忙跑過來說他不小心捐錯書了,想要來問可不可以把書拿回去。
跟他溝通過後,我就把他捐過來的書還他了,所以現在要把這本書從系統裡面刪掉才行。
那本書的 id 是 23,你可以幫我刪掉嗎?
:::
:::spoiler Hint
>還記得之前第一關給的文件嗎?要從文件裡面選到適當的 API 並 <font color="#f00">**刪除書籍**</font>
若是有做對的話,就會拿到下一關的 token 囉
:::
## 解題思路
根據 [API] 描述,如果我們要 **刪除書籍** ,需要透過 **DELETE** 方式來刪除資料,操作如下
按照 [API] 的指示,編寫好我們的網址,長這個樣子
`https://lidemy-http-challenge.herokuapp.com/api/books/23`
接者用到[工具][Tool],我們只要把網址貼上,Method 選擇 DELETE 即可,送出資料
:::success
**# 通關 #**
咦...是刪掉了沒錯,但總覺得哪裡怪怪的,算了,先這樣吧!下一關的 token 為:<font color="#dff0d8">{CHICKENCUTLET}</font>
:::
:::spoiler 額外補充
這關 Request 的 Raw 格式,長這樣
```
DELETE /api/books/23 HTTP/1.1
Host: lidemy-http-challenge.herokuapp.com
```
:::
# 0x06 第六關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv6?token={CHICKENCUTLET}
:::
:::info
**# 故事 #**
我終於知道上次哪裡怪怪的了!
照理來說要進入系統應該要先登入才對,怎麼沒有登入就可以新增刪除...
這太奇怪了,我已經回報給那邊的工程師了,他們給了我一份新的文件:https://gist.github.com/aszx87410/1e5e5105c1c35197f55c485a88b0328a
這邊是帳號密碼,你先登入試試看吧,可以呼叫一個 /me 的 endpoint,裡面會給你一個 email。
把 email 放在 query string 上面帶過來,我看看是不是對的。
帳號:admin
密碼:admin123
:::
:::spoiler Hint
>從這關以後要開始用這份[新的文件](https://gist.github.com/aszx87410/1e5e5105c1c35197f55c485a88b0328a)了
關於驗證方式請 Google:http basic authorization
:::
## 解題思路
這關開始使用了新的 [API][APIv2],版本為 2;==為方便辨識,新版 [API][APIv2],後稱 [APIv2]==
並且 [APIv2] 的所有功能都需要驗證資訊才能使用
首先,關卡就需要我們透過 /me 來取得一個 email
這個 /me 其實就是 [APIv2] 的其中一個功能 **獲取個人資訊**
一樣使用這個[工具][Tool],填入網址和資料
Method 選擇 GET
Authorization 選擇 Basic Auth
Username 填入 admin
Password 填入 admin123
發送之後,就會取的回傳的資料
```json
{"username":"admin","email":"lib@lidemy.com"}
```
將email回傳之後,就通關囉
:::success
**# 通關 #**
對對對,就是這個,這樣才對嘛!下一關的 token 為:<font color="#dff0d8">{SECurityIsImPORTant}</font>
:::
:::spoiler 額外補充
這關 Request 的 Raw 格式,長這樣
```
GET /api/v2/me HTTP/1.1
Authorization: Basic YWRtaW46YWRtaW4xMjM=
Host: lidemy-http-challenge.herokuapp.com
```
:::
# 0x07 第七關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv7?token={SECurityIsImPORTant}
:::
:::info
**# 故事 #**
那邊的工程師說系統整個修復完成了,剛好昨天我們發現有一本書被偷走了...
這本書我們已經買第五次了,每次都被偷走,看來這本書很熱門啊。
我們要把這本書從系統裡面刪掉,就拜託你了。
對了!記得要用新的系統喔,舊的已經完全廢棄不用了。
書的 id 是 89。
:::
:::spoiler Hint
>這關記得要用上一關給的新系統 [APIv2] 不是原本的 [API] 喔
找到正確的書籍並<font color="#f00">**刪除**</font>即可
:::
## 解題思路
這關跟第五關很像喔,只是多了驗證
使用[工具][Tool],填好網址,Method 選 DELETE,將 Authorization 認證資訊寫好
送出 Request,就通關啦
:::success
**# 通關 #**
希望下一次進這本書的時候不會再被偷走了。下一關的 token 為:<font color="#dff0d8">{HsifnAerok}</font>
:::
:::spoiler 額外補充
這關 Request 的 Raw 格式,長這樣
```HTML RAW
DELETE /api/v2/books/89 HTTP/1.1
Authorization: Basic YWRtaW46YWRtaW4xMjM=
Host: lidemy-http-challenge.herokuapp.com
```
:::
# 0x08 第八關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv8?token={HsifnAerok}
:::
:::info
**# 故事 #**
我昨天在整理書籍的時候發現有一本書的 ISBN 編號跟系統內的對不上,仔細看了一下發現我當時輸入系統時 key 錯了。
哎呀,人老了就是這樣,老是會看錯。
那本書的名字裡面有個「我」,作者的名字是四個字,key 錯的 ISBN 最後一碼為 7,只要把最後一碼改成 3 就行了。
對了!記得要用新的系統喔,舊的已經完全廢棄不用了。
:::
:::spoiler Hint
>這關記得要用新給的 [APIv2],不是原本的 [API] 喔
找到正確的書籍並<font color="#f00">**更新**</font>即可
:::
## 解題思路
這關也是跟第四關很像,大同小異,我們需要先找到那本書,再來透過 **PATCH** 的方式去更新資料
在[工具][Tool]上填好資料以及驗證資訊,送出 Request,即可查詢到相關書本資料
由於回傳的資料是 JSON 格式,可以選擇用 [JSON Viewer](http://jsonviewer.stack.hu/) 之類的工具
轉換成容易閱讀的格式,上述工具的具體操作,只要把 JSON 資料填到 Text 的欄位,點下旁邊的 Viewer,就會看到整齊的資料了,接下來只要找到符合條件的書即可
最後找到符合的資料,如下
```json
{"id":72,"name":"日日好日:茶道教我的幸福15味【電影書腰版】","author":"森下典子","ISBN":"9981835427"}
```
接者透過 [APIv2] 的資訊,在[工具][Tool]上填好如下資訊
網址https://lidemy-http-challenge.herokuapp.com/api/v2/books/72
Merhod:PATCH
Authorization 認證資訊
Content 選擇 FORM URL Encoded (application/x-www-form-urlencoded)
==將要更新的資料填好==
name=日日好日:茶道教我的幸福15味【電影書腰版】
ISBN=9981835423
送出 Request
:::success
**# 通關 #**
希望之後他們能引進語音輸入系統,我就只要講講話就好。下一關的 token 為:<font color="#dff0d8">{NeuN}</font>
:::
:::spoiler 額外補充
這關 Request 的 Raw 格式,長這樣
```
PATCH /api/v2/books/72 HTTP/1.1
Authorization: Basic YWRtaW46YWRtaW4xMjM=
Host: lidemy-http-challenge.herokuapp.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 203
name=%E6%97%A5%E6%97%A5%E5%A5%BD%E6%97%A5%EF%BC%9A%E8%8C%B6%E9%81%93%E6%95%99%E6%88%91%E7%9A%84%E5%B9%B8%E7%A6%8F15%E5%91%B3%E3%80%90%E9%9B%BB%E5%BD%B1%E6%9B%B8%E8%85%B0%E7%89%88%E3%80%91&ISBN=9981835423
```
:::
# 0x09 第九關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv9?token={NeuN}
:::
:::info
**# 故事 #**
API 文件裡面有個獲取系統資訊的 endpoint 你記得嗎?
工程師跟我說這個網址不太一樣,用一般的方法是沒辦法成功拿到回傳值的。
想要存取的話要符合兩個條件:
1. 帶上一個 X-Library-Number 的 header,我們圖書館的編號是 20
2. 伺服器會用 user agent 檢查是否是從 IE6 送出的 Request,不是的話會擋掉
順利拿到系統資訊之後應該會有個叫做 version 的欄位,把裡面的值放在 query string 給我吧。
:::
:::spoiler Hint
>試著去想想看,伺服器是怎麼知道 request 是什麼版本的瀏覽器?
:::
## 解題思路
只要能知道伺服器是怎麼檢查的,就有方法可以通過它,原本的敘述裡面也有給關鍵字了
按照關卡說明,我們該怎麼做呢?只要把關卡要求的條件加入 header 就可以了
具體該怎麼做呢?
首先,在[工具][Tool]內把網址跟驗證資訊都先填好,再來在 header 裡面加上條件
```
X-Library-Number:20
user-agent:MSIE 6.0
```
>就是這麼簡單
>[name=lamacat]
發送Request,就會得到回應
```JSON
{"message":"success","version":"1A4938Jl7","owner":"lib","createdAt":"121290329301"}
```
只要將 version 回傳關卡,就通關啦
:::success
**# 通關 #**
限制這麼多都被你突破了,真有你的。要不要考慮以後來我們圖書館當工程師啊?下一關的 token 為:<font color="#dff0d8">{duZDsG3tvoA}</font>
:::
# 0x0A 第十關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv10?token={duZDsG3tvoA}
:::
:::info
**# 故事 #**
時間過得真快啊,今天是你在這邊幫忙的最後一天了。
我們來玩個遊戲吧?你有玩過猜數字嗎?
出題者會出一個四位數不重複的數字,例如說 9487。
你如果猜 9876,我會跟你說 1A2B,1A 代表 9 位置對數字也對,2B 代表 8 跟 7 你猜對了但位置錯了。
開始吧,把你要猜的數字放在 query string 用 num 當作 key 傳給我。
:::
:::spoiler Hint
>「把你要猜的數字放在 query string 用 num 當作 key 傳給我」就是在 URL 加上 &num=1234
就可以開始玩猜數字囉!不會玩猜數字的可以先去找猜數字怎麼玩
:::
## 解題思路
恭喜各位達到最後一關了,作者最後要玩個猜數字的遊戲,透過num這個參數來傳值,相信大家應該習慣用 GET 傳遞參數了XD
怎麼玩猜數字呢?
簡單來說,出題者會想出一個 4 位數字,然後玩家就是隨便猜 1-9 之間的數字。例如:1234
接下來,網頁會提示幾 A 幾 B,A 為正確的數在正確的位置上,B 為正確的數在不對的位置上
然後就是要去靠 A 和 B 的提示來猜出正確答案了。
>怎麼辣麼好玩
>[name=羽澤]
:::spoiler 答案
>**9613**
:::
:::success
**# 通關 #**
很開心在這裡的時光能有你一起陪伴,讓我的生活不再那麼一成不變,很開心認識你,下次有機會再一起玩吧!
The End,恭喜破關!
author: huli@lidemy.com
https://www.facebook.com/lidemytw/
附註:
原本遊戲只規劃到這邊,第十關就是最後一關。
後來我有加了一些新關卡但難度較高,如果你還想挑戰看看,下一關的 token 為 {IhateCORS}
:::
Extra Stage
===
>恭喜你解鎖了 Extra Stage,就跟音Game多一首歌給你打一樣興奮對吧((並沒有
>[name=羽澤]
>少年啊,成為神話吧
>[name=残酷な天使のテーゼ]
# 0x0B 第十一關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv11?token={IhateCORS}
:::
:::info
**# 故事 #**
嘿!很開心看到你願意回來繼續幫忙,這次我們接到一個新的任務,要跟在菲律賓的一個中文圖書館資訊系統做串連
這邊是他們的 API 文件,你之後一定會用到:https://gist.github.com/aszx87410/0b0d3cabf32c4e44084fadf5180d0cf4
現在就讓我們先跟他們打個招呼吧,只是我記得他們的 API 好像會限制一些東西就是了...
:::
:::spoiler Hint
>伺服器會檢查 origin 這個 header,只要騙過伺服器就行了
:::
## 解題思路
這關用到了新 [API][API-Ex],==為方便辨識,新 [API][API-Ex],後稱 [API-Ex]==
不要跟前面搞混用錯囉
首先,關卡說要先跟對方打聲招呼,但直接 GET 之後反而可能會得到
>您的 origin 不被允許存取此資源,請確認您是從 `lidemy.com` 送出 request。
>
這表示伺服器有採用 header 中的 origin 來做辨識,解法也很簡單
就在 header 加上一條 `origin` 來自 `lidemy.com` 就好啦
:::success
**# 通關 #**
Hello! 下一關的 token 為:<font color="#dff0d8">{r3d1r3c7}</font>
:::
:::spoiler 額外補充
這關 Request 的 Raw 格式,長這樣
```
GET /api/v3/hello HTTP/1.1
Host: lidemy-http-challenge.herokuapp.com
origin: lidemy.com
```
:::
# 0x0C 第十二關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv12?token={r3d1r3c7}
:::
:::info
**# 故事 #**
打完招呼之後我們要開始送一些書過去了,不過其實運送沒有你想像中的簡單,不是單純的 A 到 B 而已
而是像轉機那樣,A 到 C,C 才到 B,中間會經過一些轉運點才會到達目的地...算了,我跟你說那麼多幹嘛
現在請你幫我把運送要用的 token 給拿回來吧,要有這個 token 我們才能繼續往下一步走
:::
:::spoiler Hint
>你會發現你呼叫 API 以後它並沒有直接回傳結果,而是轉址到其他地方(或許中間還經歷不只一個地方)
仔細研究這些地方吧!
:::
## 解題思路
首先看到關卡這樣描述,再來透過 [API-Ex] **獲取運送 token** 後~~
可以發現,網址被轉跳後,得到了以下訊息
>我已經把運送要用的 token 給你囉,請你仔細找找
可以發現事情不簡單,根本沒看到任何像是 token 的東西呢www
關卡都這麼描述了,肯定別有用心
這時,我們打開瀏覽器的**開發人員工具 (DevTools)**,切換到**網路 (Network)** 的標籤頁
>使用自己習慣的瀏覽器即可,這裡使用 Chrome 操作
>[name=lamacat]
並且開啟**網頁重載 \ 重導向時不要清除log (Do not clear on page reload / navigation)**
這時,再重新透過 [API-Ex] **獲取運送 token**,可以發現取得了三個log分別是
deliver_token --> stopover --> deliver_token_result
deliver_token_result 就是我們看到的那段文字
deliver_token, stopover 都沒有實際的資料,但可以注意到 Header 的部分
都含有一個名為 **X-Lv13-Token** 的 Header,這就是我們要的
>要特別注意這關的通關 Token 是 ==十三== 關的唷,所以直接前往十三關
>[name=lamacat]
:::success
**# 通關 #**
Token 為:<font color="#dff0d8">{qspyz}</font>
:::
# 0x0D 第十三關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv13?token={qspyz}
:::
:::info
**# 故事 #**
太好了!自從你上次把運送用的 token 拿回來以後,我們就密切地與菲律賓在交換書籍
可是最近碰到了一些小問題,不知道為什麼有時候會傳送失敗
我跟他們反映過後,他們叫我們自己去拿 log 來看,你可以幫我去看看嗎?
從系統日誌裡面應該可以找到一些端倪
:::
:::spoiler Hint
>你有聽過代理伺服器 proxy 嗎?
:::
## 解題思路
透過 [API-Ex] **獲取系統日誌**,得到了一下訊息
>此 request 不是來自菲律賓,禁止存取系統資訊。
由於我們沒辦法直接修改 request 的來源位置
這關我們需要透過 proxy 來訪問,這樣就能正常取得資訊了
>建議使用 FireFox 瀏覽器,因為 Chrome 是設定本機電腦 proxy 的方式
>[name=lamacat]
:::success
**# 通關 #**
{ logType: 'token', value: '<font color="#dff0d8">{SEOisHard}</font>' }
:::
# 0x0E 第十四關
:::spoiler 關卡傳送門
https://lidemy-http-challenge.herokuapp.com/lv14?token={SEOisHard}
:::
:::info
**# 故事 #**
跟那邊的溝通差不多都搞定了,真是太謝謝你了,關於這方面沒什麼問題了!
不過我老大昨天給了我一個任務,他希望我去研究那邊的首頁內容到底是怎麼做的
為什麼用 Google 一搜尋關鍵字就可以排在第一頁,真是太不合理了
他們的網站明明就什麼都沒有,怎麼會排在那麼前面?
難道說他們偷偷動了一些手腳?讓 Google 搜尋引擎看到的內容跟我們看到的不一樣?
算了,還是不要瞎猜好了,你幫我們研究一下吧!
:::
:::spoiler Hint
>伺服器是怎麼辨識是不是 Google 搜尋引擎的?仔細想想之前我們怎麼偽裝自己是 IE6 的
:::
## 解題思路
>讓 Google 搜尋引擎看到的內容跟我們看到的不一樣?
這句話提供很大的提示,要知道 Google 不可能手動瀏覽網站,才來更新它們的資料庫
尤其世界上,成千上萬的網站
所以,最有可能的,就是透過機器人,簡單來說就是**網路爬蟲(Web Crawler)**
那麼 Google 的爬蟲機器人,會叫什麼呢?當然是離所當然的叫 **Googlebot** 囉
我們只透過 Google 就可以找到 Googlebot 的 user-agent
然後發送一個 request 夾帶 Googlebot 的 user-agent,這題就解開囉
:::success
**# 通關 #**
I Love Google
Google please rank our website higher, PLEASE!
token for lv15:<font color="#dff0d8">{ILOVELIdemy!!!}</font>
:::
:::spoiler 額外補充
這關 Request 的 Raw 格式,長這樣
```
GET /api/v3/index HTTP/1.1
Host: lidemy-http-challenge.herokuapp.com
user-agent: Googlebot/2.1
```
:::
# 0x0F 故事結局
:::info
還真的是我猜的那樣...不過還是要謝謝你幫我們完成這麼多任務!
今天是我在這職位的最後一天啦,之後我要升官了,應該就不用處理這麼多小事情了
這段期間感謝你的幫忙,我們以後有緣再相見啦!
The End,恭喜破關!
這次是真的破關了,這是最後一關,感謝你願意參與這個遊戲
也希望這遊戲是有趣的,希望你在玩的時候有學到東西
也歡迎把這個遊戲分享給親朋好友們
感謝!
我開了一個 gist,大家可以在這邊隨意留言,或是講一下破關感言
https://gist.github.com/aszx87410/1dbde92876ba253a45654988ca829ebb
最後,感謝所有幫我測試的朋友們
Author: huli@lidemy.com
https://www.facebook.com/lidemytw/
:::
恭喜各位結束這次體驗營((X
也感謝設計這些關卡的Huli大大 XD
((完結灑花
# 0xFE 結語與總結
>甚麼時候用curl打過全15關(X
>[name=羽澤]
>啊啊,上面這個人,隔天就完成它的願望了,詳細過程寫在新的writeup,在最上面
>[name=lamacat]
>啊就很閒咩((逃避工作
>[name=羽澤]
>本writeup單純防老,完成日期[time=Thu, Apr 30, 2020 9:20 PM]
>[name=lamacat]
>首先還是感謝作者,提供這麼好玩的遊戲,沒有遊戲就沒有此writeup
>實際解題花費的時間不長,但寫這writeup時間就不短了
>可能因為第一次寫wirteup吧,希望自己能力越來越好,能解的題目越來越多www
>
>下台一鞠躬
>[name=lamacat]