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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
heaplens — # مشروع مختبر الأمن السيبراني CMPT733 II: إضافة GDB لاستغلالات الكومة مستوحاة من CVE-2021-3156 | Kitploit
أدوات/GitHubGitHub/ypl6/heaplens
تحليل الثغرات الأمنيةالاستغلالمصممي الأخطاءتحليل الملفات الثنائيةالتعلم والتعليم
GitHubypl6/heaplens

heaplens

# مشروع مختبر الأمن السيبراني CMPT733 II: إضافة GDB لاستغلالات الكومة مستوحاة من CVE-2021-3156

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

الأكثر شعبية

عرض الكل →

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

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

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

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

heaplens

🔎 Heaplens

مشروع مختبر الأمن السيبراني CMPT733 - الجزء الثاني

📂 هيكل المستودع

.
├── README.md
├── heaplens.png
├── heaplens.py
├── logs
│   ├── sudoedit-#.txt
│   └── ...
└── tests
    ├── Makefile
    ├── env-in-heap
    └── ...
  • README.md: هنا!
  • heaplens.py: السكربت الرئيسي
  • logs/: يحتوي على بعض السجلات النموذجية التي التقطناها أثناء التطوير والاختبار
  • tests/: يحتوي على بعض الملفات الثنائية (وأكوادها المصدرية) للاختبار

📦 البيئة

فيما يلي قائمة بالأشياء (والإصدارات) التي استخدمناها لاختبار الاستغلال. يجب أن تكون مثبتة بالفعل في الجهاز الافتراضي. في حال كان أي شيء مفقودًا، اتبع التعليمات أدناه.

التبعيات

  • Ubuntu 20.04.4 (64-bit)
  • python 3.8.10
  • glibc 2.34
  • gdb 9.2
  • gef 2022.01
    • إذا لم يكن gef مفعّلاً تحت المستخدم الجذر، ألقِ نظرة على /root/.gdbinit
    • إذا كان الملف فارغًا، فقط انسخ ما لديك في ~/.gdbinit

تبعيات sudo (لتشغيل heaplens على sudo)

مطلوب ملف ثنائي لـ sudo مع تمكين التصحيح. تم تثبيت ملف ثنائي مُجهّز مسبقًا مع رموز التصحيح في الجهاز الافتراضي.

cyberlab@ubuntu:~$ which sudo
/usr/local/bin/sudo

cyberlab@ubuntu:~$ sudo --version
Sudo version 1.8.31
Sudoers policy plugin version 1.8.31
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.31

cyberlab@ubuntu:~$ sudoedit -s /
sudoedit: /: not a regular file # sudo is vulnerable

📝 تحميل الإضافة

تم هذا بالفعل في الجهاز الافتراضي. في حال كان الإعداد خاطئًا، يمكنك اتباع التعليمات هنا لتحميل Heaplens.

الخيار 1

ابدأ gef وعدّل الإعدادات:

gef➤ gef config gef.extra_plugins_dir <path to>/heaplens
gef➤ gef save
gef➤ q

يجب أن يحدّث هذا الملف ~/.gef.rc أو /root/.gef.rc (تحت المستخدم الجذر).

الخيار 2

أضف هذا السطر في ~/.gdbinit أو /root/.gdbinit:

source <path to>/heaplens/heaplens.py

💡 الاستخدام

يُقترح تشغيل gdb تحت المستخدم الجذر عند تصحيح البرامج المميزة:

$ sudo su
# gdb

يتم توفير رسائل مساعدة لجميع الأوامر. يمكنك الوصول إليها عبر <command> -h في GDB.

heaplens

يجمع معلومات الكومة من دوال تخصيص وإلغاء تخصيص الذاكرة، بما في ذلك malloc و realloc و calloc و free.

الفكرة العامة هي أنه من خلال ربط هذه الدوال، يمكننا أتمتة عملية فحص وتحديث مكدس الاستدعاءات بالإضافة إلى عنوان الإرجاع لتخصيص الذاكرة. من خلال فحص التتبعات، يمكننا رؤية أي قطعة يتم تخصيصها بواسطة foo() في بعض ملفات C، ويمكننا التحقيق أكثر، على سبيل المثال عن طريق فحص القطع المجاورة، للعثور على أهداف مناسبة لاستغلال الكومة.

كما يدعم إضافة نقاط توقف مخصصة في المنتصف إذا كان المستخدم مهتمًا بتخطيط كومة وسيط.

الأمر نفسه ليس مفصلاً للغاية وستحتاج إلى استخدام heaplens-dump لطباعة النتائج.

heaplens -h
usage: [-h] [-b BREAKPOINT] [-v]

Collect heap info from memory (de)allocation functions.

optional arguments:
  -h, --help            show this help message and exit
  -b BREAKPOINT, --breakpoint BREAKPOINT
                        stop the executions here (execute br {breakpoint} in gdb) (default: None)
  -v, --verbose         increase output verbosity (default: False)

مثال على الإخراج:

gef➤  file sudoedit
gef➤  heaplens -b set_cmnd -- -s '\\' $(python3 -c 'print("A"*65535)')
----------------------------
Initializing Heaplens
----------------------------
Temporary breakpoint 1 at 0x5840: file ../../src/src/sudo.c, line 136.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
usage: sudoedit [-AknS] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
[Inferior 1 (process 82934) exited with code 01]
Setting breakpoint at set_cmnd...
Function "set_cmnd" not defined.
Breakpoint 2 (set_cmnd) pending.
Hooking free function...
Breakpoint 3 at 0x7f25cc163700: free. (2 locations)
Hooking malloc function...
Breakpoint 4 at 0x7f25cc163110: malloc. (2 locations)
Hooking realloc function...
Breakpoint 5 at 0x7f25cc163eb0: realloc. (2 locations)
Hooking calloc function...
Breakpoint 6 at 0x7f25cc164b40: calloc. (2 locations)
Running -s '\' $(python3 -c 'print("A"*65535)')...
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 2, set_cmnd () at ../../../src/plugins/sudoers/sudoers.c:804
804	../../../src/plugins/sudoers/sudoers.c: No such file or directory.
Removing breakpoints from mem_bkps...

heaplens-dump

يفرّغ سجلات Heaplens. نوفر خيارات لكتابة النتائج إلى ملف، والإخراج بتنسيق JSON، وفرز القطع حسب عناوينها. في التفريغ، سيكون لكل قطعة عنوانها وحجمها وتتبّع الاستدعاءات ودالة تخصيص الذاكرة المرتبطة بها مسجلة بطريقة أكثر قابلية للقراءة.

heaplens-dump -h
usage: [-h] [-o OUTPUT] [--json] [-s]

Dump Heaplens logs. Writes to stdout by default.

optional arguments:
  -h, --help            show this help message and exit
  -o OUTPUT, --output OUTPUT
                        write to file at path {output} (default: None)
  --json                dump in json (default: False)
  -s, --sort            sort the chunks by their addresses (default: False)

مثال على الإخراج:

gef➤  heaplens-dump
----------------------------
Dumping...
----------------------------

...

[malloc] Chunk 3 @ 0x55f3908ed2a0 | size 0xc
Trace:
#0  __GI___strdup (s=0x7fff6fb3b8dc "en_US.UTF-8") at strdup.c:44
#1  0x00007f285df363c5 in _nl_load_locale_from_archive (category=category@entry=0xc, namep=namep@entry=0x7fff6fb29f50) at loadarchive.c:464
#2  0x00007f285df351fe in _nl_find_locale (locale_path=0x0, locale_path_len=0x0, category=category@entry=0xc, name=name@entry=0x7fff6fb29f50) at findlocale.c:152
#3  0x00007f285df34925 in __GI_setlocale (locale=<optimized out>, category=<optimized out>) at setlocale.c:337
#4  __GI_setlocale (category=<optimized out>, locale=<optimized out>) at setlocale.c:217
#5  0x000055f3901d5965 in main (argc=0x4, argv=0x7fff6fb2a298, envp=0x7fff6fb2a2c0) at ../../src/src/sudo.c:1430

...

Dump complete.

heaplens-chunks

يخرج نسخة معدلة قليلاً من heap chunks من gef.

هذا يوسّع heap chunks الخاص بـ GEF (الذي يعرض عناوين القطع وأعلامها وأحجامها وبياناتها الوصفية) من خلال دمج معلومات حول القطع الحرة من heap bins (الذي يسرد القطع المخصصة سابقًا والمحررة من صناديق glibc). يوفر GEF ميزات تساعد في فحص الكومة مثل الاثنين المذكورين، ولكن من الممل الجمع بينهما. على مستوى عالٍ، يجمع هذا الأمر عناوين القطع الحرة من الأخير، ويصنفها في نتيجة الأول.

heaplens-chunks -h
usage: [-h] [--nocolor]

A modified `heap chunks` with info about free chunks.

optional arguments:
  -h, --help  show this help message and exit
  --nocolor   disable ANSI color codes

مثال على الإخراج:

gef➤  heaplens-chunks
Showing current heap info with freed chunks:

...
تنزيل الأداة