
Venom - पेनिट्रेशन टेस्टर्स के लिए एक मल्टी-हॉप प्रॉक्सी
Venom एक गो में विकसित मल्टी-लेवल प्रॉक्सी टूल है जो पेनिट्रेशन टेस्टर्स के लिए डिज़ाइन किया गया है।
Venom कई नोड्स को जोड़ सकता है, और फिर नोड्स का उपयोग स्प्रिंगबोर्ड के रूप में करके मल्टी-लेवल प्रॉक्सी का निर्माण कर सकता है।
पेनिट्रेशन टेस्टर्स आसानी से Venom का उपयोग करके नेटवर्क ट्रैफ़िक को मल्टी-लेयर इंट्रानेट में प्रॉक्सी कर सकते हैं, और प्रॉक्सी नोड्स को आसानी से प्रबंधित कर सकते हैं।
यह उपकरण केवल सुरक्षा अनुसंधान और शिक्षण तक सीमित है, उपयोगकर्ता इस उपकरण के उपयोग से होने वाली सभी कानूनी और संबंधित जिम्मेदारियाँ वहन करता है! लेखक कोई कानूनी या संबंधित जिम्मेदारी नहीं लेता है!
चूँकि IoT उपकरणों (arm/mips/... आर्किटेक्चर) में आमतौर पर सीमित संसाधन होते हैं, बाइनरी फ़ाइल का आकार कम करने के लिए, IoT पर्यावरण के लिए संकलित बाइनरी फ़ाइलें पोर्ट रीयूज़ और SSH टनल सुविधाओं का समर्थन नहीं करती हैं, और मेमोरी उपयोग को कम करने के लिए नेटवर्क समवर्ती और बफ़र आकार को सीमित किया गया है।
आप सीधे release में संकलित निष्पादन योग्य फ़ाइल डाउनलोड और उपयोग कर सकते हैं।
यदि आप स्रोत कोड से इस प्रोजेक्ट को संकलित करना चाहते हैं, तो go >= 1.11 स्थापित करना आवश्यक है, फिर नीचे दिए गए आदेश निष्पादित करें।
go get -u github.com/Dliv3/Venom/...
# $GOPATH एक पर्यावरण चर है जो Go स्थापित करते समय कॉन्फ़िगर किया गया है, इसे go env कमांड द्वारा देखा जा सकता है
cd $GOPATH/src/github.com/Dliv3/Venom
# संकलित बाइनरी फ़ाइलें वर्तमान निर्देशिका के अंतर्गत release फ़ोल्डर में संग्रहीत हैं
./build.sh
Youtube डेमो वीडियो: 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 पर आप अधिकांश सेवा पोर्ट को रीयूज़ कर सकते हैं। रीयूज़ किए गए पोर्ट अभी भी सामान्य रूप से अपनी मूल सेवा प्रदान कर सकते हैं।
पहली पोर्ट रीयूज़ विधि
# उदाहरण के लिए Windows पर apache के साथ
# apache के 80 पोर्ट को रीयूज़ करें, apache द्वारा सामान्य http सेवा प्रदान करने पर कोई प्रभाव नहीं पड़ता
# -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 Help information.
exit Exit.
show Display network topology.
getdes View description of the target node.
setdes [info] Add a description to the target node.
goto [id] Select id as the target node.
listen [lport] Listen on a port on the target node.
connect [rhost] [rport] Connect to a new node through the target node.
sshconnect [user@ip:port] [dport] Connect to a new node through ssh tunnel.
shell Start an interactive shell on the target node.
upload [local_file] [remote_file] Upload files to the target node.
download [remote_file] [local_file] Download files from the target node.
socks [lport] Start a socks5 server.
lforward [lhost] [sport] [dport] Forward a local sport to a remote dport.
rforward [rhost] [sport] [dport] Forward a remote sport to a local dport.
show नेटवर्क टोपोलॉजी प्रदर्शित करें
A admin नोड को दर्शाता है, संख्याएँ agent नोड्स को दर्शाती हैं।
नीचे दिया गया टोपोलॉजी आरेख दर्शाता है कि admin नोड के नीचे नोड 1 जुड़ा है, नोड 1 के नीचे नोड 2 और 4 जुड़े हैं, और नोड 2 के नीचे नोड 3 जुड़ा है।
(node 1) >>> show
A
+ -- 1
+ -- 2
+ -- 3
+ -- 4
script/port_reuse.py का उपयोग करने की आवश्यकता है।दूसरी पोर्ट रीयूज़ विधि
# उदाहरण के लिए Linux पर apache के साथ
# root अनुमति आवश्यक है
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 फ़ॉरवर्डिंग नियम को चालू या बंद करने के लिए एक विशेष TCP पैकेट के माध्यम से iptables -m recent का उपयोग किया गया है।
यहाँ का कार्यान्वयन https://threathunter.org/topic/594545184ea5b2f5516e2033 का संदर्भ लेता है।
# Linux होस्ट पर agent शुरू करके 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 नोड पर show कमांड चलाकर नेटवर्क टोपोलॉजी और नोड नंबरों को सिंक्रोनाइज़ करना आवश्यक है।
goto किसी नोड पर संचालन करें
(admin node) >>> goto 1
(node 1) >>>
किसी नोड पर goto करने के बाद, आप नीचे वर्णित कमांड का उपयोग कर सकते हैं।
getdes/setdes नोड जानकारी विवरण प्राप्त करें/सेट करें
(node 1) >>> setdes linux x64 blahblahblah
(node 1) >>> getdes
linux x64 blahblahblah
connect/listen/sshconnect नोड्स को आपस में जोड़ना
नोड 1 192.168.0.103 के 9999 पोर्ट से कनेक्ट करता है:
(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
नोड 1 पर 9997 पोर्ट सुनें, फिर दूसरी मशीन पर ./agent_linux_x64 -rhost 192.168.204.139 -rport 9997 चलाकर नोड 1 से कनेक्ट करें।
(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 चलाएँ, नोड 3 sshconnect के माध्यम से SSH टनल स्थापित करके 192.168.0.104 के 9999 पोर्ट से कनेक्ट करता है। आप प्रमाणीकरण के लिए पासवर्ड या 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 को नोड 1 पर /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!
नोड 1 से फ़ाइल /tmp/test2.pdf को स्थानीय /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 admin नोड के स्थानीय 8888 पोर्ट को नोड 1 के 8888 पोर्ट पर फ़ॉरवर्ड करता है।
(node 1) >>> lforward 127.0.0.1 8888 8888
forward local network 127.0.0.1 port 8888 to remote port 8888
rforward नोड 1 नेटवर्क के 192.168.204.103 के 8889 पोर्ट को admin नोड के स्थानीय 8889 पोर्ट पर फ़ॉरवर्ड करता है।
(node 1) >>> rforward 192.168.204.103 8889 8889
forward remote network 192.168.204.103 port 8889 to local port 8889