Dalam tulisan ini saya akan membas attack “command injection” atau dikenal juga sebagi “OS command injection”, di mana attacker bisa menyisipkan perintah untuk dieksekusi. Seperti saya contohkan dalam beberapa artikel saya di blog ini dalam kategori CLI, banyak program CLI yang bisa melakukan hal kompleks dengan sangat mudah. Kadang seseorang akan memanggil program CLI eksternal daripada harus coding sendiri fungsionalitas yang rumit. Contohnya: untuk resize satu file gambar dengan imagemagick bisa dilakukan dengan satu perintah:
convert -resize 50% input.jpg output.jpg
Dan ini bisa dipanggil dari program lain, misalnya PHP dengan:
system("convert -resize 50% input.jpg output.jpg")
Atau Python dengan
import os
os.system("convert -resize 50% input.jpg output.jpg")
Atau bahasa-bahasa lain dengan cara serupa. Seperti halnya SQL injection, jika kita tidak melakukan escaping (dalam kasus ini namanya “shell escaping“) maka akibatnya bisa fatal. Contoh sederhana lain yang ada pada banyak router adalah penggunaan perintah ping via web interface. Di balik layar, yang dilakukan adalah:
system("ping -c 3 $target")
Jika kita bisa memasukkan apapun dalam $target
, tanpa verifikasi, maka kita bisa memasukkan: localhost; ls
, hasilnya: command ping localhost
dieksekusi, lalu ls
dieksekusi. Dalam kasus ini biasanya output ls akan muncul di layar.
