xargs tidak dapat menemukan jalur file yang disediakan oleh file input

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?


person imkingdavid    schedule 08.08.2013    source sumber
comment
Perintah xargs Anda mencari file dan akan berfungsi dengan asumsi file input baik-baik saja. Satu peringatan: semuanya baik-baik saja dengan asumsi tidak ada spasi di nama file mana pun.   -  person Ciclamino    schedule 08.08.2013
comment
Saya pikir Anda harus memberikan informasi lebih lanjut. Apa keluaran dari head -3 files_with_malicious_exif.txt | xargs ls -1?   -  person nosid    schedule 08.08.2013
comment
Saya tidak melihat spasi apa pun di nama file mana pun (dan pencarian karakter spasi di editor teks saya hasilnya kosong). @nosid Output dari perintah itu : 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


Jawaban (1)


Jika Anda ingin menggunakan xargs, maka kami dapat mencoba menyelesaikan masalah melalui diagnostik, jika tujuan Anda hanyalah menyelesaikan pekerjaan, putaran kecil di bawah ini akan berfungsi; jika Anda memiliki nama file yang memiliki karakter khusus, Anda hanya perlu mengubah $fixfile menjadi "$fixfile".

cat files_with_malicious_exif.txt | while read fixfile; do exiftool -make="" -model="" $fixfile; done
person user2662831    schedule 08.08.2013
comment
Jelas tidak ingin menggunakan xargs. Hanya itulah satu-satunya hal yang dapat saya temukan yang memungkinkan saya menjalankan perintah. - person imkingdavid; 08.08.2013
comment
Jadi saya sudah mencoba menjalankan perintah itu dan masih tidak dapat menemukan filenya. Saya sudah mencobanya dengan dan tanpa awalan ./ serta menggunakan jalur absolut. Saya tidak tahu apa masalahnya - person imkingdavid; 08.08.2013
comment
Coba gunakan $fixfile sebagai lawan $fixfile dan beri tahu saya jika itu membuat perbedaan. - person user2662831; 09.08.2013
comment
Sayangnya, tidak membuat perbedaan. :/ Saya bahkan sudah mencoba menggunakan skrip PHP dengan exec() untuk menjalankan perintah, tapi tetap tidak ada. File gambar memiliki izin 0644 dan milik pengguna yang saya coba jalankan skripnya (saya juga sudah mencoba dengan root). Jika saya menggunakan perintah file dengan jalurnya, ini menunjukkan jalur dan kemudian data gambar JPEG, standar JFIF 1.01. Jadi filenya pasti ada. Saya mungkin akan mengunduh gambar yang dimaksud dan melakukan perubahan secara manual. Masalah ini memakan banyak waktu. Bagaimanapun, terima kasih atas bantuannya sejauh ini! - person imkingdavid; 09.08.2013