
أداة ما بعد الاستغلال بلغة C# لـ Microsoft SQL Server (MS SQL / MSSQL) تعبر سلاسل الخوادم المترابطة (linked-server) من أي عمق مع انتحال صفة تسجيل الدخول المتتالي (cascading login impersonation) عند كل قفزة.
اهبط بسلاسة في خادم Microsoft SQL Server (MS SQL) DBMS المستهدف، وكأنك وصلت على متن رحلة درجة رجال أعمال مع كأس شمبانيا في يدك. 🥂

MSSQLand هي أداة استغلال لاحق (post-exploitation) مكتوبة بلغة C# لخادم Microsoft SQL Server (MSSQL / MS SQL)، صُمّمت لفرق الاختراق الأحمر (red team). صُمّمت لتعمل داخل البيئة المستهدفة مباشرة عبر قنوات الاتصال الخاصة بك (مثل استخدام execute-assembly في Cobalt Strike أو Havoc أو أي أمر dotnet)، وتتيح لك التنقل عبر سلاسل الخوادم المرتبطة، وانتحال هوية أي تسجيل دخول (login) تصادفه على طول الطريق، والخروج من القفزة الأخيرة بأي إجراء تريده. كل ذلك بأقل بصمة OPSEC وبدون تبعيات خارجية.
OPENQUERY / EXEC AT عبر سلاسل بأي عمقEXECUTE AS LOGIN في كل قفزة مع انتحال هوية متعدد المستخدمين المتتاليcm-* مخصصة لاستكشاف واستغلال قواعد بيانات Microsoft Configuration Manager[!TIP] تم بناء MSSQLand باستخدام
.NET Framework 4.8، مع وضع تنفيذ التجميع (assembly execution) في الاعتبار، باستخدام السياق الحالي. إذا كنت بحاجة إلى الاتصال باستخدام تجزئات NT/LM أو تذكرة Kerberos، راجع Pass-the-Hash.
[!NOTE] لا تنس الأساسيات. أثناء تقييم الأمان، قد يكون من الأسهل استخدام SQL Server Management Studio (SSMS).
MSSQLand.exe [options] <host> [options] <action> [action-options]
MSSQLand.exe <host> --probe
يتم قبول العلامات العامة (-c, -l, --debug, إلخ) في أي موضع، بما في ذلك بعد اسم الإجراء؛ يتم تمرير الرموز غير المعروفة بعد الإجراء كما هي إلى الإجراء.
[!NOTE] حذف
<action>يؤدي إلى إجراء اختبار اتصال فقط. يقوم بالمصادقة والخروج دون تشغيل استعلامات. مثالي للتحقق من صحة بيانات الاعتماد بأقل بصمة OPSEC.
[!TIP] تجنب كتابة جميع استدعاءات RPC Out أو OPENQUERY يدويًا. دع الأداة تتعامل مع أي سلسلة خوادم مرتبطة باستخدام الوسيط
-l، حتى تتمكن من التركيز على الصورة الكبيرة.
التنسيق: server:port/user@database أو أي تركيبة server/user@database:port.
server (مطلوب) - اسم مضيف SQL Server أو عنوان IP:port (اختياري) - رقم المنفذ (الافتراضي: 1433، شائع أيضًا: 1434، 14333، 2433)/user (اختياري) - مستخدم لانتحال هويته على هذا الخادم ("execute as login")
/user1/user2/user3 ينفذ EXECUTE AS LOGIN = 'user1'; EXECUTE AS LOGIN = 'user2'; EXECUTE AS LOGIN = 'user3';/user يدفع سياق انتحال جديد إلى مكدس الأمان@database (اختياري) - سياق قاعدة البيانات# اختبار الاتصال: يتحقق من أن الخادم حي دون مصادقة
MSSQLand.exe localhost --probe
# اختبار اتصال فقط (لا يتم تنفيذ أي إجراء، مصادقة وخروج)
MSSQLand.exe localhost -c token
# تنفيذ إجراء محدد
MSSQLand.exe localhost -c token info
MSSQLand.exe localhost:1434@db03 -c token info
MSSQLand.exe LAB-SQL01@AdventureWorks -c token tables -n Customer
ربط خوادم SQL متعددة باستخدام العلم -l مع الفاصلة المنقوطة (;) كفاصل:
-l SQL01;SQL02/user;SQL03@database
البنية:
;) - تفصل الخوادم في السلسلة/) - تحدد المستخدم لانتحال هويته ("execute as login")
/user1/user2 ينفذ انتحالات متتالية@) - تحدد سياق قاعدة البيانات[...]) - تستخدم لحماية اسم الخادم من التقسيم بواسطة فواصلناأمثلة:
# سلسلة بسيطة
-l SQL01;SQL02;SQL03
# مع انتحال هوية وقواعد بيانات
-l SQL01/admin;SQL02;SQL03/manager@clients
# انتحال هوية متتالي (انتحال user1، ثم user2 على SQL01)
-l SQL01/user1/user2;SQL02;SQL03
# انتحال متتالي مختلط (SQL01: user1→user2، SQL03: user3→user4→user5)
-l SQL01/user1/user2;SQL02;SQL03/user3/user4/user5@database
# يمكن أن تحتوي أسماء الخوادم على واصلات ونقاط (لا حاجة للأقواس)
-l SQL-01;SERVER.001;HOST.DOMAIN.COM
# الأقواس مطلوبة فقط إذا كان اسم الخادم يحتوي على أحرف فاصلة
-l [SERVER;PROD];SQL02;[SQL03@clients]@clientdb
[!NOTE] تحديد المنفذ (
:port) ينطبق فقط على اتصال المضيف الأولي. تستخدم سلاسل الخوادم المرتبطة (-l) أسماء الخوادم المرتبطة كما هي مهيأة فيsys.servers، وليس تركيباتhostname:port.
لا تتطلب هذه الأوضاع مصادقة وتعمل قبل أن يكون لديك بيانات اعتماد.
تستمع خدمة SQL Server Browser على UDP 1434 وتستجيب لطلبات الاكتشاف بقائمة مثيلات SQL Server التي تعمل على مضيف، بما في ذلك أسمائها وإصداراتها ومنافذ TCP. هذا مفيد عندما يعمل الهدف على مثيلات مسماة على منافذ ديناميكية، فلا حاجة للتخمين أو المسح.
# الاستعلام عن خدمة SQL Browser على مضيف محدد (UDP 1434)
MSSQLand.exe LAB-SQL03 --browse
يكشف Active Directory عن تسجيلات SQL Server من خلال أسماء الخدمة الرئيسية (SPNs) المخزنة على حسابات الكمبيوتر والخدمة. يقوم MSSQLand بالاستعلام عن AD عبر LDAP بحثًا عن MSSQLSvc/* SPNs لتعداد مثيلات SQL Server عبر المجال، أو الغابة بأكملها عبر الكتالوج العام (Global Catalog).
# العثور على خوادم SQL في Active Directory عبر LDAP (المجال الحالي)
MSSQLand.exe --findsql
# استهداف مجال محدد
MSSQLand.exe --findsql pgd.lab
# البحث على مستوى الغابة عبر الكتالوج العام (المنفذ 3268)
MSSQLand.exe --findsql pgd.lab --gc
الاكتشاف متعدد الطبقات. راجع FindSqlServers.cs لمزيد من التفاصيل.
تستجيب SQL Server Browser أيضًا لحزم البث UDP على UDP 1434، مما يسمح باكتشاف جميع مثيلات SQL Server التي تعلن عن نفسها على الشبكة الفرعية المحلية.
# اكتشاف البث على الشبكة المحلية (UDP 1434)
MSSQLand.exe --broadcast
MSSQLand.exe --broadcast --timeout 5
[!TIP] هذا مفيد بشكل خاص عندما يعمل SQL Server على جهاز غير منضم إلى مجال وبالتالي لن يظهر في أي استعلام LDAP أو SPN. فكر في الخوادم المستقلة، وأجهزة المطورين، أو المثيلات المارقة التي يتم تشغيلها على VLAN داخلي.
يتحقق من صحة المنافذ المفتوحة مقابل مثيلات SQL Server الحية باستخدام مصافحات بروتوكول TDS (وليس مجرد TCP SYN). يتم الإبلاغ عن المنفذ فقط إذا استجاب لحزمة TDS pre-login.
MSSQLand.exe LAB-SQL03 --portscan
MSSQLand.exe LAB-SQL03 --portscan --all # البحث عن جميع المثيلات (النطاق العابر الكامل)
MSSQLand.exe LAB-SQL03 --portscan 65184 # منفذ واحد
MSSQLand.exe LAB-SQL03 --portscan 65180-65190 # نطاق منافذ
MSSQLand.exe LAB-SQL03 --portscan 1433,5000,65184 # قائمة مفصولة بفواصل
يعمل MSSQLand كتجميع .NET داخل قناة اتصال ويقوم دائمًا بالمصادقة باستخدام سياق التنفيذ الحالي (-c token). عندما يكون لديك تجزئة، فإن النهج الصحيح هو إنشاء رمز على مستوى القناة أولاً ثم تشغيل MSSQLand بشكل عادي. يرث System.Data.SqlClient هذا الرمز بشفافية، ولا يلزم تنفيذ TDS مخصص.
تطبيق NTLMv2 من الصفر داخل MSSQLand سيعني:
System.Data.SqlClient بمكدس TDS 7.x مكتوب يدويًا (سطور كثيرة جدًا من كود المقبس و TLS و NTLM).إذا كنت بحاجة إلى المصادقة باستخدام تذكرة Kerberos أو تجزئات NT/LM من موقع خارجي، فإن mssqlclient-ng هي الأداة المناسبة. هذا عميل Python 3 مبني للوصول من جانب Unix، ويقترن بسهولة مع وكيل SOCKS5 تم إنشاؤه من قناتك.
إذا كنت تشغل MSSQLand على مضيف Windows الخاص بك ولكنك بحاجة للوصول إلى خادم SQL هدف عبر بيئة Linux (VMware Hyper-V أو WSL)، يمكنك بسهولة إعادة توجيه الاتصال باستخدام socat:
sudo socat TCP4-LISTEN:1433,fork,reuseaddr TCP:10.10.11.90:1433
يستمع هذا الأمر على المنفذ 1433 على جهاز Linux الخاص بك ويعيد توجيه كل حركة المرور إلى خادم SQL الهدف عند 10.10.11.90:1433. يمكنك بعد ذلك توصيل MSSQLand بعنوان IP الخاص بـ Linux VM الخاص بك من مضيف Windows.
-h أو --help - عرض جميع الإجراءات المتاحة-h search_term - تصفية الإجراءات (مثل -h adsi يعرض جميع الإجراءات المتعلقة بـ ADSI)localhost -c token createuser -h - عرض تعليمات مفصلة لإجراء محدديتضمن MSSQLand دعمًا شاملاً لاستغلال واستكشاف Microsoft Configuration Manager (المعروف سابقًا باسم SCCM / MECM). عندما يكون لديك إمكانية الوصول إلى خادم قاعدة بيانات ConfigMgr، يمكنك الاستفادة من إجراءات متخصصة لذكاء الأجهزة (مثل cm-devices) أو رسم خرائط البنية التحتية.
تستخدم جميع إجراءات ConfigMgr البادئة cm- (مثل cm-scripts، cm-package) لتتماشى مع اصطلاح تسمية أوامر PowerShell الرسمية من Microsoft (Get-CM*، Set-CM*، إلخ).
تم تصميم مخرجات الأداة، المثرية بطوابع زمنية ومعلومات سياقية قيمة، لإنتاج نتائج جذابة بصريًا واحترافية، مما يجعلها مثالية لالتقاط لقطات شاشة عالية الجودة لأي من تقاريرك (مثل تسليم العميل، تقرير داخلي، تقييمات الفريق الأحمر).
جميع جداول المخرجات متوافقة مع Markdown ويمكن نسخها ولصقها مباشرة في ملاحظاتك دون أي عناء تنسيق.
[!TIP] يمكنك أيضًا الحصول على مخرجات متوافقة مع
.csvباستخدام الخيار--format csv:MSSQLand.exe localhost -c token --format csv --silent procedures > procedures.csv
المساهمات مرحب بها ومقدرة! سواء كان ذلك إصلاح الأخطاء، أو إضافة ميزات جديدة، أو تحسين الوثائق، أو مشاركة الملاحظات، فإن جهدك ذو قيمة ويحدث فرقًا. يزدهر المصدر المفتوح بالتعاون والتقدير. المساهمات، كبيرة كانت أم صغيرة، تساعد في تحسين الأداة ومجتمعها. وقتك وجهدك موضع تقدير حقيقي.
هنا، لن يتم محو أحد من تاريخ Git. لا خوف هنا. لن يقوم أحد بنسخ ولصق الكود الخاص بك دون الالتزام بروح التعاون في المصدر المفتوح.
يرجى الاطلاع على CONTRIBUTING.md للحصول على إرشادات مفصلة حول كيفية البدء.
إذا كنت تتساءل لماذا هذا موجود وليس كمساهمة لمشاريع SQL Servers الأخرى، راجع ORIGIN.md.
هذه الأداة مقدمة بدقة لأغراض أمنية دفاعية، والتعليم، واختبار الاختراق المصرح به. يجب أن يكون لديك تفويض كتابي صريح قبل تشغيل هذا البرنامج ضد أي نظام لا تملكه.
تم تصميم هذه الأداة للأغراض التعليمية فقط، وتهدف إلى مساعدة المتخصصين في الأمن على فهم واختبار أمان بيئات SQL Server في المهام المصرح بها.
تشمل البيئات المقبولة:
قد يؤدي إساءة استخدام هذا المشروع إلى اتخاذ إجراءات قانونية.
أي استخدام غير مصرح به لهذه الأداة في بيئات العالم الحقيقي أو ضد أنظمة دون إذن صريح من مالك النظام محظور تمامًا وقد ينتهك المعايير القانونية والأخلاقية. منشئو ومساهمو هذه الأداة ليسوا مسؤولين عن أي إساءة استخدام أو ضرر ناتج.
استخدم بمسؤولية وأخلاق. احترم القانون دائمًا واحصل على التفويض المناسب.