
أداة آلية لاستغلال ثغرات تنسيق السلسلة لاكتشاف تسريبات المكدس وPIE وcanary مع إمكانية البحث عن العلم عبر محددات %s أو %p.
.d8888b. 888 888 888 8888888888 .d8888b.
d88P Y88b 888 888 888 888 d88P Y88b
888 888 888 888 888 888 Y88b.
888 888 888 888 8888888 "Y888b.
888 88888 888 888 888 888 "Y88b.
888 888 888 888 888 888 "888
Y88b d88P 888 Y88b. .d88P 888 Y88b d88P
"Y8888P88 88888888 "Y88888P" 888 "Y8888P"
By: DiegoAltF4
يتيح لك GLUFS أتمتة العملية المملة لإيجاد التسريبات باستخدام ثغرات سلسلة التنسيق.
سيمكنك من إيجاد تسريبات الـ stack، تسريبات الـ pie، وتسريبات الـ canary، مع الإشارة في كل حالة إلى الـ payload الذي يوفر التسريب.
بالإضافة إلى ذلك، يتضمن وضعًا يسمح لك بالبحث عن سلسلة نصية "flag" في التسريبات. لهذا الوضع، يمكن استخدام المحدد %s أو %p.
في هذا المثال، سنستخدم GLUFS للحصول على تسريب pie وتسريب canary.
الملف الثنائي الذي سنأخذه كمثال هو الملف المقابل للتحدي 7 من غرفة TryHackMe pwn101 TryHackMe room pwn101.
سنستخدم الخيار -b للإشارة إلى الملف الثنائي، والخيار -min للإشارة إلى القيمة الابتدائية للتكرار و-max للإشارة إلى القيمة النهائية للتكرار. بالإضافة إلى ذلك، نريد الحصول على معلومات حول الـ canary والـ pie.
./glufs.py -b ./pwn107.pwn107 -min 5 -max 15 --pie --canary

في هذا المثال، سنستخدم GLUFS للحصول على الـ flag.
التحدي الذي سنقوم بحله هو Confused environment read من منصة 247CTF.
في هذا المثال، لن نستخدم ملفًا ثنائيًا. لدينا فقط IP ومنفذ. لذلك، سنستخدم الخيار -ip لتحديد العنوان، و-port لتحديد المنفذ، و-flag لتحديد بداية الـ flag المراد البحث عنه. بالإضافة إلى ذلك، نظرًا لعدم وجود ملف ثنائي، علينا تحديد العمارة، في هذه الحالة x86-64 (-arch 64). سنقوم أيضًا بتحديد بداية التكرار باستخدام -min ونهايته باستخدام -max. علاوة على ذلك، سنستخدم الخيار -s لاستخدام %s بدلاً من %p.
./glufs.py -ip 3bcbadabd1a7e914.247ctf.com -port 50387 -flag 247CTF -arch 64 -min 1 -max 200 --s

في هذا المثال، سنستخدم GLUFS للحصول على الـ flag.
التحدي الذي سنقوم بحله هو flag leak من منصة PicoCTF.
في هذا المثال، سنستخدم الخيار -ip لتحديد عنوان الخادم، و-port لتحديد منفذ الخادم، و-b للإشارة إلى الملف الثنائي، و-flag للإشارة إلى بداية الـ flag، وأخيرًا، نحدد بداية ونهاية التكرار باستخدام -min و-max. إذا لم تحدد الخيار --s، فسيتم استخدام تنسيق %p بشكل افتراضي.
./glufs.py -ip saturn.picoctf.net -port 50563 -b ./vuln -flag picoCTF -min 20 -max 200

git clone https://github.com/Diego-AltF4/GLUFS.git
cd GLUFS/
pip3 install -r requirements.txt
chmod +x ./glufs.py
من المهم جدًا أن تقوم بتعديل الكود لتتمكن من تكييفه مع ملفك الثنائي / التحدي الخاص بك. لهذا الغرض، يوجد قسمان محدّدان في الكود يجب عليك إجراء تغييرات عليهما من أجل الحصول على تسريب سلسلة التنسيق وكذلك لتكوين متى يتم إرسال الـ payload.
أمثلة: لتحدي picoCTF الموضح أعلاه، تم استخدام الإعداد التالي:
#######################################################################
# This is the part that you must modify to fit your binary. #
#######################################################################
p.sendlineafter(b'>>', payload)
p.recvuntil(b'-')
leak = p.recv().strip(b'\n')
#print(leak) ## For debugging errors
#######################################################################
| المعامل | المعلومات |
|---|
| -b | حدد هذا الخيار للإشارة إلى الملف الثنائي المراد استغلاله. |
| -max | حدد هذا الخيار للإشارة إلى أقصى قيمة سيتم اختبارها. النطاق: (min, max). الافتراضي: max = 40 |
| -min | حدد هذا الخيار للإشارة إلى أدنى قيمة سيتم اختبارها. النطاق: (min, max). الافتراضي: min = 1 |
| -ip | حدد هذا الخيار لتحديد عنوان IP للخادم البعيد. |
| -port | حدد هذا الخيار لتحديد منفذ الخادم البعيد. |
| -flag | حدد هذا الخيار للإشارة إلى بداية الـ flag المراد البحث عنه. |
| -arch | حدد هذا الخيار لتعيين العمارة (32 أو 64). |
| --s | حدد هذا الخيار لاستخدام %s بدلاً من %p. |
| --canary | حدد هذا الخيار لإيجاد الموضع الذي يوجد فيه تسريب canary. |
| --leaks | حدد هذا الخيار لطباعة جميع التسريبات التي تم العثور عليها. |
| --pie | حدد هذا الخيار لإيجاد الموضع الذي يوجد فيه تسريب pie. |
| --stack | حدد هذا الخيار لإيجاد الموضع الذي يوجد فيه تسريب stack. |
| --v | حدد هذا الخيار لضبط وضع الإسهاب (verbose). |