
RevSuit هي منصة اتصال عكسي مرنة وقوية مصممة لاستقبال الاتصالات من الهدف المضيف أثناء الاختراق.
الإنجليزية |简体中文
RevSuit هي منصة اتصال عكسي مرنة وقوية مصممة لاستقبال الاتصالات من الهدف المضيف في اختبار الاختراق. تدعم حالياً بروتوكولات HTTP و DNS و RMI و LDAP و MySQL و FTP.
مرنة:
قوية:
قم بتنزيل أحدث إصدار مباشرة أو قم بالبناء باتباع الخطوات التالية:
git clone https://github.com/Li4n0/revsuit.git
cd revsuit/frontend && yarn install && yarn build
cd ../ && go build ./cmd/revsuit/revsuit.go
سينشئ RevSuit ملف التكوين الافتراضي عند التشغيل الأول. قم بتعديل ملف التكوين حسب احتياجاتك، ثم أعد التشغيل. يمكن العثور على وصف تفصيلي لملف التكوين في: ملاحظات التكوین
لتأكيد موقع IP، يجب استخدام قاعدة بيانات موقع IP. يتم استخدام QQwry كمصدر بيانات افتراضي، يمكنك أيضًا تعديل التكوين لاستخدام GeoIP. إذا كانت قاعدة البيانات المحددة غير متاحة في الدليل الحالي أو تم تحديثها منذ أكثر من أسبوع، سيقوم RevSuit تلقائياً بتنزيل أحدث قاعدة بيانات. إذا فشل التنزيل، سيكون حقل IpArea فارغاً دائماً.
$ ./revsuit
2021/05/16 22:55:10 [ INFO] Downloading qqwry.dat...
____ _____ _ __
/ __ \___ _ __/ ___/__ __(_) /_
/ /_/ / _ \ | / /\__ \/ / / / / __/
/ _, _/ __/ |/ /___/ / /_/ / / /_
/_/ |_|\___/|___//____/\__,_/_/\__/
vBeta0.1
https://revsuit.pro
2021/05/16 22:55:22 [ INFO] Starting HTTP Server at :80, token:your_token
2021/05/16 22:55:22 [ INFO] Start to listen FTP PASV port at :2020, PasvIP is 10.9.8.7
2021/05/16 22:55:22 [ INFO] Starting FTP Server at :21
2021/05/16 22:55:22 [ INFO] Starting MySQL Server at :3306
2021/05/16 22:55:22 [ INFO] Starting RMI Server at :1099
2021/05/16 22:55:22 [ INFO] Starting DNS Server at :53
بعد التشغيل، يمكنك زيارة المسار /revsuit/admin/ لخادم HTTP وإدخال الرمز المميز للوصول إلى لوحة التحكم.
لنأخذ إنشاء قواعد HTTP كمثال:
بعض الملاحظات كالتالي:
الاسم و flagFormat للقاعدة فريدان.FlagFormat صيغة التعبير العادي، وبالنسبة للبروتوكولات المختلفة، تختلف الحقول المطابقة بواسطة flagFormat، يمكنك التحقق من التلميحات المقابلة للحصول على التفاصيل عند إنشاء القواعد.flagFormat، وستستخدم نتيجة التجميع المطابق أيضاً كمتغير قالب.كما هو موضح أدناه، نقوم بإنشاء قاعدة تستخدم متغيرات القالب المضمنة ومتغيرات القالب المخصصة لبروتوكول http، ونسميها test_create_rule:

ثم قم بتقديم طلب يحقق القاعدة وشاهد الاستجابة.

سيتم تسجيل الطلب على المنصة في نفس الوقت.

إذا كنت ترغب في تلقي إشعار بالاتصالات الجديدة على برنامج مكتبك، يمكنك تكوين عنوان webhook للبرنامج ذي الصلة في ملف التكوين وتشغيل مفتاح Notice للقاعدة المقابلة. الدعم حالياً لأربعة أنواع من البرامج: dingtalk, wechat, lark, slack. (دعم Discord و Telegram قيد التخطيط.)
إذا كنت تقوم بترحيل المنصات أو تنظيف البيانات، قد يكون إعادة إنشاء القواعد أمراً مزعجاً. لذلك تدعم المنصة استيراد وتصدير القواعد.
مدخل هذه الوظيفة موجود في Settings > RULES.
يتم تخزين القواعد بتنسيق yaml للاستيراد والتصدير، كما يلي:
http:
- name: test_create_rule
flag_format: (?P<what>\w+)\?
rank: 0
push_to_client: false
notice: false
response_status_code: "302"
response_headers:
Location: ${query.url}
response_body: ${header.say} ${what}
- name: other_rule
flag_format: other
rank: 1
push_to_client: false
notice: true
response_status_code: "200"
response_headers: { }
response_body: Hello Revsuit!
dns:
... ...
تم فصل RevSuit من مشروع الماسح الخاص بي، لذا فإن دعمه الأصلي يعمل مع الماسحات الضوئية.
من منظور RevSuit، نسمي الماسح الضوئي عميلاً.
يستخدم RevSuit أحداث مرسلة من الخادم HTTP (SSE) لإنشاء قناة اتصال أحادية الاتجاه مع العميل.
واجهة برمجة التطبيقات للقناة هي: /revsuit/api/events?message. يجب على العميل أولاً إضافة الرأس Token: your token إلى الرأس، ثم الوصول إلى واجهة برمجة التطبيقات لإنشاء القناة. عندما تتلقى المنصة اتصالاً جديداً، سيتم تمرير flag الذي تم التقاطه بواسطة القاعدة إلى العميل عبر هذه القناة.

هذا عرض توضيحي بسيط باستخدام مكتبة sse الخاصة بـ Golang كمثال.
كما هو موضح أعلاه، تدعم RevSuit عملاء متعددين، ويتلقى كل عميل في حالة الاتصال إرسال flag، لذا يمكن دعم المسح الموزع.
إذا كنت لا تريد أن يتلقى كل عميل جميع إرسالات flag، يمكنك استخدام رأس الطلب Flag-Filter عند إنشاء اتصال sse لتعيين تنسيق (تعبيرات منتظمة) flag الذي تريد أن يتلقاه هذا العميل:

ستقوم RevSuit بتخزين flag مؤقتاً في قائمة الانتظار عندما لا يكون هناك اتصال عميل وإرساله عند اتصال العميل، لذا لا داعي للقلق بشأن فقدان الثغرة الأمنية بسبب انقطاع اتصال العميل. (هذا مفيد بشكل خاص لاكتشاف الثغرات التي يتم تشغيلها بتأخير.)
في سيناريو مسح الثغرات الواقعي، قد ترسل عدداً كبيراً من الحمولات المختلفة لنقطة ثغرة واحدة، وقد تكون جميعها صالحة، مما يؤدي إلى تلقي منصة الارتباط العكسي العديد من الطلبات، ولكنها جميعاً ناتجة عن نفس الثغرة. إذا كنت لا تريد أن يتلقى العميل الكثير من flags لنفس الثغرة، يمكنك الاستفادة من ميزة flagGroup في flagFormat الخاص بالقاعدة.
FlagGroup هو المحتوى المطابق بواسطة المجموعة المجهولة في حقل flagFormat للقاعدة. ستتحقق المنصة من المحتوى المطابق في التجميع، ويتم إرسال flag فقط إلى العميل عندما يتم التقاط المحتوى (flagGroup) لأول مرة.
على سبيل المثال، مسح SSRF.
أولاً قم بإنشاء قاعدة كما يلي:
http:
- name: ssrf
flag_format: (ssrf[a-z0-9]{6})[0-9]{1,3}
rank: 0
push_to_client: false
notice: false
response_status_code: "200"
response_headers: { }
response_body: "Here is a SSRF!"
لنفترض أن هدفنا هو https://www.testvuln.com?url=api.com&p=useless، ولدى SSRF 5 حمولات. قد يكون الطلب النهائي الذي يرسله الماسح هو
['https://www.testvuln.com?url=http://revsuit.com/ssrfa98oni1&p=useless','https://www.testvuln.com?url=http://revsuit.com/ssrfa98oni2&p=useless', ... ,'https://www.testvuln.com?url=//revsuit.com/ssrfa98oni5&p=useless']
قد تنجح جميعها في الهجوم.
ومع ذلك، نظراً لاستخدام التجميع المجهول في flagFormat للقاعدة، ستستعلم المنصة عن flagGroup المتصل، في هذه الحالة ssrfa98oni، وتدفع flag إلى العميل فقط في أول ظهور له، لذلك سيتلقى العميل علماً واحداً فقط: ssrfa98oni1. وهذا يثبت أن معلمة url للهدف معرضة للخطر.
في سيناريوهات اختبار الاختراق الفعلية، يمكن إنجاز بعض المهام بسهولة وسرعة من خلال الجمع والمطابقة بين وحدات RevSuit المختلفة. فيما يلي مثال على XXE أعمى في Java Web، يوضح كيفية استخدام وحدات HTTP و FTP في RevSuit مع متغيرات القالب لإكمال فحص المنفذ بسرعة.
أولاً قم بإنشاء قاعدة HTTP لإرجاع evil.dtd، وتخصيص الاستجابة لمحتويات dtd بحيث تذهب لربط خدمة FTP الخاصة بـ RevSuit، واستخدام متغيرات القالب لتمرير المضيف والمنفذ المراد فحصهما إلى FTP عبر المستخدم وكلمة المرور الخاصين بـ FTP.

ثم قم بإنشاء قاعدة FTP تستقبل المضيف والمنفذ المراد فحصهما من متغيرات القالب للمستخدم وكلمة المرور، وتعيينها على عنوان Pasv.

ثم استخدم BurpSuit لبدء الفحص، عن طريق تعيين معلمات المضيف والمنفذ في عنوان URL الخاص بـ evil.dtd لتحديد هدف فحص المنفذ.

تأثير التشغيل كالتالي:

وذلك لأنه سيحدث تعطل في اتصال FTP إذا كان Passive Address غير قابل للوصول، يمكننا تحديد ما إذا كان المنفذ مفتوحاً أم لا بناءً على ما إذا كان الاتصال يخرج بشكل طبيعي. في هذا المثال، اكتشفنا بنجاح أن المنفذين 8005 و 8080 مفتوحان.
يتم إعداد ويكي أكثر تفصيلاً، يمكنك الاستكشاف بنفسك قبل ذلك.
قم بتقديم مشكلة أو اتصل بي عبر Weixin: TGk0bjA2Cg==
يعتمد هذا المشروع على كود المشاريع المتميزة التالية:
شكراً لصديقي @E99p1ant على كل المساعدة والنصائح التي تلقيتها أثناء تطوير هذا المشروع.
@Apache License 2.0