Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Stowaway — أداة وكيل متعدد القفزات لاختبار الاختراق تتيح توجيه الحركة عبر عقد متعددة، نفق SOCKS5/SSH، إعادة توجيه المنافذ، شل عن بُعد، وتواصل مُشفر بين العقد. | Kitploit
أدوات/GitHubGitHub/ph4ntonn/stowaway
أدوات التشفير/فك التشفيرالحركة الجانبيةالتحكم في الوصول إلى الشبكةاختبار الاختراقالقيادة والسيطرةالفريق الأحمر
GitHubph4ntonn/stowaway

Stowaway

أداة وكيل متعدد القفزات لاختبار الاختراق تتيح توجيه الحركة عبر عقد متعددة، نفق SOCKS5/SSH، إعادة توجيه المنافذ، شل عن بُعد، وتواصل مُشفر بين العقد.

عرض المستودع
3.4k4428منذ 6 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

stowaway.png

Stowaway

GitHub issues GitHub forks GitHub stars GitHub license

English

Stowaway هي أداة وكيل متعدد المستويات مكتوبة بلغة Go، مصممة خصيصًا لمتخصصي اختبار الاختراق.

يمكن للمستخدمين استخدام هذا البرنامج لتوجيه حركة المرور الخارجية عبر عقد متعددة إلى الشبكة الداخلية، وتجاوز قيود الوصول إلى الشبكة الداخلية، وبناء شبكة عقدة شجرية، وتحقيق وظائف الإدارة بسهولة.

شكرًا لكم جميعًا على نجومكم، ونرحب باستخدام الأداة والإبلاغ عن المشكلات و الأخطاء 😘

يرجى قراءة تعليمات الاستخدام والملاحظات في نهاية المستند بعناية قبل الاستخدام.

إخلاء المسؤولية

يُستخدم هذا المشروع فقط لأغراض أمن الشبكات والتدريس، ويُحظر تمامًا استخدامه لأي أغراض غير قانونية. تأكد من الحصول على إذن صريح من النظام المستهدف قبل إجراء أي اختبار باستخدام هذه الأداة، والالتزام بالقوانين واللوائح المحلية في بلدك/منطقتك. أي عواقب مباشرة أو غير مباشرة (بما في ذلك على سبيل المثال لا الحصر: فقدان البيانات، تلف النظام، المسؤولية القانونية) الناتجة عن استخدام هذه الأداة تكون على مسؤولية المستخدم. المؤلف لا يتحمل أي مسؤولية عن أي إساءة استخدام أو عواقب قانونية ناتجة عنها. استخدام هذه الأداة يعني أنك قد قرأت وفهمت ووافقت على جميع محتويات إخلاء المسؤولية هذا.

الميزات

  • واجهة تفاعلية أكثر سهولة للطرف المدير، تدعم الإكمال التلقائي للأوامر وسجل الأوامر.
  • إدارة شجرة العقد بشكل واضح.
  • عرض معلومات غنية عن العقد.
  • اتصال مباشر / عكسي بين العقد.
  • دعم إعادة الاتصال بين العقد.
  • يمكن الاتصال بين العقد عبر وكيل socks5 / HTTP.
  • يمكن الاتصال بين العقد عبر نفق SSH.
  • يمكن اختيار بروتوكول حركة المرور بين العقد: TCP / HTTP / WS.
  • وكيل حركة مرور socks5 متعدد المستويات، يدعم UDP / TCP و IPv4 / IPv6.
  • الوصول إلى المضيف البعيد عبر SSH من خلال العقدة.
  • شل عن بعد.
  • تحميل وتنزيل الملفات.
  • تعيين المنفذ المحلي / البعيد.
  • إعادة استخدام المنفذ في العقدة.
  • تشغيل / إيقاف الخدمات المختلفة بحرية.
  • المصادقة المتبادلة بين العقد.
  • تشفير حركة المرور بين العقد باستخدام TLS / AES-256-GCM.
  • مقارنة بالإصدار v1.0، تم تقليل حجم الملف بنسبة 25٪.
  • دعم منصات متعددة (Linux / Mac / Windows / MIPS / ARM).

التجميع والعرض

  • استخدم make لتجميع البرنامج الكامل لمنصات متعددة مباشرة، أو راجع Makefile لتجميع برنامج معين.
  • إذا كنت لا ترغب في التجميع، يمكنك استخدام البرنامج المُجمَّع مسبقًا في release.
  • فيديو توضيحي: YouTube

تعليمات الاستخدام

الأدوار

يتكون Stowaway من دورين:

  • admin الطرف المدير الذي يستخدمه مخترق الاختبار.
  • agent الطرف المُدار الذي ينشره مخترق الاختبار.

تعريفات المصطلحات

  • العقدة: تشير إلى admin أو agent.
  • الوضع النشط: العقدة الحالية تتصل بعقدة أخرى بنشاط.
  • الوضع السلبي: العقدة الحالية تستمع على منفذ ما، وتنتظر اتصال عقدة أخرى.
  • المنبع: حركة المرور بين العقدة الحالية والعقدة الأم.
  • المنبع: حركة المرور بين العقدة الحالية وجميع العقد الفرعية.

بداية سريعة

يمكن للأوامر التالية بدء تشغيل أبسط مثيل لـ Stowaway بسرعة.

  • admin: ./stowaway_admin -l 9999
  • agent: ./stowaway_agent -c <IP_admin>:9999

شرح المعلمات

  • admin
root@kitploit:~
المعلمات:
-l  عنوان الاستماع في الوضع السلبي [ip]:<port>
-s  مفتاح تشفير اتصال العقد، يجب أن يكون متطابقًا لجميع العقد (admin && agent).
-c  عنوان العقدة الهدف في الوضع النشط.
--socks5-proxy  عنوان خادم وكيل socks5.
--socks5-proxyu  اسم مستخدم خادم وكيل socks5 (اختياري).
--socks5-proxyp  كلمة مرور خادم وكيل socks5 (اختياري).
--http-proxy  عنوان خادم وكيل HTTP.
--down  نوع بروتوكول المنبع السفلي، افتراضيًا هو حركة TCP الخام، اختياريًا HTTP/WS.
--tls-enable  تفعيل TLS لاتصال العقدة. عند تفعيل TLS، سيتم تعطيل تشفير AES.
--domain  تحديد اسم مجال SNI لـ TLS / WebSocket. إذا كان فارغًا، فسيتم استخدام عنوان العقدة الهدف افتراضيًا.
--heartbeat  تفعيل حزم نبضات القلب.
  • agent
root@kitploit:~
المعلمات:
-l  عنوان الاستماع في الوضع السلبي [ip]:<port>
-s  مفتاح تشفير اتصال العقد.
-c  عنوان العقدة الهدف في الوضع النشط.
--socks5-proxy  عنوان خادم وكيل socks5.
--socks5-proxyu  اسم مستخدم خادم وكيل socks5 (اختياري).
--socks5-proxyp  كلمة مرور خادم وكيل socks5 (اختياري).
--http-proxy  عنوان خادم وكيل HTTP.
--reconnect  فترة إعادة الاتصال بالثواني.
--rehost  عنوان IP المعاد استخدامه عند إعادة استخدام المنفذ.
--report  رقم المنفذ المعاد استخدامه عند إعادة استخدام المنفذ.
--up  نوع بروتوكول المنبع العلوي، افتراضيًا هو حركة TCP الخام، اختياريًا HTTP/WS.
--down  نوع بروتوكول المنبع السفلي، افتراضيًا هو حركة TCP الخام، اختياريًا HTTP/WS.
--cs  نوع ترميز shell للنظام الأساسي، افتراضيًا utf-8، اختياريًا gbk.
--tls-enable  تفعيل TLS لاتصال العقدة. عند تفعيل TLS، سيتم تعطيل تشفير AES.
--domain  تحديد اسم مجال SNI لـ TLS / WebSocket. إذا كان فارغًا، فسيتم استخدام عنوان العقدة الهدف افتراضيًا.

استخدام المعلمات

-l

يستخدم هذا المعامل بنفس الطريقة لكل من admin و agent، ويستخدم فقط في الوضع السلبي.

إذا لم يتم تحديد عنوان IP، فسيتم الاستماع افتراضيًا على 0.0.0.0.

  • admin: ./stowaway_admin -l 9999 أو ./stowaway_admin -l 127.0.0.1:9999
  • agent: ./stowaway_agent -l 9999 أو ./stowaway_agent -l 127.0.0.1:9999

-s

يستخدم هذا المعامل بنفس الطريقة لكل من admin و agent، ويمكن استخدامه في الوضعين النشط والسلبي.

اختياري. إذا كان فارغًا، فهذا يعني أن الاتصال غير مشفر. وإلا، فسيتم تشفير الاتصال باستخدام المفتاح الذي يقدمه المستخدم.

  • admin: ./stowaway_admin -l 9999 -s 123
  • agent: ./stowaway_agent -l 9999 -s 123

-c

يستخدم هذا المعامل بنفس الطريقة لكل من admin و agent، ويستخدم فقط في الوضع النشط.

يمثل عنوان العقدة التي يرغب المستخدم في الاتصال بها.

  • admin: ./stowaway_admin -c 127.0.0.1:9999
  • agent: ./stowaway_agent -c 127.0.0.1:9999

--socks5-proxy / --socks5-proxyu / --socks5-proxyp / --http-proxy

تُستخدم هذه المعاملات الأربعة بنفس الطريقة لكل من admin و agent، وتُستخدم فقط في الوضع النشط.

--socks5-proxy يمثل عنوان خادم وكيل socks5، --socks5-proxyu و --socks5-proxyp اختياريان.

--http-proxy يمثل عنوان خادم وكيل HTTP، بنفس طريقة استخدام socks5.

بدون اسم مستخدم وكلمة مرور:

  • admin: ./stowaway_admin -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx
  • agent: ./stowaway_agent -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx

مع اسم مستخدم وكلمة مرور:

  • admin: ./stowaway_admin -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx --socks5-proxyu xxx --socks5-proxyp xxx
  • agent: ./stowaway_agent -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx --socks5-proxyu xxx --socks5-proxyp xxx

--up / --down

يُستخدمان هذان المعاملان بنفس الطريقة لكل من admin و agent، ويمكن استخدامهما في الوضعين النشط والسلبي.

لكن لاحظ أنه لا يوجد معامل --up في admin.

هذان المعاملان اختياريان. إذا كانا فارغين، فهذا يعني أن حركة المرور العلوية / السفلية هي حركة TCP خام.

إذا كنت ترغب في أن تكون حركة المرور العلوية / السفلية من نوع HTTP / WS، فاضبط هذين المعاملين على http أو ws.

  • admin: ./stowaway_admin -c 127.0.0.1:9999 --down ws
  • agent: ./stowaway_agent -c 127.0.0.1:9999 --up ws أو ./stowaway_agent -c 127.0.0.1:9999 --up ws --down ws

هناك نقطتان يجب ملاحظتهما:

أولاً، عند تعيين حركة المرور العلوية / السفلية لعقدة معينة على TCP / HTTP / WS، يجب أن تكون حركة المرور السفلية / العلوية للعقدة الأصلية / الفرعية المتصلة بها متطابقة، كما يلي:

  • admin: ./stowaway_admin -c 127.0.0.1:9999 --down ws
  • agent: ./stowaway_agent -l 9999 --up ws

في هذه الحالة، يجب على agent تعيين --up إلى ws، وإلا سيحدث خطأ في الشبكة.

ينطبق الشيء نفسه بين agents.

افترض أن agent-1 يستمع على المنفذ 127.0.0.1:10000 وينتظر اتصال العقدة الفرعية، وقد تم تعيين --down ws.

يجب على agent-2 أيضًا تعيين --up إلى ws، وإلا سيحدث خطأ في الشبكة.

  • agent-2: ./stowaway_agent -c 127.0.0.1:10000 --up ws

ثانيًا، نظرًا لأن HTTP هو بروتوكول نصف مزدوج، فهو غير مناسب تمامًا لطبيعة الاتصال الكامل المزدوج لـ Stowaway. لذلك، يقوم تنفيذ HTTP هنا فقط بتنسيق رسائل HTTP وليس سير عمل HTTP كامل الوظائف. لا يزال بإمكانك استخدام هذا البروتوكول، لكن حركة المرور بين Stowaway عند اختيار تنسيق رسالة HTTP لا يمكن إعادة توجيهها عبر nginx. تم الاحتفاظ بهذا الجزء من الكود والوظائف من ناحية لاستخدام HTTP في حالات معينة، ومن ناحية أخرى لتوفير قالب لحركة مرور مخصصة يمكن للمستخدمين الرجوع إليه عند تخصيص البروتوكولات.

إذا كنت بحاجة إلى إعادة توجيه عبر nginx وما شابه، فاستخدم بروتوكول ws مع TLS للاتصال.

--reconnect

يُستخدم هذا المعامل فقط في agent، ويُستخدم فقط في الوضع النشط.

اختياري. إذا لم يتم تعيينه، فلن تحاول العقدة إعادة الاتصال بعد قطع الاتصال بالشبكة. إذا تم تعيينه، فستحاول العقدة إعادة الاتصال بالعقدة الأم كل x ثانية (عدد الثواني الذي تحدده).

  • admin: ./stowaway_admin -l 9999
  • agent: ./stowaway_agent -c 127.0.0.1:9999 --reconnect 10

في هذه الحالة، إذا تم قطع الاتصال بين agent و admin، سيحاول agent إعادة الاتصال بـ admin كل عشر ثوانٍ.

ينطبق الشيء نفسه بين agents.

يمكن استخدام معامل --reconnect مع --socks5-proxy / --socks5-proxyu / --socks5-proxyp / --http-proxy. سيحاول agent إعادة الاتصال عبر الوكيل باستخدام الإعدادات عند بدء التشغيل.

--rehost / --report

هذان المعاملان خاصان، ويُستخدمان فقط في agent. راجع آلية إعادة استخدام المنفذ أدناه للحصول على التفاصيل.

--cs

يُستخدم هذا المعامل فقط في agent، ويمكن استخدامه في كل من الوضعين النشط والسلبي.

يهدف بشكل أساسي إلى حل مشكلة الأحرف المشوشة في وظيفة 'shell'. عندما يعمل agent على نظام أساسي بترميز وحدة التحكم gbk (على سبيل المثال، Windows عادةً) ويعمل admin على نظام أساسي بترميز utf-8، فيجب تعيين هذا المعامل على 'gbk'.

  • Windows: ./stowaway_agent -c 127.0.0.1:9999 -s 123 --cs gbk

--tls-enable

يُستخدم هذان المعاملان بنفس الطريقة لكل من admin و agent، ويمكن استخدامهما في كل من الوضعين النشط والسلبي.

من خلال تعيين هذا الخيار، يمكن تشفير حركة المرور بين العقد باستخدام TLS.

مثال:

  • admin: ./stowaway_admin -l 10000 --tls-enable -s 123
  • agent: ./stowaway_agent -c localhost:10000 --tls-enable -s 123

لاحظ أنه عند تمكين هذا المعامل، سيتم تعطيل تشفير AES افتراضيًا. سيتم استخدام معامل -s فقط للمصادقة المتبادلة بين العقد ووظيفة إعادة استخدام المنفذ.

أيضًا، عند تمكين هذا المعامل، تأكد من تمكين هذا المعامل في كل عقدة (بما في ذلك admin) في الشبكة.

--domain

يُستخدم هذان المعاملان بنفس الطريقة لكل من admin و agent، ويمكن استخدامهما فقط في الوضع النشط.

من خلال تعيين هذا الخيار، يمكن تعيين خيار SNI لمفاوضات TLS أو المضيف الهدف لـ WebSocket لهذه العقدة الحالية.

مثال:

  • admin: ./stowaway_admin -l 10000 --tls-enable -s 123
  • agent: ./stowaway_agent -c xxx.xxx.xxx.xxx:10000 --tls-enable -s 123 --domain xxx.com

--heartbeat

يُستخدم هذا المعامل فقط في admin، ويمكن استخدامه في كل من الوضعين النشط والسلبي.

من خلال تعيين هذا الخيار، يمكن لـ admin إرسال حزم نبضات القلب باستمرار إلى العقدة الأولى، وبالتالي الحفاظ على الاتصال الطويل في حالة وجود وكيل عكسي في المنتصف.

افترض وجود جهاز وكيل عكسي مثل nginx بين admin و agent يقوم بتوجيه المنفذ 8080 إلى المنفذ 8000. مثال:

  • admin: ./stowaway_admin -l 8000 --tls-enable -s 123 --down ws --heartbeat
  • agent: ./stowaway_agent -c xxx.xxx.xxx.xxx:8080 --tls-enable -s 123 --domain xxx.com --up ws

آلية إعادة استخدام المنفذ

يوفر Stowaway حاليًا وظيفة إعادة استخدام المنفذ بناءً على ميزات SO_REUSEPORT و SO_REUSEADDR، ووظيفة إعادة استخدام المنفذ بناءً على IPTABLES.

  • على Linux، يمكن إعادة استخدام معظم منافذ الخدمة.
  • على Windows، لا يمكن إعادة استخدام منافذ IIS و RDP، ويمكن إعادة استخدام منافذ خدمات MySQL و Apache.

طريقة إعادة الاستخدام

  • وضع SO_REUSEPORT و SO_REUSEADDR

    افترض أن agent يستخدم آلية إعادة استخدام المنفذ لإعادة استخدام المنفذ 80.

    في هذه الحالة، يجب على agent تعيين معاملات --rehost و --report و -s.

    • --rehost: يمثل عنوان IP الذي ترغب في إعادة استخدامه، ولا يمكن أن يكون 0.0.0.0، وعادةً ما يكون عنوانًا خارجيًا لبطاقة الشبكة.
    • --report: يمثل المنفذ الذي ترغب في إعادة استخدامه.
    • -s: يمثل مفتاح الاتصال.

    يدعم بشكل رئيسي إعادة الاستخدام على بيئات Windows و Mac، ويدعم Linux أيضًا ولكن مع قيود أكثر.

    • admin: ./stowaway_admin -c 192.168.0.105:80 -s 123
    • agent: ./stowaway_agent --report 80 --rehost 192.168.0.105 -s 123
  • وضع IPTABLES

    افترض أن agent يستخدم آلية إعادة استخدام المنفذ لإعادة استخدام المنفذ 22.

    في هذه الحالة، يجب على agent تعيين معاملات -l و --report و -s.

ملاحظة

  • الأمثلة أعلاه توضح فقط الاتصال بين admin و agent. الاتصال بين agent و agent مشابه، ولا يوجد فرق.

  • إذا تم قتل agent باستخدام ctrl-c أو kill، فسيقوم البرنامج تلقائيًا بتنظيف قواعد iptables. ولكن إذا تم قتله بـ kill -9، فلن يتم التنظيف تلقائيًا.

    لذلك، لمنع عدم تنظيف قواعد iptables بعد خروج غير طبيعي للـ agent مما يتسبب في عدم إمكانية الوصول إلى الخدمة المُعاد استخدامها،

    عند الحاجة إلى الإغلاق، قم بتشغيل: python reuse.py --stop --rhost xxx.xxx.xxx.xxx --rport xxx

    سيؤدي هذا إلى إيقاف تشغيل قواعد إعادة التوجيه، مما يسمح بالوصول إلى الخدمة الأصلية بشكل طبيعي.

  • إذا كنت تستخدم وضع IPTABLES لإعادة استخدام المنفذ، فسيتم فرض الاستماع على 0.0.0.0، ولا يمكن تحديد عنوان IP باستخدام معامل -l.

كيفية تكوين شبكة متعددة المستويات؟

من الأمثلة أعلاه، نرى أن admin و agent واحد فقط يظهران.

والشبكة متعددة المستويات هي جوهر Stowaway.

في Stowaway، يتطلب تكوين شبكة متعددة المستويات استخدام أوامر listen و connect و sshtunnel في admin.

مثال بسيط:

  • admin: ./stowaway_admin -l 9999 -s 123

في هذه المرحلة، يكون agent-1 قد اتصل بـ admin.

  • agent-1: ./stowaway_agent -c 127.0.0.1:9999 -s 123

يريد المستخدم الآن توصيل agent-2، كما يلي:

  • agent-2: ./stowaway_agent -l 10000 -s 123

عندها، يمكن للمستخدم من خلال admin كتابة use 0 -> connect <IP_agent-2>:10000 لإضافته إلى الشبكة، وجعله عقدة فرعية لـ agent-1.

افترض أن المستخدم يريد أيضًا توصيل عقدة agent-3، لكن لا يمكن الوصول إلى agent-3 عبر agent-1.

عندها، يمكن للمستخدم من خلال admin كتابة use 0 -> listen -> اختيار 1.Normal Passive -> إدخال 10001 لجعل agent-1 يستمع على المنفذ 10001 وينتظر اتصال العقدة الفرعية.

بعد أن يكمل admin العملية، يتم تشغيل agent-3 كما يلي:

  • agent-3: ./stowaway_agent -c 127.0.0.1:10001 -s 123

بهذه الطريقة، يمكن إضافة agent-3 كعقدة فرعية أخرى لـ agent-1 إلى الشبكة.

للحصول على شرح مفصل لـ listen و sshtunnel، راجع شرح الأوامر أدناه.

كيفية إعادة الاتصال؟

يدعم Stowaway حاليًا طرقًا متعددة لإعادة الاتصال، ملخصة كالتالي:

أولاً، عندما تنقطع العقدة الأم، لن تخرج إلا العقدة التي بدأت في الوضع النشط ولم يتم تعيين إعادة الاتصال.

إذا تم تعيين إعادة الاتصال، فستحاول العقدة إعادة الاتصال بالفاصل الزمني المحدد.

بالإضافة إلى ذلك، لن تخرج العقد التي بدأت في الوضع السلبي من تلقاء نفسها، بل ستعيد الاستماع على المنفذ المحدد بناءً على معاملات بدء التشغيل. في هذه الحالة، لا يزال بإمكان المستخدم استخدام connect أو sshtunnel لتوصيل هذه العقد مرة أخرى بالشبكة.

ملاحظة

  1. إذا انقطعت إحدى الفروع بسبب تقلب الشبكة أو انقطاع عقدة وسيطة، فيجب عند إعادة الاتصال النشط توصيل العقدة الرأسية للسلسلة المفقودة. على سبيل المثال، بعد admin يأتي node1، ثم يتفرع node1 إلى فرعين: node1->node2->node3->node4، و node1->node5->node6. إذا انقطع node2، فلن تنقطع node3 و node4 بل ستستمر في البقاء على قيد الحياة. في هذه الحالة، إذا أراد المستخدم إعادة توصيل node3 و node4 بالشبكة، فهناك خياران: الأول، إذا كان node1 يمكنه الوصول إلى node3 مباشرة، يمكن للمستخدم في أي وقت في node1 استخدام الأمر connect أو sshtunnel لإعادة توصيل node3 بالشبكة (تذكر، حتى لو كان node1 يمكنه أيضًا الوصول إلى node4، يرجى عدم توصيل node4 مباشرة، بل قم بتوصيل العقدة الرأسية للسلسلة المفقودة (node3->node4) وهي node3)، وبهذه الطريقة يمكن إعادة توصيل node3 و node4 بالشبكة. الخيار الآخر، إذا كان node1 لا يمكنه الوصول إلى node3 مباشرة (أي يجب أن يمر عبر node2)، فيجب أولاً إعادة تشغيل node2 وإضافته إلى الشبكة، ثم استخدام الأمر connect أو sshtunnel في node2 لتوصيل node3، وبالتالي إضافة node3 و node4 إلى الشبكة.

  2. عند انقطاع عقدة، سيتم إيقاف جميع خدمات socks و backward و forward المتعلقة بهذه العقدة وعقدها الفرعية قسرًا.

شرح الأوامر

في وحدة تحكم admin، يمكن للمستخدم استخدام Tab لإكمال الأوامر، وأسهم الاتجاهات للبحث في السجل / تحريك المؤشر.

تنقسم وحدة تحكم admin إلى مستويين. المستوى الأول هو اللوحة الرئيسية، وتحتوي على الأوامر التالية:

  • help: عرض معلومات المساعدة للوحة الرئيسية.
root@kitploit:~
(admin) >> help
  help                                     		عرض معلومات المساعدة
  detail                                  		عرض تفاصيل العقد المتصلة
  topo                                     		عرض طوبولوجيا العقد
  use        <id>                          		تحديد العقدة الهدف التي تريد استخدامها
  exit                                     		الخروج من Stowaway
  • detail: عرض معلومات مفصلة عن العقد المتصلة حاليًا.
root@kitploit:~
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000  Hostname: ph4ntoms-MBP.lan  User: ph4ntom
Memo:
  • topo: عرض علاقات الأبوة بين العقد المتصلة.
root@kitploit:~
(admin) >> topo
Node[0]'s children ->
Node[1]

Node[1]'s children ->
  • use: استخدام agent معين.
root@kitploit:~
(admin) >> use 0
(node 0) >>
  • exit: الخروج من Stowaway.
root@kitploit:~
(admin) >> exit
[*] هل تريد حقًا الخروج من Stowaway؟(y/n): y
[*] مع السلامة!

عندما يستخدم المستخدم الأمر use لتحديد agent ما، فإنه يدخل المستوى الثاني وهو لوحة العقدة، وتحتوي على الأوامر التالية:

  • help: عرض معلومات المساعدة للوحة العقدة.
root@kitploit:~
(node 0) >> help
  help                                            عرض معلومات المساعدة
  status                                          عرض حالة العقدة، بما في ذلك socks/forward/backward
  listen                                          بدء الاستماع على المنفذ في العقدة الحالية
  addmemo    <string>                             إضافة مذكرة للعقدة الحالية
  delmemo                                         حذف مذكرة العقدة الحالية
  ssh        <ip:port>                            بدء SSH عبر العقدة الحالية
  shell                                           بدء شل تفاعلي على العقدة الحالية
  socks      <lport> [username] [pass]            بدء خادم socks5
  stopsocks                                       إيقاف خدمات socks
  connect    <ip:port>                            الاتصال بعقدة جديدة
  sshtunnel  <ip:sshport> <agent port>            استخدام نفق SSH لإضافة العقدة إلى طوبولوجيا الشبكة
  upload     <local filename> <remote filename>   تحميل ملف إلى العقدة الحالية
  download   <remote filename> <local filename>   تنزيل ملف من العقدة الحالية
  forward    <lport> <ip:port>                    تعيين المنفذ المحلي إلى عنوان IP:منفذ بعيد محدد
  stopforward                                     إيقاف خدمات forward
  backward    <rport> <lport>                     تعيين المنفذ البعيد (agent) إلى المنفذ المحلي (admin) بشكل عكسي
  stopbackward                                    إيقاف خدمات backward
  shutdown                                        إنهاء العقدة الحالية
  back                                            العودة إلى اللوحة الرئيسية
  exit                                            الخروج من Stowaway
  • status: عرض حالة socks/forward/backward للعقدة الحالية.
root@kitploit:~
(node 0) >> status
Socks status:
      ListenAddr: 0.0.0.0:10000    Username:    Password:
-------------------------------------------------------------------------------------------
Forward status:
      [1] Listening Addr: [::]:20000 , Remote Addr: 192.168.1.1:22 , Active Connections: 0
      [2] Listening Addr: [::]:30000 , Remote Addr: 192.168.1.1:22 , Active Connections: 0
-------------------------------------------------------------------------------------------
Backward status:
      [1] Remote Port: 40000 , Local Port: 50000 , Active Connections: 0
  • listen: أمر العقدة بالاستماع على منفذ معين وانتظار اتصال العقدة الفرعية.
root@kitploit:~
(node 0) >> listen
[*] تنبيه! إذا اخترت إعادة استخدام IPTables أو SOReuse، فيجب عليك التأكد من أن العقدة قد بدأت في البداية بالطريقة المقابلة!
[*] عند اختيار إعادة استخدام IPTables أو SOReuse، ستستخدم العقدة التكوين الأولي (عند بدء العقدة) لإعادة استخدام المنفذ!
[*] يرجى اختيار الوضع (1. سلبي عادي / 2. إعادة استخدام IPTables / 3. إعادة استخدام SOReuse): 1
[*] يرجى إدخال [ip:]<port> : 10001
[*] في انتظار الاستجابة...
[*] العقدة تستمع الآن على المنفذ 10001

لاحظ أن listen هو أمر خاص نسبيًا. كما ترى، يحتوي listen على ثلاثة أوضاع:

  1. Normal passive: يعني هذا الخيار أن العقدة ستستمع على المنفذ الهدف بالطريقة العادية، وستنتظر اتصال العقدة الفرعية.
  2. IPTables Reuse: يعني هذا الخيار أن العقدة ستستخدم إعادة استخدام IPTables لإعادة استخدام المنفذ، وستنتظر اتصال العقدة الفرعية.
  3. SOReuse: يعني هذا الخيار أن العقدة ستستخدم إعادة استخدام SOReuse لإعادة استخدام المنفذ، وستنتظر اتصال العقدة الفرعية.

الوضع الأول هو الأكثر استخدامًا. إذا استمعت العقدة الأم بهذه الطريقة، فكل ما تحتاجه العقدة الفرعية هو -c <ip_العقدة_الأم>:<port> للانضمام إلى الشبكة.

الوضعين الثاني والثالث خاصان. إذا اختار المستخدم الوضع الثاني أو الثالث، فيجب على المستخدم التأكد من أن العقدة الحالية قد بدأت بالفعل باستخدام إعادة استخدام المنفذ، وإلا فلن يعمل هذان الوضعان.

في الوضعين الثاني والثالث، لن يحتاج المستخدم إلى إدخال أي معلومات؛ ستستخدم العقدة تلقائيًا معاملات بدء التشغيل الخاصة بها لإعادة استخدام المنفذ والاستعداد لقبول اتصال العقدة الفرعية.

بالإضافة إلى ذلك، يمكن لـ listen قبول اتصال عقدة فرعية واحدة فقط في كل مرة. إذا كانت هناك حاجة إلى توصيل عدة عقد فرعية، فيجب تنفيذ أمر listen بعدد المرات المناسب.

  • addmemo: إضافة مذكرة للعقدة الحالية.
root@kitploit:~
(node 0) >> addmemo test
[*] تمت إضافة المذكرة!
(node 0) >> exit
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000  Hostname: ph4ntoms-MBP.lan  User: ph4ntom
Memo:  test
  • delmemo: حذف مذكرة العقدة الحالية.
root@kitploit:~
(node 0) >> delmemo
[*] تم حذف المذكرة!
(node 0) >> exit
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000  Hostname: ph4ntoms-MBP.lan  User: ph4ntom
Memo:
  • ssh: أمر العقدة بالاتصال بالجهاز الهدف عبر SSH.
root@kitploit:~
(node 0) >> ssh 127.0.0.1:22
[*] يرجى اختيار طريقة المصادقة (1. اسم مستخدم && كلمة مرور / 2. شهادة): 1
[*] يرجى إدخال اسم المستخدم: ph4ntom
[*] يرجى إدخال كلمة المرور: *****
[*] في انتظار الاستجابة...
[*] تم الاتصال بالمضيف الهدف عبر SSH بنجاح!
 # ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:03:56]
$ whoami
ph4ntom
 # ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:04:16]
$

في هذا الوضع، سيتم تعطيل مفتاح Tab.

  • shell: الحصول على شل العقدة الحالية.
root@kitploit:~
(node 0) >> shell
[*] في انتظار الاستجابة...
[*] تم بدء تشغيل الشل بنجاح!

bash: no job control in this shell

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
bash-3.2$ whoami
ph4ntom
bash-3.2$

في هذا الوضع، سيتم تعطيل مفتاح Tab.

  • socks: بدء خدمة socks5 على العقدة الحالية.
root@kitploit:~
(node 0) >> socks 7777
[*] محاولة الاستماع على 0.0.0.0:7777......
[*] في انتظار الاستجابة...
[*] تم بدء تشغيل Socks بنجاح!
(node 0) >>

لاحظ أن المنفذ 7777 هنا لا يُفتح على agent، بل على admin.

إذا كنت بحاجة إلى تعيين اسم مستخدم وكلمة مرور، يمكن تغيير الأمر أعلاه إلى socks 7777 <your username> <your password>.

إذا كنت بحاجة إلى تحديد واجهة الاستماع، يمكن تغيير الأمر إلى socks xxx.xxx.xxx.xxx:7777.

  • stopsocks: إيقاف خدمة socks5 على العقدة الحالية.
root@kitploit:~
(node 0) >> stopsocks
Socks Info ---> ListenAddr: 0.0.0.0:7777    Username: <null>    Password: <null>
[*] هل تريد حقًا إيقاف خدمة socks؟(yes/no): yes
[*] جارٍ الإغلاق...
[*] تم إغلاق خدمة Socks بنجاح!
(node 0) >>
  • connect: أمر العقدة الحالية بالاتصال بعقدة فرعية أخرى.
root@kitploit:~
agent-1: ./stowaway_agent -l 10002
root@kitploit:~
(node 0) >> connect 127.0.0.1:10002
[*] في انتظار الاستجابة...
[*] عقدة جديدة متصلة! معرف العقدة هو 1

(node 0) >>
  • sshtunnel: أمر العقدة الحالية بالاتصال بعقدة فرعية أخرى عبر نفق SSH.
root@kitploit:~
agent-2: ./stowaway_agent -l 10003
root@kitploit:~
(node 0) >> sshtunnel 127.0.0.1:22 10003
[*] يرجى اختيار طريقة المصادقة (1. اسم مستخدم && كلمة مرور / 2. شهادة): 1
[*] يرجى إدخال اسم المستخدم: ph4ntom
[*] يرجى إدخال كلمة المرور: ******
[*] في انتظار الاستجابة...
[*] عقدة جديدة متصلة! معرف العقدة هو 2

(node 0) >>

في بيئة الشبكة المقيدة بشدة، يمكن استخدام نفق SSH لإخفاء حركة مرور Stowaway كحركة مرور SSH، وبالتالي تجاوز قيود جدار الحماية.

  • upload: تحميل ملف إلى العقدة الحالية.
root@kitploit:~
(node 0) >> upload test.7z test.xxx
[*] جارٍ نقل الملف، يرجى الانتظار...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
  • download: تنزيل ملف من العقدة الحالية.
root@kitploit:~
(node 0) >> download test.xxx test.xxxx
[*] جارٍ نقل الملف، يرجى الانتظار...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
  • forward: تعيين منفذ على admin إلى منفذ بعيد.
root@kitploit:~
(node 0) >> forward 9000 127.0.0.1:22
[*] محاولة الاستماع على 0.0.0.0:9000......
[*] في انتظار الاستجابة...
[*] تم بدء تشغيل Forward بنجاح!
(node 0) >>
root@kitploit:~
$ ssh 127.0.0.1 -p 9000
Password:
 # ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:19:51]
$
  • stopforward: إيقاف تعيين المنفذ البعيد للعقدة الحالية.
root@kitploit:~
(node 0) >> stopforward
[0] الكل
[1] Listening Addr : [::]:9000 , Remote Addr : 127.0.0.1:22 , Active Connections : 1
[*] هل تريد حقًا إيقاف Forward؟(yes/no): yes
[*] يرجى اختيار واحد للإيقاف: 1
[*] جارٍ الإغلاق...
[*] تم إغلاق خدمة Forward بنجاح!
  • backward: تعيين منفذ على agent إلى منفذ محلي على admin بشكل عكسي.
root@kitploit:~
(node 0) >> backward 9001 22
[*] محاولة طلب العقدة بالاستماع على 0.0.0.0:9001......
[*] في انتظار الاستجابة...
[*] تم بدء تشغيل Backward بنجاح!
(node 0) >>
root@kitploit:~
$ ssh 127.0.0.1 -p 9001
Password:
 # ph4ntom @ ph4ntoms-MBP in ~ 🌈 [17:22:14]
$
  • stopbackward: إيقاف التعيين العكسي للعقدة الحالية.
root@kitploit:~
(node 0) >> stopbackward
[0] الكل
[1] Remote Port : 9001 , Local Port : 22 , Active Connections : 1
[*] هل تريد حقًا إيقاف Backward؟(yes/no): yes
[*] يرجى اختيار واحد للإيقاف: 1
[*] جارٍ الإغلاق...
[*] تم إغلاق خدمة Backward بنجاح!
  • shutdown: أمر العقدة الحالية بالخروج.
root@kitploit:~
(node 1) >> shutdown
[*] تم خروج العقدة 1!
  • back: العودة إلى اللوحة الرئيسية.
root@kitploit:~
(node 1) >> back
(admin) >>
  • exit: الخروج من Stowaway.
root@kitploit:~
(node 1) >> exit
[*] هل تريد حقًا الخروج من Stowaway؟(y/n): y
[*] مع السلامة!

TODO

  • إصلاح الأخطاء
  • دعم TLS
  • دعم نموذج startnode متعدد

ملاحظات

  • هذا البرنامج تم تطويره في أوقات الفراغ لأغراض التعلم، وقد لا يكون هيكل الكود دقيقًا، وقد تحتوي الوظائف على أخطاء. يرجى التفهم.
  • لا يُسمح بإضافة عقد جديدة عندما لا يكون admin متصلاً.
  • يدعم admin عقدة agent واحدة متصلة مباشرة فقط، بينما لا توجد مثل هذه القيود على agent.
  • إذا كان المستخدم يستخدم admin على Windows، فيرجى تنزيل ansicon، أو من هنا. بعد ذلك، ادخل إلى المجلد المناسب لبنية النظام، وشغّل ansicon.exe -i. وإلا، فقد تظهر أحرف مشوشة في admin.
  • يدعم هذا البرنامج فقط UDP ASSOCIATE القياسي بناءً على RFC1928. يرجى الانتباه عند استخدام وكيل socks5 UDP (على سبيل المثال، الماسحات الضوئية)، يجب أن يتوافق بناء الحزمة مع RFC1928 القياسي، ويجب معالجة فقدان الحزم بنفسك.

مشروع 404 StarLink

انضم Stowaway الآن إلى مشروع 404 StarLink

شكر وتقدير

شكرًا للأساتذة والمشاريع التالية على مساعدتهم أثناء تطوير Stowaway:

  • lz520520
  • SignorMercurio
  • MM0x00
  • r0ck3rt
  • Termite
  • Venom
تنزيل الأداة
  • -l: يمثل المنفذ الذي لا يمكن الوصول إليه بشكل طبيعي، وهو المنفذ الذي تريد حقًا أن يستمع عليه agent ويقبل الاتصالات.
  • --report: يمثل المنفذ الذي ترغب في إعادة استخدامه.
  • -s: يمثل مفتاح الاتصال.

يدعم فقط إعادة الاستخدام على بيئة Linux. سيقوم agent بتعديل IPTABLES تلقائيًا، ويتطلب صلاحيات root.

  • agent: ./stowaway_agent --report 22 -l 10000 -s 123

    بعد بدء agent، استخدم reuse.py في دليل script.

    قم أولاً بتعيين قيمة SECRET (قيمة SECRET هي مفتاح الاتصال الذي تم تعيينه عند بدء تشغيل كل عقدة).

    ثم قم بتنفيذ: python reuse.py --start --rhost xxx.xxx.xxx.xxx --rport xxx

    • --rhost: يمثل عنوان agent.
    • --rport: يمثل المنفذ المُعاد استخدامه، في هذا المثال يجب أن يكون 22.
  • عندها يمكن لـ admin الاتصال: ./stowaway_admin -c 192.168.0.105:22 -s 123