脆弱性を持つLinuxの権限昇格手法を学ぶ【TryHackMe-Linux PrivEsc Arena -Writeup1/3】

linuxのシェル画面
※当サイトはプロモーションが含まれています

こんにちは、ぎんたです。

今回はTryHackMeで提供されている「Linux PrivEsc Arena」というルームの攻略の過程を記事にしています。

ルームはこちらから無料でアクセスできます「Linux PrivEsc ArenaのURL」。

今回のルームはLinuxの権限昇格がテーマとなってます。

Taskが全部で17個あり長くなりますので、何回かに分けて記事にしたいと思います。

今回ご紹介するTaskは以下のものです。

  • Task3 カーネルExploit
  • Task4 保存されたパスワード(設定ファイル)
  • Task5 保存されたパスワード(History)
  • Task6 弱いファイルパーミッション
  • Task7 SSH Keys
  • Task8 Sudo(Shell Escaping)

カーネル Exploitを使った権限昇格の方法を知りたい方

サーバで確認できる設定ファイル、実行したコマンドの履歴からroot権限のパスワードを発見する方法に興味がある方

ファイルのパーミッションの設定不備からの権限昇格の方法に興味がある方

CTFに興味のある方

が今回の対象です。

無料でアクセス可能なので、試してみたい方はぜひやってみてください。

目次

前提条件の説明

Linuxの権限昇格がテーマとなっているため、すでにユーザ権限で被害サーバに侵入している状態となっています(ユーザの認証情報が判明している)。

侵入先のサーバを探索して設定の不備や脆弱性などを調査し、それぞれのTaskごとで実際に権限昇格をしていく方法を解説していきます。

Linuxの権限昇格(Task3 カーネルexploit)

ここでは、Linuxのカーネルバージョンの既知の脆弱性を利用した権限昇格について解説します

今回は既知の脆弱性を調査するために、「linux-exploit-suggester」というツールを使っていきます。

実際は攻撃者が準備したサーバや公開サーバからツールをダウンロードすることが多いかなと思いますが、親切にもすでに侵入先のサーバに該当のツールがある状態です。

サーバ上でそのまま実行します。

/home/user/tools/linux-exploit-suggester/linux-exploit-suggester.sh

結果を確認すると、Dirty COWの脆弱性があることが判明します。

ローカル環境より読み取り専用メモリのマッピングに対して書き込みが可能となる脆弱性で、「copy-on-write(COW)」を破壊することで権限の昇格が可能になるという。

出典:Security NEXT
dirtycowの脆弱性発見

Dirty COWのexploitツールもすでにサーバ内にあるので、gccコマンドでコンパイルして実行します。

実施したコマンド:

gcc -pthread /home/user/tools/dirtycow/c0w.c -o c0w

./c0w

dirtycowのexploit実行

1-2分ほど経過したところスクリプトが終了しました。

passwdコマンドを打つことでrootシェルを取得できました

task3のroot取得

このexploitは/etc/passwdファイルをシェルを起動するものに置き換えるものです。

/etc/passwdファイルはSUIDが付与されているので、ファイルの所有者の権限で実行されます。

そして/etc/passwdファイルの所有者はrootですので、起動したシェルはroot権限のものとなります。

Linuxの権限昇格(Task4 保存されたパスワード「設定ファイル」)

権限昇格に利用できそうな認証情報を探索する内容となっています。

まず、ユーザのディレクトリの中身を確認すると、「myvpn.ovpn」という興味深いファイル名があるのを確認しました。

内容を見ると、auth-user-passの箇所で「auth.txt」というファイルを参照しているのが分かりました。

「auth.txt」のファイル内を確認すると、userアカウントのパスワードを確認できました

task4でauth.txtからパスワード取得

「設定ファイル内にある権限昇格に利用できそうな認証情報を見つける」という演習でした。

Linuxの権限昇格(Task5 保存されたパスワード「History」)

今度はユーザがbash実行時に入力したコマンドの履歴を確認し、権限昇格に利用できそうな認証情報を探索する内容となっています。

bash実行時に入力したコマンドの履歴は「.bash_history」に記載されています。

ファイルの内容を確認し、passwでパスワードと思われる該当箇所を抽出します。

cat ~/.bash_history | grep -i passw

結果を確認すると、mysqlでrootユーザでの接続を試みているコマンド履歴がありました

task5でhistoryファイルからパスワード取得

-p以降の箇所にrootユーザのパスワードを確認できました。

このタスクも認証情報を発見して終了となります。

Linuxの権限昇格(Task6 弱いファイルパーミッション)

このタスクでは、ファイルのパーミッションの設定不備を悪用します。

ユーザのパスワードハッシュを格納している「/etc/shadow」ファイルのパーミッションを確認します。

ls -la /etc/shadow

-rw-rw-r– 1 root shadow 809 Jun 17  2020 /etc/shadow

shadowファイルの内容が誰でも読める状態になっています

shadowファイルの中身

このように、rootのパスワードハッシュを確認できます

通常はrootユーザのみshadowファイルを読めます。

「/etc/passwd」ファイルの内容も同様に誰でも読めるので、両方のファイルの内容を攻撃側の端末にコピーしておきます(以下の作業は攻撃側の端末で実施)。

passwdファイルはユーザアカウント情報が記載されていて、誰でも読めますが通常rootユーザのみが書き込みできます。

vim passwd #コピーしたpasswdファイルの内容を書きこむ

vim shadow #コピーしたshadowファイルの内容を書きこむ

次にunshadowコマンドを使ってpasswdファイルとshadowファイルを結合します。

unshadow passwd shadow > unshadowed.txt

最後にhashcatを使ってパスワード解析を行います。

使用する辞書ファイルはAttackBoxにすでにある「rockyou.txt」を使用しました。

hashcat -m 1800 unshadowed.txt /usr/share/wordlists/rockyou.txt -O

なお、「-m」でモードを指定しています。ここでは、1800に指定しています。

hashcatのGeneric hash typesのURL」

数分後にパスワードが判明しました。

このTaskではrootのパスワードを解析して終了となります。

Linuxの権限昇格(Task7 SSH Keys)

root権限でSSH接続ができるよう、侵入したサーバ内で利用可能なSSHキーを探します。

以下のコマンドで「authorized_keys」「id_rsa」を探索します。

find / -name authorized_keys 2> /dev/null

find / -name id_rsa 2> /dev/null

/backups/supersecretkeys/id_rsa

2> /dev/nullで大量に出る標準エラーを出力させないようにしています。

今回の探索で「/backups/supersecretkeys/id_rsa」が見つかりました。

ファイルのパーミッションを確認すると、誰でも読み書き可能で所有者がrootになっています

TCM@debian:~$ ls -la /backups/supersecretkeys/id_rsa

rwxrwxrwx 1 root root 2590 Jun 17  2020 /backups/supersecretkeys/id_rsa

またファイルの内容を確認すると、SSHの秘密鍵であることが分かりました。

攻撃側の端末でid_rsaという名前のファイルに秘密鍵の内容をコピーしました。

以下のコマンドを攻撃側の端末で実行しコピーしたSSH鍵でサーバに接続したところ、rootのシェルを取得できました。

chmod 400 id_rsa

ssh -i id_rsa root@10.10.49.166

Linuxの権限昇格 (Task8 Sudo「Shell Escaping」)

rootで実行できるコマンドを以下のコマンドを使って調査します。

sudo -l

多くのコマンドがパスワード無しでroot権限で実行できそうです。

権限昇格に利用できそうなコマンドは数多くありますが、今回はVimを使っていきます

GTFOBinsのサイトへ移動して、Vimを調査します。

こちらが調査したURLです「GTFOBinsのURL」。

一番上に表示された、「sudo vim -c ‘!sh’」のコマンドを使用してみます

コマンドを実行することでrootシェルを取得できました。

また、GTFOBinsについて解説している別の記事もありますので、よろしければご覧ください。

まとめ

今回はLinuxの権限昇格の方法をいくつか解説しました。

解説したTaskは6つあり、以下のものでした。

振り返り
  • Task3 カーネルexploit
  • Task4 保存されたパスワード(設定ファイル)
  • Task5 保存されたパスワード(History)
  • Task6 弱いファイルパーミッション
  • Task7 SSH Keys
  • Task8 Sudo(Shell Escaping)
ぎんた

残りのTaskは次回の記事で解説するよ。

こころ

後11個のTaskがあるのか~、ちょっと多いけど頑張ろうと。。

今回の記事が参考になれば幸いです。

以上、ぎんたでした。

サイバーセキュリティを学ぶ上で必要な攻撃と解析に関する他の記事は、以下のリンクで確認できます。

学習に関しましては、以下のセキュリティの勉強法、おすすめの学習本・動画の記事が多くの方に読まれています。

資格の記事については以下の記事がおすすめです。

ITエンジニアへの転職については以下の記事がおすすめです。

その他学習・転職関連に関しましては、以下の記事もあわせて読まれています。

ぜひご覧ください!

よかったらシェアしてね!
目次