こんにちは、のみぞうです。
picoCTF2022に参加しました。
難しい問題は全然解けてないですし、インターネット上にはもっとつよつよの方の解説も上がってくると思うので、こういうとき私がWriteUP書く意味あるのか…?と疑問に思ったりもしますが自分用の備忘録ですと言い訳しながら書く。
Web Exploitation
Includes
jsファイルとcssファイルをインクルードしてきてることがわかるので、開発者ツールで開くとフラグの破片が得られる。組み合わせて回答。
Inspect HTML
ソースを見たら普通にコメントアウトで書いてあった、前問と同じでは…?
Local Authority
一瞬SQLインジェクションかと思ったけどjsファイルに直接IDとパスワードが書いてあった。
Search source
WEBサイトを閲覧したけどソースのパッと見ではどこを見たらいいかわからなかった。探すの面倒くさいときはこうしてこうじゃ。
# サイトごとローカルにダウンロード
wget -m http://saturn.picoctf.net
# Grepで中身をまとめて検索
grep -r "picoCTF" * 130 ⨯
css/style.css:/** banner_main picoCTF{1nsp3ti0n_0f_w3bpag3s_227d64bd} **/
Forbidden Paths
絶対パスがフィルタされているなら相対パスで書けばいいじゃないとマリー・アントワネットは言いました(言ってない)わかりやすくディレクトリトラバーサルの問題。
Power Cookie
CookieのisAdminカラムの値を1に書き換える
Roboto Sans
タイトルからrobots.txtだろうとアタリをつけて見に行く
なにやらbase64の値が出てきたのでデコードするとフラグのパスになる
Secrets
とりあえずソースを見るとsecretというディレクトリがあることがわかる
secret直下にダイレクトアクセス!(遊戯王風)するとその下にhiddenディレクトリがあることがわかる
hiddenディレクトリにいってみると次はsuperhiddenディレクトリがあることがわかる
superhiddenに行ってみた。一瞬見えなくて「えっ?」となったけどものすごい古典的な手法で隠してあるだけだった…
SQL Direct
Launch InstanceをクリックするとDBに接続できるようになる。
テーブル一覧を探す
select * from pg_tables;
flagsテーブルがある(見終わったらqキーで画面閉じる)
select * from flags;
SQLiLite
アクセスしてみるとよくあるログイン画面
基本のSQLインジェクションを試す
a' or 1=1 --
ログインできたみたいなのに???と一瞬わかんなかったけどソース見たら書いてありました。
Cryptgraphy
basic-mod1
問題文より、与えられた各数値のmod37を以下の文字セットにマッピングする問題。0-25はアルファベット(大文字)、26-35は10進数、36はアンダースコア。言われたとおりに愚直にPython書いた。スマートな書き方はよくわからない。
f = open('message.txt') #問題文読み込み
messages = f.read().split()
messages_i = [int(s) for s in messages]
print('picoCTF{',end="")
for i in messages_i:
i = i % 37
if i <= 25:
i = i + 65
chr_s = chr(i)
if 26 <= i <= 35:
i = i + 22
chr_s = chr(i)
if i == 36:
chr_s = '_'
print(chr_s,end="")
print('}',end="")
f.close()
# picoCTF{R0UND_N_R0UND_8C863EE7}