
होस्ट सूचियों को फ़िल्टर करके SSRF उम्मीदवारों की पहचान करता है, HTTP पहुँच क्षमता की जाँच करके और आंतरिक/बाहरी IP पतों को हल करके, क्लाउड वातावरण में पारंपरिक ब्लैकलिस्ट को बायपास करता है।
surf आपको होस्ट की एक सूची को फ़िल्टर करने की अनुमति देता है, और व्यवहार्य SSRF उम्मीदवारों की एक सूची लौटाता है। यह आपकी मशीन से प्रत्येक होस्ट को एक HTTP अनुरोध भेजकर, उन सभी होस्टों को एकत्र करके जिन्होंने प्रतिक्रिया नहीं दी, और फिर उन्हें बाहरी रूप से सामना करने वाले और आंतरिक रूप से सामना करने वाले होस्ट की सूची में फ़िल्टर करके ऐसा करता है।
फिर आप इन होस्टों को वहाँ आज़मा सकते हैं जहाँ SSRF कमजोरी मौजूद हो सकती है। चूंकि अधिकांश SSRF फ़िल्टर केवल आंतरिक या प्रतिबंधित IP श्रेणियों पर ध्यान केंद्रित करते हैं, जब आप किसी बाहरी IP पर SSRF प्राप्त करेंगे जो आपकी मशीन से HTTP(s) के माध्यम से सुलभ नहीं है, तो आप सुखद आश्चर्यचकित होंगे।
अक्सर आप पाएंगे कि क्लाउड वातावरण वाली बड़ी कंपनियों के पास आंतरिक वेब ऐप्स के लिए बाहरी IPs होंगे। पारंपरिक SSRF फ़िल्टर इसे कैप्चर नहीं करेंगे जब तक कि इन होस्टों को विशेष रूप से ब्लैकलिस्ट में नहीं जोड़ा जाता (जो वे आमतौर पर कभी नहीं करते)। यही कारण है कि यह तकनीक इतनी शक्तिशाली हो सकती है।
इस उपकरण के लिए go 1.19 या उससे ऊपर की आवश्यकता है क्योंकि हम HTTP प्रोबिंग करने के लिए httpx पर निर्भर हैं।
इसे निम्नलिखित कमांड से स्थापित किया जा सकता है:
go install github.com/assetnote/surf/cmd/surf@latest
मान लीजिए कि आपके पास bigcorp.txt नामक फ़ाइल में bigcorp.com के लिए सबडोमेन हैं, और आप इन सबडोमेन के लिए सभी SSRF उम्मीदवारों को खोजना चाहते हैं। यहाँ कुछ उदाहरण हैं:
# सभी ssrf उम्मीदवारों को खोजें (HTTP प्रोबिंग के माध्यम से बाहरी IP पतों सहित)
surf -l bigcorp.txt
# सभी ssrf उम्मीदवारों को खोजें (HTTP प्रोबिंग के माध्यम से बाहरी IP पतों सहित) टाइमआउट और समवर्ती सेटिंग्स के साथ
surf -l bigcorp.txt -t 10 -c 200
# सभी ssrf उम्मीदवारों को खोजें (HTTP प्रोबिंग के माध्यम से बाहरी IP पतों सहित), और केवल सभी होस्ट प्रिंट करें
surf -l bigcorp.txt -d
# उन सभी होस्टों को खोजें जो एक आंतरिक/निजी IP पते की ओर इशारा करते हैं (कोई HTTP प्रोबिंग नहीं)
surf -l bigcorp.txt -x
सेटिंग्स की पूरी सूची नीचे पाई जा सकती है:
❯ surf -h
███████╗██╗ ██╗██████╗ ███████╗
██╔════╝██║ ██║██╔══██╗██╔════╝
███████╗██║ ██║██████╔╝█████╗
╚════██║██║ ██║██╔══██╗██╔══╝
███████║╚██████╔╝██║ ██║██║
╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
by shubs @ assetnote
Usage: surf [--hosts FILE] [--concurrency CONCURRENCY] [--timeout SECONDS] [--retries RETRIES] [--disablehttpx] [--disableanalysis]
Options:
--hosts FILE, -l FILE
List of assets (hosts or subdomains)
--concurrency CONCURRENCY, -c CONCURRENCY
Threads (passed down to httpx) - default 100 [default: 100]
--timeout SECONDS, -t SECONDS
Timeout in seconds (passed down to httpx) - default 3 [default: 3]
--retries RETRIES, -r RETRIES
Retries on failure (passed down to httpx) - default 2 [default: 2]
--disablehttpx, -x Disable httpx and only output list of hosts that resolve to an internal IP address - default false [default: false]
--disableanalysis, -d
Disable analysis and only output list of hosts - default false [default: false]
--help, -h display this help and exit
surf चलाने पर, यह SSRF उम्मीदवारों को stdout पर प्रिंट करेगा, लेकिन यह उस फ़ोल्डर के अंदर दो फ़ाइलें भी सहेजेगा जहाँ से इसे चलाया गया है:
external-{timestamp}.txt - बाह्य रूप से समाधान करने वाले, लेकिन आपकी मशीन से HTTP अनुरोध भेजने में असमर्थinternal-{timestamp}.txt - आंतरिक रूप से समाधान करने वाले, और स्पष्ट रूप से आपकी मशीन से HTTP अनुरोध भेजने में असमर्थये दो फ़ाइलें उन होस्टों की सूची रखेंगी जो आपके लक्ष्य पर प्रयास करने के लिए आदर्श SSRF उम्मीदवार हैं। बाहरी लक्ष्य सूची में आंतरिक सूची की तुलना में व्यवहार्य होने की अधिक संभावनाएँ हैं।
अंडर द हुड, यह उपकरण HTTP प्रोबिंग करने के लिए httpx का लाभ उठाता है। यह httpx से लौटाई गई त्रुटियों को कैप्चर करता है, और फिर SSRF के लिए सबसे व्यवहार्य उम्मीदवारों का निर्धारण करने के लिए कुछ बुनियादी विश्लेषण करता है।
यह उपकरण HackerOne (H1-4420 2023) के लिए एक लाइव हैकिंग इवेंट के परिणामस्वरूप बनाया गया था।