--- lang: zh-tw tags: CTF --- HTTP GAME:Lidemy HTTP Challenge 進階實戰 writeup --- curl版 === 遊戲網址:https://lidemy-http-challenge.herokuapp.com 普通版 writeup:https://hackmd.io/2xI__kA_TO69EHuPm63uFQ # 0xFF 前言 在上一篇 writeup 最下面,說過要用 curl 打通全 15 關,所以來還願了XD 剛好也可以來做 curl 的應用練習 推薦是先通過普通通關方式再來嘗試此篇教學,不然就是先去看看普通版的writeup,因為那邊比較仔細解釋是如何運作的。 >人就是各種作死 >[name=羽澤] # 0xFE curl簡介 curl 是 Linux上用來瀏覽、上傳、下載透過 HTTP 傳遞的資料的工具,可以做的事情很多,有興趣可上網爬文,下面提供本次實作用到的網站。 [使用 curl 指令測試 REST 服務](https://www.iteye.com/blog/usench-2268844) [curl 指令基本介紹與常見用法](https://blog.techbridge.cc/2019/02/01/linux-curl-command-tutorial/) [Linux curl命令使用代理、以及代理種類介绍](https://aiezu.com/article/linux_curl_proxy_http_socks.html) [linux下的curl命令](https://www.itread01.com/content/1548503847.html) 提供一下懶得爬文的朋友們在本篇會用到的參數簡介 ```bash -X <Method> GET == 透過<Method>傳送 == POST DELETE PATCH -d "<data:value>" == 傳送資料,多筆資料請用&分隔 == -x <ip:port> or --proxy <ip:port> == 透過指定proxy傳送 == -H "<Header>" == 設定Header的值 == --user-agent "<user-agent>" == 設定user-agent == -i == 顯示網頁標頭和Html碼 == ``` >在Linux中,參數的大小寫有不一樣的功能,要注意 >[name=羽澤] # 0x00 故事開頭 ### 解題思路 謝謝各位,還沒開始就遇到問題QQ 因為 curl 沒辦法解析 token 的大括號,所以為了解決弄了一段時間 問了 Google 之後,發現只要把**大括號{ } url encode** 即可 ```bash 指令: curl "https://lidemy-http-challenge.herokuapp.com/lv1?token=%7BGOGOGO%7D" ``` >感謝萬能的 Markdown,害我一直貼上超連結 >[name=羽澤] # 0x01 第一關 ### 解題思路 第二關叫我們把 name 參數帶上,跟普通版瀏覽方式一樣,所以很快就通過了。 ```bash 指令: curl "https://lidemy-http-challenge.herokuapp.com/lv1?token=%7BGOGOGO%7D&name=Yusawa" ``` # 0x02 第二關 想想還是把進入關卡的指令附一下好了 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv2?token=%7BHellOWOrld%7D" ``` ### 解題思路 這題是要你找書的 id,所以跟上一題一樣方式傳值就好,但是要記得把 name 改成 id ```bash 指令: curl "https://lidemy-http-challenge.herokuapp.com/lv2?token=%7BHellOWOrld%7D&id=56" ``` # 0x03 第三關 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv3?token=%7B5566NO1%7D" ``` ### 解題思路 這關就要用到 POST 還有他附的 [API](https://gist.github.com/aszx87410/3873b3d9cbb28cb6fcbb85bf493b63ba) 了 我們可以透過參數 `-X` 來指定 HTTP Method,這裡我們把 Method 指定為 POST 然後透過參數 `-d "data1=value1&data2=value2"` 來傳我們要 POST 過去的資料 ```bash 指令: curl -X POST -d "name=大腦喜歡這樣學&ISBN=9789863594475" "https://lidemy-http-challenge.herokuapp.com/api/books" ``` 這樣就可以獲得書的id了,回傳給網頁領取下一關的token。 ```bash 指令: curl "https://lidemy-http-challenge.herokuapp.com/lv3?token=%7B5566NO1%7D&id=1989" ``` # 0x04 第四關 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv4?token=%7BLEarnHOWtoLeArn%7D" ``` ### 解題思路 這一關他說幫他找書名有"**世界**",並且是++村上春樹++的書,所以我們一樣透過 API 的指示 GET 他所有的書籍,但是如果直接搜尋"世界"的話,curl 會無法轉碼,所以一定要 [URL encode](https://www.urlencoder.org/),encode 後即可查詢成功。 ```bash 指令: curl https://lidemy-http-challenge.herokuapp.com/api/books?q=%E4%B8%96%E7%95%8C ``` >真的會被自己蠢死,明明 **大括弧{ }** 就要encode了,我怎麼認為中文不用呢? >[name=羽澤] 獲得資料後,就可以把 id 回傳給網頁了。 ```bash 指令: curl "https://lidemy-http-challenge.herokuapp.com/lv4?token=%7BLEarnHOWtoLeArn%7D&id=79" ``` # 0x05 第五關 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv5?token=%7BHarukiMurakami%7D" ``` ### 解題思路 這題他要求的是刪除資料,我們一樣透過 API 來得知他用 **DELETE** 的 Method 來刪除資料,所以我們用 `-X DELETE` 來達成他的要求。 ```bash 指令: curl -X DELETE https://lidemy-http-challenge.herokuapp.com/api/books/23 ``` 然後就可以獲得token了 >有人問說為什麼有時候網址會加"",有時候不會 >傻孩子,就是怕他會誤判R >[name=羽澤] # 0x06 第六關 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv6?token=%7BCHICKENCUTLET%7D" ``` ### 解題思路 這邊開始就要使用新的 [API](https://gist.github.com/aszx87410/1e5e5105c1c35197f55c485a88b0328a) 了,他要求說你要嘗試登入並給他 email,但是帳號密碼的傳遞是要透過 Header 的,所以要準備 [base64 encode](https://www.base64encode.org/) 過後的帳號密碼,之後照著 API 給的提示 Header的表示會變為**Authorization: Basic YWRtaW46YWRtaW4xMjM=** 之後使用 `-H "Header Data"` 參數來傳遞改好的 Header 即可 ```bash 指令: curl -H "Authorization: Basic YWRtaW46YWRtaW4xMjM=" https://lidemy-http-challenge.herokuapp.com/api/v2/me ``` 獲得 email 之後,一樣回傳給伺服器即可獲得 token。 ```bash 指令: curl "https://lidemy-http-challenge.herokuapp.com/lv6?token=%7BCHICKENCUTLET%7D&email=lib@lidemy.com" ``` # 0x07 第七關 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv7?token=%7BSECurityIsImPORTant%7D" ``` ### 解題思路 這關一樣是要求刪除書籍,所以一樣是帶 `-X DELETE` 的參數,但是不一樣的是這次是要攜帶帳號密碼 Header 的。 ```bash 指令: curl -X DELETE -H "Authorization: Basic YWRtaW46YWRtaW4xMjM=" https://lidemy-http-challenge.herokuapp.com/api/v2/books/89 ``` 這樣就可以獲得token進入下一關了。 # 0x08 第八關 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv8?token=%7BHsifnAerok%7D" ``` ### 解題思路 這關是要求修改書籍 ISBN,但是他說他只記得書名只有一個"**我**",結尾是 7,要修正成 3。 所以我們一樣透過 [URL encode](https://www.urlencoder.org/) 去把"**我**"給轉成URL編碼,這樣就可以去查書名了 ```bash 指令: curl -H "Authorization: Basic YWRtaW46YWRtaW4xMjM=" https://lidemy-http-challenge.herokuapp.com/api/v2/books?q=%E6%88%91 ``` 可以看到回傳符合的資料,就可以透過API提供的Method PATCH去修改,所以我們使用 `-X PATCH -d "name=data&ISBN=value"`去修改他的資料。 ```bash 指令: curl -X PATCH -d"name=日日好日:茶道教我的幸福15味【電影書腰版】&ISBN=9981835423" -H "Authorization: Basic YWRtaW46YWRtaW4xMjM=" https://lidemy-http-challenge.herokuapp.com/api/v2/books/72 ``` 就可獲得下一關token # 0x09 第九關 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv9?token=%7BNeuN%7D" ``` ### 解題思路 這一關是要拿取API裡面的回傳值,題目內有提到Header內要攜帶X-Library-Number:20的參數,跟[IE6的user-agent](https://developers.whatismybrowser.com/useragents/parse/2045-internet-explorer-windows-trident),所以我們利用參數` --user-agent "agent" `跟 `-H "X-Library-Number:20"`來傳遞題目要求的值。 ```bash 指令: curl --user-agent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" -H "X-Library-Number:20" -H "Authorization: Basic YWRtaW46YWRtaW4xMjM=" https://lidemy-http-challenge.herokuapp.com/api/v2/sys_info ``` >Header好像不能用&分隔兩個參數,所以多下了個 -H >[name=羽澤] 之後就可以看到他傳回來的資料了,把version填上後回傳給伺服器即可過關。 ```bash 指令: curl "https://lidemy-http-challenge.herokuapp.com/lv9?token=%7BNeuN%7D&version=1A4938Jl7" ``` # 0x0A 第十關 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv10?token=%7BduZDsG3tvoA%7D" ``` ### 解題思路 基礎篇最後一關了w,就是猜數字,猜法我都寫在[普通版](https://hackmd.io/2xI__kA_TO69EHuPm63uFQ)裡面了,自己去找吧((喂 ```bash 通關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv10?token=%7BduZDsG3tvoA%7D&num=9613" ``` Extra Stage === 又到了Extra的環節了,再四關,加油ww # 0x0B 第十一關 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv11?token=%7BIhateCORS%7D" ``` ### 解題思路 又換了新的[API](https://gist.github.com/aszx87410/0b0d3cabf32c4e44084fadf5180d0cf4),他說先去打個招呼,但是API會限制些東西,先不管,連進去看看再說 ```bash 指令: curl "https://lidemy-http-challenge.herokuapp.com/api/v3/hello" ``` 他會說origin不被允許此資源,請透過 <span>lidemy.com</span> 送出 request,所以我們透過` -H "Header" `加入`origin:lidemy.com`的參數。 ```bash 指令: curl -H "origin:lidemy.com" "https://lidemy-http-challenge.herokuapp.com/api/v3/hello" ``` 就可以獲得下一關的token了 # 0x0C 第十二關 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv12?token=%7Br3d1r3c7%7D" ``` ### 解題思路 這關他說替他拿取運送用的token,所以透過API提示,我們連去獲取token的網頁,但是他是跳轉的網頁,如果直連他只會說跳轉往其他網址,所以要加個 -i 來讀他的隱藏標頭與原始碼。 ```bash 指令: curl -i "https://lidemy-http-challenge.herokuapp.com/api/v3/deliver_token" ``` 之後即可在標頭內看到token。 # 0x0D 第十三關 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv13?token=%7Bqspyz%7D" ``` ### 解題思路 這關他說要自己去尋找菲律賓主機的log,所以我們就透過API提示的連過去。 ```bash 指令: curl "https://lidemy-http-challenge.herokuapp.com/api/v3/logs" ``` 但是傳送過去說非菲律賓地區的連線,所以我們要透過跳proxy的方式連到那個網站,於是使用 `--proxy ip:port` 去跳到[菲律賓的proxy](https://www.proxydocker.com/zh/proxylist/country/Philippines)瀏覽 ```bash 指令: curl --proxy 122.55.250.242:8080 https://lidemy-http-challenge.herokuapp.com/api/v3/logs ``` >試了超多個proxy才找到一個能用的,不要把已經過期的放在網路上啊! >[name=羽澤] 之後就能拿到token了。 # 0x0E 第十四關 ```bash 進關指令: curl "https://lidemy-http-challenge.herokuapp.com/lv14?token=%7BSEOisHard%7D" ``` ### 解題思路 這次是真的最後一關了ww,他要求說可以讓Google一搜關鍵字就找到網站,所以我們透過改user-agent的方式,來讓[google bot](https://support.google.com/webmasters/answer/1061943?hl=zh-Hant)抓取,讓網頁得以出現在搜尋榜上。 ```bash 指令: curl --user-agent "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "https://lidemy-http-challenge.herokuapp.com/api/v3/index" ``` 之後就成功獲得結局token了。 # 0x0F 故事結尾 ```bash 結局指令: curl "https://lidemy-http-challenge.herokuapp.com/lv15?token=%7BILOVELIdemy%21%21%21%7D" ``` >到結尾還不忘用URL encode搞你一下幹 >[name=羽澤] 好了,我還願結束了www 這也是個練習curl的好機會,順便紀錄一下防老防失憶ww 我們下個writeup見了,掰掰
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up