
Tunna, उपकरणों का एक समूह है जो किसी भी TCP संचार को HTTP के ऊपर लपेटकर टनल करेगा। इसका उपयोग पूरी तरह से फायरवॉल वाले वातावरणों में नेटवर्क प्रतिबंधों को बायपास करने के लिए किया जा सकता है।
Tunna एक टूल सेट है जो किसी भी TCP संचार को HTTP पर लपेट और सुरंग (tunnel) बनाता है। इसका उपयोग पूरी तरह से फायरवॉल किए गए वातावरण में नेटवर्क प्रतिबंधों को बायपास करने के लिए किया जा सकता है।
v1.1 Alpha संस्करण
_____
|_ _| _ _ __ _ __ __ _
| || | | | '_ \| '_ \ / _` |
| || |_| | | | | | | | (_| |
|_| \__,_|_| |_|_| |_|\__,_|
Tunna 0.1, HTTP पर TCP कनेक्शन टनल करने के लिए, Nikos Vassakis द्वारा
http://www.secforce.co.uk / nikos.vassakis <at> secforce.com
################################################################################################################
TLDR: TCP कनेक्शन को HTTP पर टनल करता है
पूरी तरह से फायरवॉल किए गए वातावरण में (इनबाउंड और आउटबाउंड कनेक्शन प्रतिबंधित - वेबसर्वर पोर्ट को छोड़कर)
वेबशेल का उपयोग रिमोट होस्ट पर किसी भी सेवा से कनेक्ट करने के लिए किया जा सकता है। यह रिमोट होस्ट पर एक स्थानीय पोर्ट पर एक स्थानीय कनेक्शन होगा और इसे फायरवॉल द्वारा अनुमति दी जानी चाहिए।
वेबशेल सेवा पोर्ट से डेटा पढ़ेगा, उसे HTTP पर लपेटेगा और स्थानीय प्रॉक्सी को HTTP प्रतिक्रिया के रूप में भेजेगा।
स्थानीय प्रॉक्सी डेटा को अनरैप करेगा और उसे अपने स्थानीय पोर्ट पर लिखेगा, जहां क्लाइंट प्रोग्राम कनेक्ट होगा।
जब स्थानीय प्रॉक्सी स्थानीय पोर्ट पर डेटा प्राप्त करेगा, तो वह इसे HTTP पोस्ट के रूप में वेबशेल को भेजेगा।
वेबशेल HTTP पोस्ट से डेटा पढ़ेगा और उसे सेवा पोर्ट पर डाल देगा
और फिर से दोहराएं ^--
केवल वेबसर्वर पोर्ट खुला होना चाहिए (आमतौर पर 80/443) पूरा संचार (बाह्य रूप से) HTTP प्रोटोकॉल पर होता है
python proxy.py -u <remoteurl> -l <localport> [options]
--help, -h यह सहायता संदेश दिखाएँ और बाहर निकलें
--url=URL, -u URL रिमोट वेबशेल का URL
--lport=LOCAL_PORT, -l LOCAL_PORT
स्थानीय सुनने वाला पोर्ट
--verbose, -v विस्तृत (पैकेट आकार आउटपुट)
--buffer=BUFFERSIZE, -b BUFFERSIZE*
HTTP अनुरोध आकार (कुछ वेबशेल पर आकार की सीमाएँ होती हैं)
यदि SOCKS प्रॉक्सी का उपयोग किया जाता है तो विकल्प अनदेखा किए जाते हैं
--no-socks, -n SOCKS प्रॉक्सी का उपयोग न करें
--rport=REMOTE_PORT, -r REMOTE_PORT
वेबशेल के कनेक्ट होने के लिए सेवा का रिमोट पोर्ट
--addr=REMOTE_IP, -a REMOTE_IP
रिमोट वेबशेल के कनेक्ट होने का पता (डिफ़ॉल्ट = 127.0.0.1)
स्थानीय प्रॉक्सी के माध्यम से कनेक्शन टनल करना
--up-proxy=UPPROXY, -x UPPROXY
अपस्ट्रीम प्रॉक्सी (http://proxyserver.com:3128)
--auth, -A अपस्ट्रीम प्रॉक्सी को प्रमाणीकरण की आवश्यकता है
--ping-interval=PING_DELAY, -q PING_DELAY
वेबशेल पिंगिंग थ्रेड अंतराल (डिफ़ॉल्ट = 0.5)
--start-ping, -s पहले पिंगिंग थ्रेड शुरू करें - कुछ सेवाएँ पहले डेटा भेजती हैं (जैसे SSH)
--cookie, -C अनुरोध कुकीज़
--authentication, -t मूल प्रमाणीकरण
उपयोग उदाहरण:
python proxy.py -u http://10.3.3.1/conn.aspx -l 8000 -v
# इससे पोर्ट 8000 पर एक स्थानीय SOCKS प्रॉक्सी सर्वर शुरू होगा
# यह कनेक्शन HTTP पर लपेटा जाएगा और रिमोट सर्वर पर अनरैप किया जाएगा
python proxy.py -u http://10.3.3.1/conn.aspx -l 8000 -x https://192.168.1.100:3128 -A -v
# इससे पोर्ट 8000 पर एक स्थानीय SOCKS प्रॉक्सी सर्वर शुरू होगा
# यह एक स्थानीय प्रॉक्सी (https://192.168.1.100:3128) जिसे प्रमाणीकरण की आवश्यकता है, के माध्यम से रिमोट Tunna वेबशेल से कनेक्ट होगा
python proxy.py -u http://10.3.3.1/conn.aspx -l 4444 -r 3389 -b 8192 -v --no-socks
# इससे वेबशेल और रिमोट होस्ट RDP (3389) सेवा के बीच एक कनेक्शन शुरू होगा
# RDP क्लाइंट लोकलहोस्ट पोर्ट 4444 पर कनेक्ट हो सकता है
# यह कनेक्शन HTTP पर लपेटा जाएगा
रिमोट सर्वर पर एक वेबशेल अपलोड करने की क्षमता
यह एक POC कोड है और सर्वर पर DoS का कारण बन सकता है।
निष्पादन के बाद या त्रुटि पर सफाई के सभी प्रयास किए गए हैं (कोई वादा नहीं)
स्थानीय परीक्षणों के आधार पर:
* JSP बफर को सीमित करने की आवश्यकता है (बफर विकल्प):
4096 ने Linux Apache Tomcat में काम किया
1024 ने XAMPP Apache Tomcat में काम किया (धीमा)
* इससे अधिक होने पर रिमोट सॉकेट पर बाइट्स गायब होने की समस्या उत्पन्न हुई
उदा: ruby proxy.rb -u http://10.3.3.1/conn.jsp -l 4444 -r 3389 -b 1024 -v
* सॉकेट डिफ़ॉल्ट रूप से सक्षम नहीं हैं:
php विंडोज (IIS + PHP)
XAMPP विंडोज
php लिनक्स (PHP बिल्ट-इन वेब सर्वर/apache + PHP)
यदि आपको त्रुटि Uncaught Error: Call to undefined function socket_create() मिलती है
तो देखें https://stackoverflow.com/questions/6137823/fatal-error-call-to-undefined-function-socket-create
* वेबशेल पर कैरिज रिटर्न (कोड के बाहर):
प्रतिक्रियाओं पर भेजे जाते हैं / स्थानीय सॉकेट पर लिखे जाते हैं --> पैकेट दूषित हो जाते हैं
* विंडोज के लिए PHP वेबशेल: लूप फ़ंक्शन रिमोट सॉकेट को DoS करता है:
sleep फ़ंक्शन जोड़ा गया -> काम करता है लेकिन थोड़ा धीमा है
* PHP वेबशेल को फ़ाइल के अंत में नई लाइन वर्णों को हटाने की आवश्यकता है ("?>") के बाद
क्योंकि ये हर प्रतिक्रिया में भेजे जाएंगे और Tunna को भ्रमित करेंगे
वेबशेल:
conn.jsp Apache Tomcat पर परीक्षित (विंडोज + लिनक्स)
conn.aspx IIS 6+8 पर परीक्षित (विंडोज सर्वर 2003/2012)
conn.php LAMP + XAMPP + IIS पर परीक्षित (विंडोज + लिनक्स)
वेबसर्वर:
webserver.py Python 2.6.5 के साथ परीक्षित
प्रॉक्सी:
proxy.py Python 2.6.5 के साथ परीक्षित
डेटा HTTP पोस्ट बॉडी में कच्चा भेजा जाता है (कोई पोस्ट वेरिएबल नहीं)
निर्देश / कॉन्फ़िगरेशन URL पैरामीटर (HTTP Get) के रूप में वेबशेल को भेजा जाता है
डेटा HTTP बॉडी (HTTP Post) में भेजा जाता है
Websockets का उपयोग नहीं किया गया: अधिकांश वेबसर्वरों द्वारा डिफ़ॉल्ट रूप से समर्थित नहीं
अतुल्यकालिक HTTP प्रतिक्रियाएँ वास्तव में संभव नहीं हैं
प्रॉक्सी सर्वर को लगातार क्वेरी करता है (डिफ़ॉल्ट 0.5 सेकंड)
पहला पैकेट वेबशेल के साथ एक सत्र आरंभ करता है - एक कुकी वापस प्राप्त करता है उदा: http://webserver/conn.ext?proxy
दूसरा पैकेट वेबशेल को कनेक्शन कॉन्फ़िगरेशन विकल्प भेजता है उदा: http://webserver/conn.ext?proxy&port=4444&ip=127.0.0.1
वेबशेल के कनेक्ट होने के लिए IP और पोर्ट
यह एक थ्रेडेड अनुरोध है:
php में यह अनुरोध वेबशेल सॉकेट कनेक्शन को जीवित रखने के लिए एक अनंत लूप में चला जाएगा
अन्य वेबशेल में [OK] वापस प्राप्त होता है
एक स्थानीय सॉकेट बनाया जाएगा जहां क्लाइंट प्रोग्राम कनेक्ट होगा एक बार क्लाइंट कनेक्ट हो जाने पर पिंगिंग थ्रेड आरंभ होता है और निष्पादन शुरू होता है। सॉकेट पर कोई भी डेटा (क्लाइंट से) पढ़ा जाता है और HTTP पोस्ट अनुरोध के रूप में भेजा जाता है वेबशेल सॉकेट पर कोई भी डेटा POST अनुरोध की प्रतिक्रिया के रूप में भेजा जाता है
क्योंकि HTTP प्रतिक्रियाएँ अतुल्यकालिक नहीं हो सकतीं यह थ्रेड एक अंतराल (डिफ़ॉल्ट 0.5 सेकंड) के आधार पर वेबशेल पर HTTP Get अनुरोध करेगा यदि वेबशेल के पास भेजने के लिए डेटा है, तो वह (अतिरिक्त रूप से) इस अनुरोध के उत्तर में भेजेगा अन्यथा वह एक खाली प्रतिक्रिया भेजता है
सामान्यतः: स्थानीय प्रॉक्सी से डेटा HTTP पोस्ट के साथ भेजा जाता है वेबशेल से डेटा पूछने के लिए हर 0.5 सेकंड में Get अनुरोध होते हैं यदि वेबशेल पक्ष पर डेटा है, तो इन अनुरोधों में से किसी एक के उत्तर के रूप में भेजा जाता है
वेबशेल स्थानीय या रिमोट होस्ट पर एक सॉकेट से कनेक्ट होता है सॉकेट पर लिखा गया कोई भी डेटा प्रॉक्सी को एक अनुरोध (POST/GET) के उत्तर के रूप में वापस भेजा जाता है पोस्ट के साथ प्राप्त कोई भी डेटा सॉकेट पर लिखा जाता है
सभी अनुरोधों में वेबशेल द्वारा संभाले जाने के लिए URL पैरामीटर "proxy" सेट होना चाहिए (http://webserver/conn.ext?proxy)
सभी थ्रेड को मारता है और स्थानीय सॉकेट को बंद करता है वेबशेल को proxy&close भेजता है: रिमोट थ्रेड को मारता है और सॉकेट बंद करता है
SOCKS समर्थन Tunna के लिए एक ऐडॉन मॉड्यूल है। स्थानीय रूप से यह एक अलग थ्रेड है जो कनेक्शन अनुरोधों और ट्रैफ़िक को संभालता है, एक हेडर जोड़ता है जो पोर्ट और पैकेट के आकार को निर्दिष्ट करता है और इसे Tunna को अग्रेषित करता है। Tunna इसे रिमोट वेबसर्वर को भेजता है, HTTP हेडर हटाता है और पैकेट को रिमोट SOCKS प्रॉक्सी को अग्रेषित करता है। रिमोट SOCKS प्रॉक्सी कनेक्शन आरंभ करता है और प्राप्त पोर्ट को स्थानीय पोर्ट से मैप करता है। यदि रिमोट SOCKS प्रॉक्सी को सेवा से डेटा प्राप्त होता है, तो वह मैपिंग तालिका को देखता है और उस पोर्ट को ढूंढता है जिस पर उसे प्रतिक्रिया देनी है, पोर्ट को एक हेडर के रूप में जोड़ता है ताकि स्थानीय SOCKS प्रॉक्सी को पता चले कि डेटा कहां अग्रेषित करना है। प्राप्त पोर्ट से कोई भी ट्रैफ़िक स्थानीय पोर्ट पर अग्रेषित किया जाएगा और इसके विपरीत।
Tunna, TCP Tunneling Over HTTP Nikos Vassakis कॉपीराइट (C) 2014 SECFORCE.
यह उपकरण केवल कानूनी उद्देश्यों के लिए है।
यह प्रोग्राम मुफ्त सॉफ़्टवेयर है: आप इसे फ्री सॉफ़्टवेयर फाउंडेशन द्वारा प्रकाशित GNU जनरल पब्लिक लाइसेंस के संस्करण 3 या (आपकी पसंद पर) किसी भी बाद के संस्करण की शर्तों के तहत पुनर्वितरित और/या संशोधित कर सकते हैं।
यह प्रोग्राम इस उम्मीद में वितरित किया जाता है कि यह उपयोगी होगा, लेकिन बिना किसी वारंटी के; यहां तक कि व्यापारिकता या किसी विशेष उद्देश्य के लिए उपयुक्तता की निहित वारंटी के बिना। अधिक जानकारी के लिए GNU जनरल पब्लिक लाइसेंस देखें।
आपको इस प्रोग्राम के साथ GNU जनरल पब्लिक लाइसेंस की एक प्रति प्राप्त हुई होगी। यदि नहीं, तो http://www.gnu.org/licenses/ देखें।