Puzzle 2 - Hack Me If You Can
暇だったんで解きました。色々ヒントもらったりして答えにたどり着けたんでそのメモです
答えは直接は書きませんがその一歩手前まで書くのでネタバレ注意です。
URL:http://challenge-your-limits2.herokuapp.com/
このパズル(?)、curlコマンドを叩いていくとなんか答えに辿り着けるそうで。Puzzle1は「下位10%のダメなエンジニアにだけ解けないパズル」としてその当時は有名になったそうです。ちなみに僕は自力では解けませんでした。どうも、下位10%のダメなエンジニアです。
では早速解いていこうと思います。
サイトにアクセスしてみると、こんな文字が。
Hack Me If You Can
「お前が出来るもんなら俺をハッキングしてみろよ」とのことです。ほーん、やってやろうでないの。
で、その文字の下にはこう記述してあります。
call/my/APIs
で、これがクリック出来るようになってる。クリックしてみるとgifが出てきましたね。gifを見てると、サイト名の最後にcall/my/APIsをつけてcurlでアクセスしてみろって言ってる感じなんでやってみます。
$ curl http://challenge-your-limits2.herokuapp.com/call/my/APIs
結果はこうなりました
{"error":"Ok. Let's get started! End Point is correct. But HTTP Method should be..."}
通りました。でもHTTPメソッドが違うと言われてます。curlでは -X [methodname] とするとHTTPメソッドを指定します(デフォルトはGET)。で、残り全部のHTTPメソッド(POST,PUT,DELETE)を試してみると…
$ curl -X DELETE http://challenge-your-limits2.herokuapp.com/call/my/APIs {"message":"Well done! haha! Surprised? Yeah, the answer was DELETE. Ok. Next === /c2_users/:id/hacker_apply"}
なにわろてんねん。なんと答えはDELETEメソッドでした。では指示に従って勧めていきます。サイトURL末尾に/c2_users/:id/hacker_applyをつけろっていうのでやります。
$ curl http://challenge-your-limits2.herokuapp.com/c2_users/:id/hacker_apply {"error":"Please authenticate using Basic Auth with your username and password. You want a clue? Shout out 'help/me/out'"}
Basic AuthとはBasic認証のことです。お前のusernameとpasswordで認証してくれってことでしょうか。でも、usernameとpasswordなんて与えられてない。うーむ。
エラーメッセージの"Shout out 'help/me/out'"を試してみようと思います。
$ curl http://challenge-your-limits2.herokuapp.com/help/me/out {"message":"By the way, Have you already registered? This is the clue only for REGISTERED user. You should have your id before you check the clue. If you don't, go to /c2_users/ and register. Hey, Registered users! Here you go. === bit.ly/1T8gVdG === You don't know about 'bit.ly'? Google it!"}
go to /c2_usersと言われたんで行きます。
$ curl http://challenge-your-limits2.herokuapp.com/c2_users {"error":"GET? No. No."}
GETメソッドじゃダメだと。じゃあPOSTで行ってみます
$ curl -X POST http://challenge-your-limits2.herokuapp.com/c2_users {"error":"Validation Error - [:username, \"can't be blank\"]"}
usernameが空白だと言われました。ではリクエストを送ってみようと思います。オプションで-dとするとPOSTメソッドでリクエストを送ってくれるんでやってみようと思います。-dの後には"[key]=[value]"とします。ここでは[key]をusername,[value]をmarimoとして送ってみます。
$ curl -X POST -d "username=marimo" http://challenge-your-limits2.herokuapp.com/c2_users {"error":"Validation Error - [:email, \"can't be blank\"]"}
emailが無いと言われました。お前はどこまで求めるんじゃい。テキトーにemailをでっちあげて入力します。
$ curl -X POST -d "username=marimo" -d "email=fdafd@ff.com" -d "password=marimo" http://challenge-your-limits2.herokuapp.com/c2_users {"id":2371,"username":"marimo","email":"fdafd@ff.com","password":"hTNE5DC4qsW2BCkq","comment":null,"created_at":"2018-04-22T01:37:12.390Z","updated_at":"2018-04-22T01:37:12.390Z"
おっ。idとusernameとpasswordが入手できました。curlでBasic認証を行う場合、オプションは --user [name]:[password]とします。
$ curl --user marimo:hTNE5DC4qsW2BCkq http://challenge-your-limits2.herokuapp.com/c2_users/:id/hacker_apply {"error":"Your id is a bit weird. Can you check it?"}
突破あああ…あれ?idが奇妙だと言われてしまいました。うーん。ここで行き詰まってしまい他サイトの手助けを借りた所、:idに自分のidを入力するみたいです。悔じい゛。
ということで
$ curl --user marimo:hTNE5DC4qsW2BCkq http://challenge-your-limits2.herokuapp.com/c2_users/2371/hacker_apply {"message":"Awesome! Can you come over here? === R29vZCBqb2IhISBQbGVhc2UgYWNjZXNzIHRvIHRoZSB1cmwgZnJvbSB5b3VyIHdlYiBicm93c2VyLiA9PT0gXApodHRwOi8vY2hhbGxlbmdlLXlvdXItbGltaXRzMi5oZXJva3VhcHAuY29tL3dpbm5lcl9jb21tZW50cy9YQ1VkbTlSa1B2bHc0N1NI You want a clue? Shout out 'give me a clue'"}
突破出来ました。===以降の謎の文字列はbase64変換後の文字列です(Basic認証とbase64変換はもうセットって感じです)。これをデコードしてあげるとメッセージが出てくるのでそれに従うと終わりです。
お疲れ様でした。