
Venom - وكيل متعدد القفزات لمختبرِي الاختراق
Venom هي أداة وكيل متعدد المستويات مُطوَّرة بلغة Go ومصممة لمختبري الاختراق.
تسمح Venom بربط عدة عقد، ثم استخدام هذه العقد كمنصات انطلاق لبناء وكيل متعدد المستويات.
يمكن لمختبري الاختراق استخدام Venom بسهولة لتوجيه حركة مرور الشبكة عبر طبقات متعددة من الشبكات الداخلية، وإدارة عقد الوكيل بسهولة.
هذه الأداة مخصصة للبحث الأمني والتعليم فقط، ويتحمل المستخدم جميع المسؤوليات القانونية وما يتعلق بها نتيجة استخدام هذه الأداة! المؤلف لا يتحمل أي مسؤولية قانونية أو ذات صلة!
نظرًا لأن أجهزة إنترنت الأشياء (معماريات arm/mips/...) عادةً ما تكون محدودة الموارد، ومن أجل تقليل حجم الملف الثنائي، فإن الملفات الثنائية المترجمة لبيئة إنترنت الأشياء في هذا المشروع لا تدعم ميزتَي إعادة استخدام المنافذ ونفق SSH، كما أنها تحد من عدد الاتصالات المتزامنة وحجم المخزن المؤقت لتقليل استخدام الذاكرة.
يمكنك تنزيل واستخدام الملفات التنفيذية المترجمة مباشرة من الإصدارات
إذا كنت ترغب في ترجمة المشروع من المصدر، فستحتاج إلى تثبيت go >= 1.11، ثم تنفيذ الأوامر التالية:
go get -u github.com/Dliv3/Venom/...
# $GOPATH هو متغير بيئة تم تكوينه عند تثبيت Go، ويمكن التحقق منه باستخدام الأمر go env
cd $GOPATH/src/github.com/Dliv3/Venom
# الملفات الثنائية المترجمة تُخزَّن في مجلد release داخل الدليل الحالي
./build.sh
فيديو توضيحي على اليوتيوب: https://www.youtube.com/playlist?list=PLtZO9vwOND91vZ7yCmlAvISmEl2iQKjdI
يمكن لكل من عقدة admin وعقدة agent الاستماع للاتصالات أو بدء الاتصالات
عقدة admin تستمع على منفذ، وعقدة agent تبدأ الاتصال:
./admin_macos_x64 -lport 9999
./agent_linux_x64 -rhost 192.168.0.103 -rport 9999
عقدة agent تستمع على منفذ، وعقدة admin تبدأ الاتصال:
./agent_linux_x64 -lport 8888
./admin_macos_x64 -rhost 192.168.204.139 -rport 8888
عقدة agent تدعم إعادة استخدام المنافذ
توفر agent طريقتين لإعادة استخدام المنافذ:
باستخدام ميزة إعادة استخدام المنافذ التي توفرها Venom، يمكن على Windows إعادة استخدام منافذ خدمات مثل Apache وMySQL، ولا يمكن حاليًا إعادة استخدام منافذ خدمات مثل RDP وIIS، بينما يمكن على Linux إعادة استخدام معظم منافذ الخدمات. تظل المنافذ المُعاد استخدامها قادرة على تقديم خدماتها الأصلية بشكل طبيعي.
الطريقة الأولى لإعادة استخدام المنافذ
# مثال على Apache تحت Windows
# إعادة استخدام منفذ Apache 80، دون التأثير على خدمة http العادية لـ Apache
# قيمة -lhost هي عنوان IP المحلي، لا يمكن كتابة 0.0.0.0 وإلا فلن تنجح إعادة استخدام المنفذ
./agent.exe -lhost 192.168.204.139 -reuse-port 80
./admin_macos_x64 -rhost 192.168.204.139 -rport 80
الطريقة الثانية لإعادة استخدام المنافذ
# مثال على Apache تحت Linux
# تتطلب صلاحيات الجذر
sudo ./agent_linux_x64 -lport 8080 -reuse-port 80
تضع هذه الطريقة قواعد iptables على الجهاز المحلي لتوجيه حركة المرور من reuse-port إلى lport، ثم تقوم agent بتوزيع حركة المرور.
يجب ملاحظة أنه إذا تم إنهاء البرنامج عبر إشارات sigterm أو sigint (kill أو ctrl-c)، يمكن للبرنامج تنظيف قواعد iptables تلقائيًا. إذا تم قتل agent باستخدام kill -9، فلن يتمكن من تنظيف قواعد iptables تلقائيًا، وسيتطلب ذلك التنظيف اليدوي لأن برنامج agent لا يمكنه معالجة إشارة sigkill.
لتجنب عدم قدرة قواعد iptables على التنظيف التلقائي مما يؤدي إلى عدم قدرة المخترق على الوصول إلى خدمة المنفذ 80، تستخدم الطريقة الثانية iptables -m recent للتحكم في تشغيل قواعد إعادة التوجيه عبر حزم TCP خاصة.
يعتمد التنفيذ هنا على https://threathunter.org/topic/594545184ea5b2f5516e2033
# تشغيل agent على الجهاز Linux يضع قواعد iptables
# إذا كان rhost في الشبكة الداخلية، يمكن استخدام وكيل SOCKS5 لتوجيه حركة مرور السكريبت، راجع استخدام وكيل SOCKS5 أدناه
python scripts/port_reuse.py --start --rhost 192.168.204.135 --rport 80
# الاتصال بعقدة agent
./admin_macos_x64 -rhost 192.168.204.135 -rport 80
# لإيقاف قواعد إعادة التوجيه
python scripts/port_reuse.py --stop --rhost 192.168.204.135 --rport 80
تشفير الاتصالات بين العقد
توفر Venom تشفير الاتصالات بين العقد، ويمكن للمستخدم تحديد كلمة مرور عبر خيار -passwd لإنشاء مفتاح التشفير AES.
# تحديد كلمة المرور عبر -passwd كـ dlive@dubhe
./admin_macos_x64 -lport 8889 -passwd dlive@dubhe
# agent يحدد نفس كلمة المرور للاتصال بعقدة admin
./agent_macos_x64 -rhost 192.168.0.103 -rport 8889 -passwd dlive@dubhe
help طباعة معلومات المساعدة
(admin node) >>> help
help معلومات المساعدة.
exit الخروج.
show عرض هيكل الشبكة.
getdes عرض وصف العقدة الهدف.
setdes [info] إضافة وصف للعقدة الهدف.
goto [id] تحديد id كعقدة هدف.
listen [lport] الاستماع على منفذ على العقدة الهدف.
connect [rhost] [rport] الاتصال بعقدة جديدة عبر العقدة الهدف.
sshconnect [user@ip:port] [dport] الاتصال بعقدة جديدة عبر نفق SSH.
shell بدء شل تفاعلي على العقدة الهدف.
upload [local_file] [remote_file] رفع ملفات إلى العقدة الهدف.
download [remote_file] [local_file] تنزيل ملفات من العقدة الهدف.
socks [lport] بدء خادم SOCKS5.
lforward [lhost] [sport] [dport] إعادة توجيه منفذ محلي إلى منفذ بعيد.
rforward [rhost] [sport] [dport] إعادة توجيه منفذ بعيد إلى منفذ محلي.
show عرض هيكل الشبكة
A تمثل عقدة admin، الأرقام تمثل عقد agent
يوضح هيكل الشبكة أدناه أن عقدة admin متصلة بالعقدة 1، والعقدة 1 متصلة بالعقدتين 2 و4، والعقدة 2 متصلة بالعقدة 3
(node 1) >>> show
A
+ -- 1
+ -- 2
+ -- 3
+ -- 4
يجب ملاحظة أنه لتشغيل العقد الجديدة، يجب أولاً تنفيذ الأمر show في عقدة admin لمزامنة هيكل الشبكة وأرقام العقد.
goto الانتقال إلى عقدة معينة
(admin node) >>> goto 1
(node 1) >>>
بعد الانتقال إلى عقدة معينة، يمكنك استخدام الأوامر التالية.
getdes/setdes الحصول على/تعيين وصف العقدة
(node 1) >>> setdes linux x64 blahblahblah
(node 1) >>> getdes
linux x64 blahblahblah
connect/listen/sshconnect الاتصال بين العقد
العقدة node 1 تتصل بالمنفذ 9999 لـ 192.168.0.103