
تونّا هي مجموعة من الأدوات التي تقوم بتغليف ونفق أي اتصال TCP عبر HTTP. يمكن استخدامها لتجاوز قيود الشبكة في بيئات جدران الحماية الكاملة.
مجموعة أدوات تقوم بلف ونفق أي اتصال TCP عبر HTTP. يمكن استخدامها لتجاوز قيود الشبكة في البيئات المحمية بالكامل بجدران الحماية.
v1.1 إصدار ألفا
_____
|_ _| _ _ __ _ __ __ _
| || | | | '_ \| '_ \ / _` |
| || |_| | | | | | | | (_| |
|_| \__,_|_| |_|_| |_|\__,_|
Tunna 0.1، لنفق اتصالات TCP عبر HTTP بواسطة Nikos Vassakis
http://www.secforce.co.uk / nikos.vassakis <at> secforce.com
################################################################################################################
TLDR: ينفق اتصالات TCP عبر HTTP
في بيئة محمية بالكامل بجدران الحماية (اتصالات الوارد والصادر مقيدة - باستثناء منفذ خادم الويب)
يمكن استخدام الويبشيل للاتصال بأي خدمة على المضيف البعيد. سيكون هذا اتصالاً محلياً على منفذ محلي في المضيف البعيد و يجب أن يسمح به جدار الحماية.
سيقرأ الويبشيل البيانات من منفذ الخدمة ويغلفها عبر HTTP ويرسلها كاستجابة HTTP إلى الوكيل المحلي.
سيفك الوكيل المحلي تغليف البيانات ويكتبها إلى منفذه المحلي حيث سيتصل برنامج العميل.
عندما يستقبل الوكيل المحلي بيانات على المنفذ المحلي، سيرسلها إلى الويبشيل كـ HTTP Post.
سيقرأ الويبشيل البيانات من HTTP Post ويضعها على منفذ الخدمة
ويتكرر ذلك --^
يجب أن يكون منفذ خادم الويب مفتوحاً فقط (عادة 80/443) يتم الاتصال بأكمله (خارجياً) عبر بروتوكول HTTP
python proxy.py -u <remoteurl> -l <localport> [options]
--help, -h عرض رسالة المساعدة هذه والخروج
--url=URL, -u 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
عنوان IP للويبشيل البعيد للاتصال به (الافتراضي = 127.0.0.1)
نفق الاتصال عبر وكيل محلي
--up-proxy=UPPROXY, -x UPPROXY
الوكيل العلوي (http://proxyserver.com:3128)
--auth, -A الوكيل العلوي يتطلب مصادقة
--ping-interval=PING_DELAY, -q PING_DELAY
فاصل زمني لخيط ping الخاص بـ webshprx (الافتراضي = 0.5)
--start-ping, -s بدء خيط ping أولاً - بعض الخدمات ترسل البيانات أولاً (مثل SSH)
--cookie, -C كوكيز الطلب
--authentication, -t مصادقة أساسية
مثال الاستخدام:
python proxy.py -u http://10.3.3.1/conn.aspx -l 8000 -v
# سيبدأ هذا خادم وكيل SOCKS محلي على المنفذ 8000
# سيتم تغليف هذا الاتصال عبر HTTP وفك تغليفه في الخادم البعيد
python proxy.py -u http://10.3.3.1/conn.aspx -l 8000 -x https://192.168.1.100:3128 -A -v
# سيبدأ هذا خادم وكيل SOCKS محلي على المنفذ 8000
# سيتصل عبر وكيل محلي (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 الاتصال على localhost منفذ 4444
# سيتم تغليف هذا الاتصال عبر HTTP
القدرة على رفع ويبشيل على الخادم البعيد
هذا كود إثبات المفهوم وقد يتسبب في رفض الخدمة للخادم.
تم بذل كل الجهود لتنظيف ما بعد التنفيذ أو عند الخطأ (لا ضمانات)
بناءً على الاختبارات المحلية:
* يجب تحديد حجم المخزن المؤقت لـ JSP (خيار buffer):
4096 يعمل مع 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
* إرجاع الأحرف (carriage returns) في الويبشيلات (خارج الكود):
تُرسل في الاستجابات / تُكتب على المقبس المحلي --> تفسد الحزم
* ويبشيل PHP لويندوز: وظيفة الحلقة تسبب رفض الخدمة للمقبس البعيد:
أضيفت وظيفة 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 Post (بدون متغير post)
تُرسل التعليمات / الإعدادات إلى الويبشيل كمعلمات 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]
سيتم إنشاء مقبس محلي حيث سيتصل به برنامج العميل بمجرد اتصال العميل، يبدأ خيط ping ويبدأ التنفيذ. تقرأ أي بيانات موجودة على المقبس (من العميل) وتُرسل كطلب HTTP Post تُرسل أي بيانات موجودة على مقبس الويبشيل كاستجابة لطلب POST
لأن استجابات HTTP لا يمكن أن تكون غير متزامنة. سوف يقوم هذا الخيط بطلبات HTTP Get على الويبشيل بناءً على فاصل زمني (الافتراضي 0.5 ثانية) إذا كان لدى الويبشيل بيانات لإرسالها، فسيرسلها (أيضاً) كرد على هذا الطلب وإلا سيرسل استجابة فارغة
بشكل عام: تُرسل البيانات من الوكيل المحلي مع HTTP Post هناك طلبات Get كل 0.5 ثانية لاستعلام الويبشيل عن البيانات إذا كانت هناك بيانات في جانب الويبشيل تُرسل كرد على أحد هذه الطلبات
يتصل الويبشيل بمقبس على مضيف محلي أو بعيد. تُرسل أي بيانات تُكتب على المقبس مرة أخرى إلى الوكيل كرد على طلب (POST/GET) تُكتب أي بيانات تُستقبل مع post على المقبس.
يجب أن تحتوي جميع الطلبات على معلمة URL "proxy" لكي يتم التعامل معها بواسطة الويبشيل (http://webserver/conn.ext?proxy)
يقتل جميع الخيوط ويغلق المقبس المحلي يرسل proxy&close إلى الويبشيل: يقتل الخيوط البعيدة ويغلق المقبس
دعم SOCKS هو وحدة إضافية لـ Tunna. محلياً هو خيط منفصل يتعامل مع طلبات الاتصال وحركة المرور، ويضيف رأساً يحدد المنفذ وحجم الحزمة ويوجهها إلى Tunna. ترسلها Tunna إلى خادم الويب البعيد، تزيل رؤوس HTTP وتوجه الحزمة إلى وكيل SOCKS البعيد. يقوم وكيل SOCKS البعيد ببدء الاتصال ويربط المنفذ المستلم بالمنفذ المحلي. إذا استقبل وكيل SOCKS البعيد بيانات من الخدمة، فإنه ينظر إلى جدول التعيين ويجد المنفذ الذي يحتاج للرد عليه، ويضيف المنفذ كرأس حتى يعرف وكيل SOCKS المحلي إلى أين يوجه البيانات. سيتم توجيه أي حركة مرور من المنفذ المستلم إلى المنفذ المحلي والعكس صحيح.
Tunna، نفق TCP عبر HTTP Nikos Vassakis حقوق النشر (C) 2014 SECFORCE.
هذه الأداة للأغراض القانونية فقط.
هذا البرنامج هو برنامج مجاني: يمكنك إعادة توزيعه و/أو تعديله وفقاً لشروط رخصة GNU العامة كما نشرتها مؤسسة البرمجيات الحرة، إما الإصدار 3 من الرخصة أو (حسب اختيارك) أي إصدار لاحق.
يتم توزيع هذا البرنامج على أمل أن يكون مفيداً، ولكن دون أي ضمان؛ حتى بدون الضمان الضمني للتسويق أو الملاءمة لغرض معين. راجع رخصة GNU العامة لمزيد من التفاصيل.
يجب أن تكون قد تلقيت نسخة من رخصة GNU العامة مع هذا البرنامج. إذا لم تكن قد تلقيتها، فاطلع على http://www.gnu.org/licenses/.