
أداة ما بعد الاستغلال بلغة 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 مخصص.