COMMAND INJECTION
Apa Itu Commad Injection ?
Command Injections (injeksi perintah) adalah sebuah bentuk serangan dimana tujuan penyerang adalah untuk mengeksekusi perintah sewenang-wenang di sistem operasi web server melalui aplikasi web yang rentan. serangan ini bisa terjadi ketika aplikasi berbasis web menyediakan kolom input yang rentan dan tidak aman kepada pengguna untuk memasukkan data/perintah berbahaya.
Selama serangan command injection, perintah diinput oleh penyerang biasanya dijalankan berdasarkan kerentanan dari aplikasi web tertentu. Serangan command injection terjadi sebagian besar karena lemahnya atau tidak memadainya validasi dari input. Injeksi SQL dan XSS (cross-site scripting) adalah dua bentuk serangan command injection yang spesifik.
Serangan injeksi, seperti SQL injection dan OS injection, terjadi ketika data yang tidak dipercaya dikirim ke intepreter sebagai bagian dari perintah atau kueri. Data yang dikirim dapat mengelabui intepreter untuk mengeksekusi perintah yang tidak diinginkan atau mengakses data tanpa otorisasi yang tepat.
Pengujian untuk Command Injection dimungkinkan dengan menambahkan perintah ke salah satu dari karakter berikut:
1. ;
2. |
3. &
4. &&
5. $()
Cara Kerja Command Injection
Dari source code diatas dapat dilihat jika saat melakukan perintah whois
tidak ada filter apapun sehingga string apapun dapat masuk kesana.
Pada shell UNIX, perintah dapat disuntikkan dalam beberapa cara./ Menggunakan titik koma sebagai pembatas perintah:
cd ~; ls
/ Menggunakan ampersand:
cd ~ && ls
/ Menggunakan operator|
bash untuk merangkai perintah bersama:
ls | grep filename
Penyerang bisa menggunakan semua cara itu untuk menyuntikkan dan mengeksekusi perintah:
/whois.php?domain=www.google.com;cat /etc/passwd
/whois.php?domain=;whoami; id
Cara Mencegah Command Injection
Ada beberapa cara untuk menghindari dan / atau mengurangi kerentanan Command Injection. Dalam urutan kepentingan, mereka adalah:
1. Jangan Melakukan Exec
Ke Sistem Operasi Jika Itu Dapat Dihindari
Ini adalah solusi terbaik jika dapat diadopsi karena menghilangkan risiko. Berusaha keras untuk melakukan pekerjaan aplikasi di dalam aplikasi.
2. Validasi Input
Semua input ke aplikasi yang belum divalidasi sebelumnya harus diperiksa untuk memastikan memenuhi ketentuan aplikasi. Gunakan “whitelist validation”, yang berarti bahwa aplikasi memverifikasi bahwa input sesuai dengan apa yang diterimanya dan menolak segala sesuatu yang lain. Validasi Input dapat mencakup validasi input:
a. Character set
b. Minimum and maximum length
c. Numeric bounds
d. Date bounds
e. Match to a Regular Expression Pattern
3. Netralkan Meta-Karakter Yang Memiliki Makna Di Baris Perintah Os Target:
a). Untuk Windows: Awali setiap karakter dengan ‘^’ untuk “melarikan diri” dan menetralkan makna khususnya kepada penerjemah baris perintah: () <> & * ‘| =? ; [] ^ ~! . ”% @ / \: +,
.
b). Untuk Linux dan Unix: Awali setiap karakter dengan ‘\’ untuk menghindarinya dan menetralkan makna khususnya kepada penerjemah baris perintah: {} () <> & * ‘| =? ; [] $ - # ~! . ”% / \: +,
Menerapkan “Least Privilege”: Meskipun tidak akan membantu mencegah atau menghindari kerentanan Perintah Injeksi, membatasi kekuatan (Izin) dari akun yang digunakan untuk menjalankan perintah OS akan membantu mengurangi potensi kerusakan.
Langkah Kerja Commad Injection DVWA All Level
Command injection adalah serangan yang digunakan untuk menjalankan perintah langsung command line pada suatu web. Hal ini sering di jumpai dari beberapa website yang menggunakan fungsi pingback pada webnya, yang menyebabkan vulnerability jika tidak menggunakan validasi source code pada fungsi pingback website tersebut.
Berikut contoh command injection pada DVWA dari level low sampai high.
- Level low command injection
Disini kita dapat melihat vulnerability pada source code yang disediakan DVWA pada level low, dimana tidak adanya validasi perintah bantu seperti :
- &&
- ||
- ;
- ,
- dll
Sedangkan jika kalian sering atau pernah menggunakan perintah command line pada linux maupun windows, terdapat command bantu untuk mengeksekusi dua atau lebih perintah dalah satu waktu, dalam hal ini (DVWA) kalian dapat menggunakan command injection seperti :
<IP bebas> && dir (untuk windows)
<IP bebas> && ls (untuk linux)
Maka akan menampilkan directory seperti ini :
Kalian dapat mengirimkan shell atau bahkan kalian dapat melakukan netcat atau reverse tcp pada command injection pada vulnerability tersebut, disini kalian dapat menggunakan command reverse shell tcp
2. Level medium command injection.
Pada medium level kita mendapatkan dua validasi seperti && dan ; , maka dari sini kita tidak dapat melakukan command injection dengan perintah tersebut. Tapi kita dapat menggunakan perintah lain, seperti :
- &
- ||
- |
- ,
- dll
sebagai contohnya kalian dapat menggunakan command :
<IP bebas> & dir
Maka akan menghasilkan :
3. Level high command injection
Kita dapat melihat beberapa fungsi bantu command sudah di validasi, tapi bukan berarti tidak dapat kita bypass, disini kita dapat menggunakan command yang berdempetan, karena dalam command line hal ini tetap di anggap valid dijalankan, seperti :
<IP bebas> |dir
Maka akan memunculkan hasil :
4. Level Impossible command injection.
Untuk level ini kita hanya mendapatkan prevention validasi source code yang benar untuk menghindari serangan command injection.