Nickブログ

セキュリティを中心に過ごしているNickのブログです。

UTCTF2021 Writeup見ながらやる(Web)

f:id:NickShadows:20210331110731p:plain

Oinker

f:id:NickShadows:20210331091439p:plain

とりあえずsubmit押しました。
f:id:NickShadows:20210331091937p:plain

とりあえずパスの数値を1から順に変えてみました。
f:id:NickShadows:20210331092015p:plain

f:id:NickShadows:20210331092026p:plain

これで変化なかったらブルートフォースしなきゃだめかなと思っていたんですが、早めにフラグが出てよかったです。

Writeupは特に必要無かったです。

Source it!

f:id:NickShadows:20210331092232p:plain

とりあえず適当にユーザとパスワード入力しました。
f:id:NickShadows:20210331092302p:plain

SQLインジェクションかなと思ってBurpのログを見に行ったらフラグがありました。
f:id:NickShadows:20210331092354p:plain

Writeupは特に必要無かったです。

Cutest Cookie Clicker Rip-Off

f:id:NickShadows:20210331092750p:plain

キャプチャ取ってたらメッセージが出ました。
スコア改ざんする系のようです。
f:id:NickShadows:20210331092823p:plain

Burp見てたらメッセージ取得用のAPIがあったので、とりあえず1000000にしてみました。
f:id:NickShadows:20210331092906p:plain

メッセージが変わらなかったので、1000001にしてみたらフラグが出ました。
f:id:NickShadows:20210331092942p:plain

Writeupは特に必要無かったです。

Fastfox

f:id:NickShadows:20210331093258p:plain

参考Writeup
www.youtube.com
以下メッセージが表示されていました。

Bob uses a really old version of Firefox, so I figured I'd show him how so slow it is by letting anyone submit JavaScript for him to run. Just put your JavaScript in below, and Bob will run it in his outdated browser.

古いFirefoxを使っているそうです。
だからどうしたのかという感じです。

とりあえずそのまま「console.log("hello world")」を入力してみました。
f:id:NickShadows:20210331093535p:plain

「alert(1);」にしたらエラーになりました。
???
f:id:NickShadows:20210331093631p:plain

Writeupに頼ります。
ヒントを見ているようなので、同じようにヒントを見ます。

f:id:NickShadows:20210331093814p:plain

f:id:NickShadows:20210331093804p:plain

f:id:NickShadows:20210331093845p:plain

f:id:NickShadows:20210331093858p:plain

jsshellをダウンロードして使ってみると、画面上と同じようなエラーが発生していました。
同じモジュールっぽいです。
これ、ヒントなしでどうやってたどり着くんでしょうか。
f:id:NickShadows:20210331094155p:plain

ググりポイントと何を調べるかがわからなかったのでWriteup。
公式ドキュメントを見てhelpを調べるんですね。

めっちゃずらずら出てきました。
f:id:NickShadows:20210331095737p:plain

地道にドキュメントを見るやつでした。
Writeupから探し方を学んで探してみます。

ありました。
いくつか検索用文字列を控えておいて、ドキュメント内で一気に探すということが出来そうです。
f:id:NickShadows:20210331100437p:plain

実行してみました。
普通にjsshellがおいてあるんだなって思いました。
f:id:NickShadows:20210331100553p:plain

f:id:NickShadows:20210331100627p:plain

catでフラグファイル開いて終了です。
f:id:NickShadows:20210331100657p:plain

f:id:NickShadows:20210331100718p:plain

Tar Inspector(未達成)

f:id:NickShadows:20210331101838p:plain

参考Writeup
ubcctf.github.io

debugmen.dev

ファイル生成のソースコードが提供されていました。

# creates a secured version of the filename
def secure_filename(filename):
    # strip extension and any sneaky path traversal stuff
    filename = filename[:-4]
    filename = os.path.basename(filename)
    # escape shell metacharacters
    filename = re.sub("(!|\$|#|&|\"|\'|\(|\)|\||<|>|`|\\\|;)", r"\\\1", filename)
    filename = re.sub("\n", "", filename)
    # add extension
    filename += '__'+hex(randrange(10000000))[2:]+'.tar'
    return filename


始まりから何がなんだかわかりません。
とりあえずヒントを全部見ます。
f:id:NickShadows:20210331102209p:plain

f:id:NickShadows:20210331102238p:plain

f:id:NickShadows:20210331102318p:plain

Writeupを見ると、「ファイル名にスペースを入れることで対策は回避できる」みたいなことが書いてあって、その発想はどこから来たんだろうと思いましたが、「実行されるコマンドはシングルクォーテーションで囲まれていない」というところからっぽいですね。

Writeup通り試したりしてみましたが、最終的にフラグを取ることが出来なかったです。

tarファイルを取り扱ったことが無かったので、良い勉強になりました。

おわりに

CTFは公式ドキュメントとの戦いなんだなということがわかったような気がします。

CTFが終わった後もサーバが立ち上がっていて助かりました。
Webの多くにWriteupがあるのも助かりました。

CTFコミュニティは優しいなと感じました。