ก่อนอื่น ฉันไม่แน่ใจว่าสิ่งนี้เป็นของที่นี่ซึ่งตรงข้ามกับ ServerFault หรือที่อื่น หากมันอยู่ที่นั่นแทนฉันขอโทษ
อย่างไรก็ตาม ต่อไปนี้เป็นข้อมูลเบื้องต้นเกี่ยวกับปัญหาของฉัน ฉันทำงานให้กับบริษัทที่จัดการเว็บไซต์ของลูกค้าหลายราย และลูกค้ารายหนึ่งที่เราดำเนินการนั้นมีเว็บไซต์ที่มีมัลแวร์จำนวนมากซึ่งจำเป็นต้องกำจัดออก ตอนนี้ ฉันได้เรียนรู้มากมายในช่วงไม่กี่สัปดาห์ที่ผ่านมาเกี่ยวกับการใช้ grep, find, xargs ฯลฯ เพื่อค้นหาและดำเนินการกับไฟล์ที่มีชื่อไฟล์ ขนาดไฟล์ และมีสตริงหรือรูปแบบข้อความที่แน่นอน
ปัญหาหนึ่งที่เราพบคือรูปภาพบางรูปถูกแทรกด้วยข้อมูล exif ที่เป็นอันตราย (โดยพื้นฐานแล้ว แอตทริบิวต์ Make คือ /.*/e
และแอตทริบิวต์ Model เป็นสิ่งที่ทำให้เกิดเอฟเฟกต์ eval(base64_decode(...));
โดยที่สตริงที่เข้ารหัสเป็นสคริปต์ PHP ที่อนุญาตให้ผู้โจมตีส่ง POST ร้องขอด้วยแอตทริบิวต์บางตัวแล้วเรียกใช้อินพุตจากแอตทริบิวต์นั้นผ่าน eval() จากนั้นพวกเขาก็ได้แทรกโค้ดต่อไปนี้ลงในสคริปต์ PHP อื่น
<?php
$exif = exif_read_data('/path/to/image.jpg');
preg_replace($exif['Make'],$exif['Model'],'');
?>
ดังนั้นพวกเขาจึงแทนที่นิพจน์ทั่วไป .* ซึ่งจับคู่อะไรก็ได้ (รวมถึงหัวเรื่องที่ว่างเปล่า) ด้วยโค้ด PHP ที่ยอมรับคำขอ POST และดำเนินการโค้ดที่กำหนด โดยพื้นฐานแล้ว สิ่งนี้ทำให้ผู้โจมตีสามารถรันโค้ด PHP ใด ๆ ที่พวกเขาต้องการบนเว็บไซต์ของลูกค้าได้ ทั้งหมดนี้น่าสนใจมากที่จะคิดออก แต่น่ารำคาญที่จะแก้ไข
PHP มีเครื่องมือในการอ่านข้อมูล exif (ได้แก่ exif_read_data()) และฉันใช้เครื่องมือนั้นเพื่อสแกนไฟล์รูปภาพทั้งหมดบนเว็บไซต์ของลูกค้า และรวบรวมรายการรูปภาพที่มีข้อมูล exif ที่เป็นอันตรายแทรกอยู่ อย่างไรก็ตาม PHP ไม่มีวิธีแก้ไขข้อมูลดังกล่าว ดังนั้นฉันจึงค้นคว้าเล็กน้อยและพบว่ามีโปรแกรม linux ชื่อ "ExifTools" ที่ให้คุณแก้ไขข้อมูล exif ได้ ฉันติดตั้งแล้วและรันคำสั่งต่อไปนี้:
xargs -a files_with_malicious_exif.txt exiftool -make="" -model=""
ไฟล์ข้อความจะมีรายการเส้นทางของไฟล์ โดยแต่ละไฟล์อยู่ในบรรทัดของตัวเอง สคริปต์อ่านชื่อไฟล์อย่างถูกต้อง เนื่องจากมีข้อความ "ข้อผิดพลาด: ไม่พบไฟล์ - ./path" จำนวนมาก (หนึ่งข้อความสำหรับแต่ละเส้นทาง)
ปัญหาคือ เส้นทางนั้นมีอยู่จริง และถ้าฉันรันคำสั่งต่อไปนี้:
exiftool -make="" -model="" ./path/that/does/exist/and/is/in/the/file/like/this.jpg
มันได้ผล. ฉันตรวจสอบไฟล์แล้วและทั้งสองรายการในข้อมูล exif ได้รับการล้างแล้ว
แต่จำนวนไฟล์ที่ติดไวรัสค่อนข้างสูง และฉันไม่อยากแยกไฟล์ทีละไฟล์เพื่อรันคำสั่งในแต่ละไฟล์
ฉันได้ลองใช้เส้นทางที่แน่นอนรวมทั้งลบ "./" ออกจากชื่อไฟล์ ฉันกำลังเรียกใช้จากไดเร็กทอรีที่ถูกต้องเพื่อให้พาธสัมพัทธ์ทำงานได้ (ดังที่เห็นได้จากข้อเท็จจริงที่ว่าคำสั่งที่สองทำงานกับพาธสัมพัทธ์) แต่ก็ยังไม่พบไฟล์ใด ๆ
มีอะไรที่ฉันลืมทำหรือทำไม่ถูกต้องหรือไม่?
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
ฉันเซ็นเซอร์ส่วนหนึ่งของเส้นทางด้วยเครื่องหมายดอกจันเพราะมันจะระบุไคลเอนต์ของฉัน โปรดทราบว่าส่วนที่อยู่หลังไดเร็กทอรีดูเหมือนจะถูกตัดออกเมื่อเริ่มต้น (ไม่ใช่จุดเริ่มต้นแบบเต็มของเส้นทาง) - person imkingdavid   schedule 08.08.2013