A3 : 2021 - Injection

Injection

Cacat injeksi sangat umum terjadi dalam aplikasi saat ini. Cacat ini terjadi karena aplikasi mengartikan masukan yang dikendalikan pengguna sebagai perintah atau parameter. Serangan injeksi bergantung pada teknologi apa yang digunakan dan bagaimana teknologi ini mengartikan masukan. Beberapa contoh umum meliputi:

.Injeksi SQL : Hal ini terjadi saat input yang dikontrol pengguna diteruskan ke kueri SQL . Akibatnya, penyerang dapat meneruskan kueri SQL untuk memanipulasi hasil kueri tersebut. Hal ini berpotensi memungkinkan penyerang untuk mengakses, mengubah, dan menghapus informasi dalam basis data saat input ini diteruskan ke kueri basis data. Ini berarti penyerang dapat mencuri informasi sensitif seperti detail dan kredensial pribadi.
.Command Injection : Hal ini terjadi saat input pengguna diteruskan ke perintah sistem. Akibatnya, penyerang dapat menjalankan perintah sistem sembarangan pada server aplikasi, yang berpotensi memungkinkan mereka mengakses sistem pengguna.

Pertahanan utama untuk mencegah serangan injeksi adalah memastikan bahwa masukan yang dikendalikan pengguna tidak ditafsirkan sebagai permintaan atau perintah. Ada beberapa cara untuk melakukannya:

.Menggunakan daftar yang diizinkan: saat input dikirim ke server, input ini dibandingkan dengan daftar input atau karakter yang aman. Jika input ditandai sebagai aman, maka input tersebut diproses. Jika tidak, input tersebut ditolak, dan aplikasi akan menampilkan kesalahan.
.Penghapusan masukan: Jika masukan mengandung karakter berbahaya, karakter tersebut akan dihapus sebelum diproses.

Karakter atau input berbahaya diklasifikasikan sebagai input apa pun yang dapat mengubah cara data yang mendasarinya diproses. Alih-alih membuat daftar izin atau menghapus input secara manual, ada berbagai pustaka yang dapat melakukan tindakan ini untuk Anda.


Command Injection

Command Injection terjadi saat kode sisi server (seperti PHP) dalam aplikasi web memanggil fungsi yang berinteraksi langsung dengan konsol server. Kerentanan web injeksi memungkinkan penyerang memanfaatkan panggilan tersebut untuk menjalankan perintah sistem operasi secara acak di server. Kemungkinan bagi penyerang dari sini tidak terbatas: mereka dapat membuat daftar file, membaca kontennya, menjalankan beberapa perintah dasar untuk melakukan pengintaian di server atau apa pun yang mereka inginkan, sama seperti mereka duduk di depan server dan mengeluarkan perintah langsung ke baris perintah.


Code Example

Mari kita pertimbangkan sebuah skenario: MooCorp telah mulai mengembangkan aplikasi berbasis web untuk seni ASCII sapi dengan teks yang dapat disesuaikan. Saat mencari cara untuk mengimplementasikan aplikasi mereka, mereka menemukan perintah cowsaydi Linux, yang melakukan hal itu! Alih-alih membuat kode aplikasi web secara keseluruhan dan logika yang diperlukan untuk membuat sapi berbicara dalam ASCII, mereka memutuskan untuk menulis beberapa kode sederhana yang memanggil perintah cowsay dari konsol sistem operasi dan mengirimkan kembali isinya ke situs web.

[?php
if (isset($_GET["mooing"])) {
$mooing = $_GET["mooing"];
$cow = 'default';
if(isset($_GET["cow"]))
$cow = $_GET["cow"];
passthru("perl /usr/bin/cowsay -f $cow $mooing");
}
?]

Secara sederhana, cuplikan di atas melakukan hal berikut:

1. Memeriksa apakah parameter "$mooing" telah ditetapkan. Jika ya, variabel $mooingakan menerima apa yang dimasukkan ke dalam kolom input.
2. Memeriksa apakah parameter "$sapi" telah ditetapkan. Jika ya, variabel $cowakan menerima apa yang telah diteruskan melalui parameter.
3. Program tersebut kemudian mengeksekusi fungsi tersebut passthru("perl /usr/bin/cowsay -f $cow $mooing");. Fungsi passthru hanya mengeksekusi perintah di konsol sistem operasi dan mengirimkan output kembali ke browser pengguna. Anda dapat melihat bahwa perintah kita dibentuk dengan menggabungkan variabel $cow dan $mooing di bagian akhir. Karena kita dapat memanipulasi variabel tersebut, kita dapat mencoba menyuntikkan perintah tambahan dengan menggunakan trik sederhana. Jika Anda mau, Anda dapat membaca dokumen di passthru() situs web PHP untuk informasi lebih lanjut tentang fungsi itu sendiri.


Exploiting Command Injection

Sekarang setelah kita mengetahui cara kerja aplikasi di balik layar, kita akan memanfaatkan fitur bash yang disebut "inline commands" untuk menyalahgunakan server cowsay dan menjalankan perintah sembarangan yang kita inginkan. Bash memungkinkan Anda menjalankan perintah di dalam perintah. Ini berguna karena berbagai alasan, tetapi dalam kasus kita, ini akan digunakan untuk menyuntikkan perintah di dalam server cowsay agar dapat dijalankan.

Untuk menjalankan perintah sebaris, Anda hanya perlu melampirkannya dalam format berikut $(your_command_here). Jika konsol mendeteksi perintah sebaris, konsol akan menjalankannya terlebih dahulu, lalu menggunakan hasilnya sebagai parameter untuk perintah luar. Lihat contoh berikut, yang berjalan whoami sebagai perintah sebaris di dalam echo perintah:

Karena aplikasi menerima masukan apa pun dari kita, kita dapat menyuntikkan perintah sebaris yang akan dijalankan dan digunakan sebagai parameter untuk cowsay. Ini akan membuat sapi kita mengatakan apa pun yang dikembalikan oleh perintah tersebut! Jika Anda tidak begitu mengenal Linux , berikut ini beberapa perintah lain yang mungkin ingin Anda coba:

.whoami
.id
.ifconfig/ip addr
.uname -a
.ps -ef
.ls -la

tags