
تصفية قوائم المضيفين لتحديد مرشحي SSRF القابلين للتطبيق عن طريق فحص إمكانية الوصول عبر HTTP وحل عناوين IP الداخلية/الخارجية، وتجاوز القوائم السوداء التقليدية في البيئات السحابية.
تتيح لك أداة surf تصفية قائمة من المضيفين وإرجاع قائمة بمرشحين محتملين لثغرات SSRF. تقوم بذلك عن طريق إرسال طلب HTTP من جهازك إلى كل مضيف، ثم جمع جميع المضيفين الذين لم يستجيبوا، وتصفيتهم إلى قائمتين: مضيفين مواجهين للخارج وآخرين مواجهين للداخل.
يمكنك بعد ذلك تجربة هذه المضيفين أينما قد توجد ثغرة SSRF. نظرًا لأن معظم مرشحات SSRF تركز فقط على نطاقات IP الداخلية أو المقيدة، فستفاجأ بسرور عندما تحصل على SSRF على IP خارجي لا يمكن الوصول إليه عبر HTTP(s) من جهازك.
غالبًا ما ستجد أن الشركات الكبيرة ذات البيئات السحابية لديها عناوين IP خارجية لتطبيقات الويب الداخلية. لن تلتقط مرشحات SSRF التقليدية ذلك إلا إذا تمت إضافة هذه المضيفين تحديدًا إلى قائمة سوداء (وهو ما لا يحدث عادةً). لهذا السبب يمكن أن تكون هذه التقنية فعّالة جدًا.
تتطلب هذه الأداة إصدار Go 1.19 أو أحدث لأننا نعتمد على httpx لإجراء فحص HTTP.
يمكن تثبيتها باستخدام الأمر التالي:
go install github.com/assetnote/surf/cmd/surf@latest
افترض أن لديك نطاقات فرعية لـ bigcorp.com داخل ملف باسم bigcorp.txt، وتريد العثور على جميع مرشحي SSRF لهذه النطاقات الفرعية. إليك بعض الأمثلة:
# ابحث عن جميع مرشحي SSRF (بما في ذلك عناوين IP الخارجية عبر فحص HTTP)
surf -l bigcorp.txt
# ابحث عن جميع مرشحي SSRF (بما في ذلك عناوين IP الخارجية عبر فحص HTTP) مع ضبط زمن الانتظار والتزامن
surf -l bigcorp.txt -t 10 -c 200
# ابحث عن جميع مرشحي SSRF (بما في ذلك عناوين IP الخارجية عبر فحص HTTP)، واطبع جميع المضيفين فقط
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 على هدفك. قائمة المضيفين الخارجيين لديها فرصة نجاح أكبر من القائمة الداخلية.
داخل هذه الأداة، تستخدم httpx لإجراء فحص HTTP. تلتقط الأخطاء التي يعيدها httpx، ثم تجري تحليلًا أساسيًا لتحديد المرشحين الأكثر قابلية للتطبيق لثغرات SSRF.
تم إنشاء هذه الأداة نتيجة لحدث اختراق مباشر لـ HackerOne (H1-4420 2023).