
إثبات المفهوم لثغرة LFI/اجتياز المسار في Aiohttp =< 3.9.1
إثبات المفهوم لثغرة LFI/اجتياز المسار في Aiohttp =< 3.9.1
[!IMPORTANT] هذا السكربت مخصص لأغراض تعليمية فقط.
أي استخدام غير قانوني ممنوع منعاً باتاً.
$ git clone https://github.com/wizarddos/CVE-2024-23334
$ cd CVE-2024-23334
$ python3 exploit.py -u [url] -f [file] -d [static directory]
[!Note] تذكر مطابقة الخطوط المائلة في الرابط والدليل الثابت - إذا كتبت
http://127.0.0.1/مرر الدليل بدون خط مائل (مثلstatic) والعكس بالعكس (رابط بدون خط مائل ودليل معه)
تكمن الثغرة نفسها في الطريقة التي يتعامل بها aiohttp مع طلبات الموارد الثابتة.
إذا كتبنا كوداً مثل هذا
app.router.add_routes([
web.static("/static", "static/", follow_symlinks=True)
])
follow_symlinks=True يجعلها عرضة لثغرة LFI.
لاستخدام الموارد الثابتة، تحتاج إلى تحديد الدليل الجذر الخاص بها.
خيار يخبر باتباع الروابط الرمزية خارج الدليل الجذر، لكنه لا يتحقق مما إذا كان الرابط نفسه يقع في الدليل الجذر.
follow_symlinksaiohttpلذا حتى لو لم يكن ما يسمى "symlink" رابطاً فعلياً، فإن aiohttp يقرأ ذلك الملف ويعيد قيمته.