Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2024-35333 — إعادة إنتاج وتحليل السبب الجذري لـ CVE-2024-35333، وهو تجاوز سعة مخزن مؤقت مكدسي في html2xhtml 1.3، مع مخرجات انهيار ASan وإرشادات تخفيف على مستوى الكود. | Kitploit
أدوات/GitHubGitHub/momo1239/cve-2024-35333
التحليل الثابتتحليل الثغرات الأمنيةالاستغلالالاختبار العشوائيالتعلم والتعليماستغلال الملفات الثنائية
GitHubmomo1239/cve-2024-35333

CVE-2024-35333

إعادة إنتاج وتحليل السبب الجذري لـ CVE-2024-35333، وهو تجاوز سعة مخزن مؤقت مكدسي في html2xhtml 1.3، مع مخرجات انهيار ASan وإرشادات تخفيف على مستوى الكود.

عرض المستودع
3منذ 2 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2024-35333

توجد ثغرة تجاوز سعة المخزن المؤقت في المكدس (stack buffer overflow) في وظيفة معالجة ترميز الأحرف في html2xhtml الإصدار 1.3. يمكن للمهاجم استغلال هذه الثغرة من خلال توفير مدخلات مصممة خصيصًا، مما يؤدي إلى تجاوز سعة المتغير 'buf' الموجود على المكدس. قد يسمح الاستغلال الناجح لهذه الثغرة للمهاجم بتنفيذ كود عشوائي أو تعطيل التطبيق، مما يؤدي إلى رفض الخدمة.

مرحلة إحداث الانهيار

لإعادة إنتاج الانهيار، دعنا ننتقل إلى موقع المشروع ونحمّل الإصدار الأحدث 1.3.

بمجرد حصولنا على ملف tar، يمكننا تشغيل tar xvf XYZ.tar

شغّل:

root@kitploit:~
./configure
make
./html2xhtml poc.html

يجب أن تحصل على خطأ تجزئة (segmentation fault). دعنا نحلل هذا باستخدام Address Sanitizer.

شغّل:

root@kitploit:~
make clean
make CFLAGS=-fsanitize=address
./html2xhtml poc.html

ستحصل على المخرجات التالية:

root@kitploit:~
=================================================================
==3468537==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fffffffde70 at pc 0x7ffff7493fc4 bp 0x7fffffffdc00 sp 0x7fffffffd3a8
READ of size 86 at 0x7fffffffde70 thread T0
    #0 0x7ffff7493fc3 in __interceptor_memmem ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:686
    #1 0x5555555f5f35 in read_charset_decl /home/kenny/Downloads/html2xhtml-1.3/src/charset.c:680
    #2 0x5555555f7d89 in guess_charset /home/kenny/Downloads/html2xhtml-1.3/src/charset.c:508
    #3 0x5555555f7d89 in charset_auto_detect /home/kenny/Downloads/html2xhtml-1.3/src/charset.c:343
    #4 0x555555568d49 in main /home/kenny/Downloads/html2xhtml-1.3/src/html2xhtml.c:100
    #5 0x7ffff7029d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #6 0x7ffff7029e3f in __libc_start_main_impl ../csu/libc-start.c:392
    #7 0x55555556b914 in _start (/home/kenny/Downloads/html2xhtml-1.3/src/html2xhtml+0x17914)

Address 0x7fffffffde70 is located in stack of thread T0 at offset 544 in frame
    #0 0x5555555e86bf in read_charset_decl /home/kenny/Downloads/html2xhtml-1.3/src/charset.c:536

  This frame has 1 object(s):
    [32, 544) 'buf' (line 537) <== Memory access at offset 544 overflows this variable
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:686 in __interceptor_memmem
Shadow bytes around the buggy address:
  0x10007fff7b70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x10007fff7b80: 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1 00 00
  0x10007fff7b90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x10007fff7ba0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x10007fff7bb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x10007fff7bc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00[f3]f3
  0x10007fff7bd0: f3 f3 f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00
  0x10007fff7be0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1
  0x10007fff7bf0: f1 f1 00 f3 f3 f3 00 00 00 00 00 00 00 00 00 00
  0x10007fff7c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x10007fff7c10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==3468537==ABORTING

تحليل السبب الجذري

دعنا نلقي نظرة على الكود المصدري ونراجع الدالة القابلة للاستغلال: read_charset_decl(). يبلغ طول الدالة أكثر من 100 سطر من الكود. سنقوم بتبسيطها ونلقي نظرة على هذه الحلقة بالذات.

root@kitploit:~
  for (i = ini, len = 0; i < avail && len < SCAN_LEN; i += step, len++) {
    buf[len] = tolower(buffer[i]);
  }

تقوم هذه الحلقة بنسخ البيانات من مصفوفة buffer إلى buf، مع تحويل الأحرف إلى أحرف صغيرة أثناء ذلك. تكمن المشكلة عندما تكون قيمة avail أكبر من SCAN_LEN، إذ لا تتحقق الحلقة من تجاوز الحدود العليا للمتغير buf.

للتخفيف من هذه الثغرة، يجب إضافة فحص للحدود للتأكد من أن len لا تتجاوز SCAN_LEN.

تنزيل الأداة