Kerentanan shellshock ditemukan pada akhir 2014 (tepatnya, dampaknya telah diposting di CVE-2014-6271 pada 24 September 2014). Kemudian pembaruan dirilis dalam versi bash 4.1.2-15 dengan perbaikan untuk kerentanan Shellshock. Yah, seluruh dunia terus memperbarui bash dan mengamankan shell mereka dari Shellshock, tetapi yang mengejutkan banyak mesin di kantor saya tidak diperbarui karena alasan apa pun. Bagian yang menakutkan adalah, hanya sedikit dari mesin dengan shell yang rentan yang menghosting banyak layanan di internet. Menurut berbagai blog di internet, eksploitasi Shellshock memungkinkan penyerang mengeksekusi perintah jahat dari jarak jauh di bash melalui skrip CGI.
(I know this tutorial is pretty late, but there are many who are not aware of it and still using vulnerable bash on their public servers)
Hal pertama adalah memeriksa apakah BASH Anda rentan terhadap Shellshock atau tidak . Jadi setiap versi bash sebelum 4.1.2 pasti memiliki kerentanan ini.
$ bash --version GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
(atau)
$ rpm -qa|grep bash bash-completion-1.3-7.el5 bash-3.2-32.el5_9.1
Sekarang Anda tahu versinya, jadi jalankan perintah di bawah ini untuk mengonfirmasi bahwa itu rentan terhadap Shellshock.
$ env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock" vulnerable If you see the word vulnerable above, you are vulnerable to shellshock
Solusi:
Langsung ke bagian bawah posting ini. Jika Anda ingin mengetahui cara kerja shellshock, bacalah.
Memahami variabel ekspor di SHELL :
Seperti yang dikatakan output di atas, SHELL Anda rentan, tetapi mari kita lihat cara kerjanya.
Biasanya, Anda dapat mengatur variabel lingkungan dan menggunakannya dalam shell. Misalnya seperti di bawah ini:
$ test=1 $ echo $test 1
Tetapi Anda tidak dapat langsung menggunakan variabel env 'test' di bash shell baru . Lihat ini:
$ test=1 $ echo $test 1 $ bash $ echo $test
Keluaran kosong. Alasannya adalah, variabel lingkungan hanya tersedia untuk akses di shell yang sama. Tetapi jika Anda mengekspor variabel lingkungan, maka itu juga tersedia untuk shell bash baru. Ini contohnya:
$ var="testing" $ export var $ bash $ echo $var testing
Sekarang Anda dapat melihat variabel '$var' disetel dan diekspor dalam satu shell dan diakses dari shell lain. Tentu saja, Anda dapat menghentikan ekspor kapan saja menggunakan perintah di bawah ini.
$ export -n var $ bash $ echo $var
Demikian pula, Anda dapat membuat fungsi dan mengekspornya dalam satu shell dan mengakses fungsi yang diekspor dari shell lain. Mari kita lihat contoh itu juga.
$ fnc() { echo "testing"; } $ fnc testing $ bash $ fnc bash: fnc: command not found
Pada output di atas Anda melihat 'bash:fnc:command not found ' karena, fnc bukan fungsi yang diekspor. Jadi Anda tidak dapat memanggilnya dari shell lain.
Ayo ekspor 'fnc ' juga.
$ export -f fnc $ fnc testing $ bash $ fnc testing
Ini berfungsi seperti yang diharapkan (sejak ‘fnc ' telah diekspor dan tersedia di shell lain).
Mengekspor variabel atau fungsi akan menetapkan variabel lingkungan
$ env | grep -A1 fnc fnc=() { echo "testing" }
Sekarang eksploitasi Shellshock
Berdasarkan contoh di atas, kami mempelajari bahwa bash shell baru menyerap definisi variabel lingkungan yang dimulai dengan () dan menafsirkannya sebagai fungsi . Tetapi kerentanan di sini, shell baru akan mengeksekusi apa pun yang ada dalam kutipan.
Misalnya:
Jalankan perintah di bawah ini:
$ export sse_fnc='() { echo "function shellshock exploit" ; }; echo "Not good"; '
Periksa variabel env untuk 'sse_fnc':
$ env | grep -A1 sse_fnc sse_fnc=() { echo "function shellshock exploit" ; }; echo "Not good";
Buka bash shell baru:
$ bash Not good
Catatan: Kami baru saja mengetik 'bash ' dan Anda melihat teks 'Tidak bagus ' dicetak. Artinya, shell baru mulai menjalankan fungsi setelah membaca variabel lingkungan dan juga menjalankan perintah tambahan (walaupun fungsi brace ditutup setelah 'echo “function shellshock exploit”;’).
Dengan kata lain “Variabel yang diekspor sse_fnc
diteruskan ke subkulit yang ditafsirkan sebagai fungsi sse_fnc
tetapi perintah tambahan dijalankan (this is bad
) saat subkulit muncul.”
melalui Fixee@StackExchange
bagaimana kerentanan ini dapat dieksploitasi?
Saya tidak berpikir ada yang bisa menjelaskan lebih baik dari orang ini (shellshocker.net). Terima kasih kawan!
Bagaimana Cara Memperbaiki Shellshock?
Sederhana, perbarui bash Anda dan coba eksploitasi untuk memeriksa apakah kerentanan telah hilang.
$curl https://shellshocker.net/fixbash | sh
Perintah di atas akan secara otomatis mengunduh sekitar 30+ tambalan dan mengkompilasi bash dari sumber. Anda dapat menjalankan skrip ini secara teratur untuk menjaga bash Anda diperbarui dengan tambalan terbaru.
Setelah instalasi berhasil. Periksa versi bash seperti di bawah ini:
$bash --version GNU bash, version 4.3.42(1)-release (x86_64-unknown-linux-gnu)
Uji kerentanan Shellshock:
$env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock If you see the word vulnerable above, you are vulnerable to shellshock
Dari output di atas, tidak mencetak kata "rentan". Jadi bash saya aman!
(atau)
$env X='() { (shellshocker.net)=>\' bash -c "echo date"; cat echo; rm ./echo
Jika BASH rentan, perintah di atas akan menampilkan tanggal. Jika tidak, BASH aman.