HTB Oopsie - メモ
bugtrackerという入っているアプリの悪用的なところから訳が分からなくなって、色々調べたら多分こうなんじゃない!?って何となく分かった気になっているのでそのメモ
robertになれたところから
python3 -c 'import pty;pty.spawn("/bin/bash")'
をするのはコマンドインタプリタだと使いにくいから/bin/bashを使えるようにするんだよってことだった気がする(理由が書いてあった記事どこで見かけたか忘れた)
権限確認
$ id
->(略)groups=1000(robert),1001(bugtracker)
bugtrackerというグループに属していることが分かる。
↓
bugtrackerが持っているファイルが無いか見てみる
$ find / group bugtracker 2>/dev/null
findコマンド
2>/dev/null
1は標準出力、2はエラー出力。エラー出力を/dev/nullへ、標準出力のみ標準出力されるのでエラーになったものが出力されないので見やすい
SUID
そのファイルを持っている人の権限で実行できちゃうわよ~の意
rootが所有するファイルだったら、rootとして実行できる
bugtrackerの確認
$ ltrace bugtracker
setuid(1000)していること、cat /root/reports/ユーザ入力
としていることが分かる
(この1000はrobertのgroupの1000なのかな)
このことから
- catに渡される値が相対参照なこと
- /bin/catと指定していないこと
の2つが分かる
1. catに渡される値が相対参照なこと の悪用
robert@oopsie:/$ bugtracker
->Provide Bug id:
../root.txt
->今回のrootkey
相対参照を利用して、root.txtにアクセスできる
(rootとしてcat /root/report/../root.txt
しているのでこれが出来る)
2. /bin/catと指定していないこと の悪用
(『設定のマーク>字幕>英語(自動生成)>もう一回字幕>自動翻訳>日本語』すると話していることが日本語に翻訳されるよ!!!)
/bin/catと指定されていない場合、catと入力された時にcatは「はて、私はどこで実行すればいいんじゃろ?」となって、環境変数を順に当てはめていく的なことをするみたい(超意訳)
$ echo $PATH
->/usr/local/sbin:/usr/local/bin:(略):/bin:(略)
「/usr/local/sbin/catは無いなあ。/usr/local/binは無いなあ。・・・/bin/catがあったわ!/bin/catの指示は・・・なるほどやで!ファイル見るで」的な感じ(超意訳)
なので、/binにたどり着く前の箇所にcatの別の指示を作ってしまえばそっちを実行してくれる
↓
/tmp/catに「シェルを起動する」という指示を作って環境変数の最初に/tmpを入れればbugtracker起動したときに/tmp/catが実行されてrootのシェルが完成する
-- catファイル作る
/tmp $ touch cat
-- ファイルの中身を/bin/shにする
/tmp $ echo "/bin/sh" > cat
-- catに実行権限を付与
/tmp $ chmod +x cat
-- 権限付与できてるか確認
/tmp $ ls -l cat
->-rwxrwxr-x 1 root・・・
-- /tmpを環境変数に追加
$ export PATH=/tmp:$PATH
-- 環境変数追加できてるか確認
/tmp $ echo $PATH
-> /tmp:usr/local・・・
-rwxrwxr-xのやつ
誰でも実行できる状態になってる
これでbugtrackerを実行してみると
- bugtracker実行
- ->バグID入力してね
- 2
- まずrootとして実行するようにするで(setuid(1000))
- 「cat /root/report/2」したいで
5-1. 環境変数チェックや。/tmp/catは・・・あるで!これを実行するで!
5-2. 「/tmp/cat」の指示は「/bin/sh」やな!「root権限で/bin/shするで!」 - rootのシェル完成
的な感じで権限昇格できた~!
という感じだと・・・思う。。
Discussion