
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']
قد تنجح جميعها في الهجوم.